Zugriff auf die XML Schnittstelle

Moderatoren: Raskir, little.yoda, Zafnir, teclis2000, hades-hl, Gorbalad, Eclipse404

Antworten
DrSteelhammer
Grad reingeschneit -- (Höhlenkundig?)
Beiträge: 3
Registriert: 14. Jan 2016, 14:45

Zugriff auf die XML Schnittstelle

Beitrag von DrSteelhammer »

Ich habe vor einiger Zeit die Helden-Software gefunden und war echt begeistert, wie sehr sie die Heldenerstellung vereinfacht und beschleunigt.

Gestern Abend habe ich dann gesehen dass man sogar eigene Plugins schreiben kann und habe das gleich (wenn auch eher aus akuter Langeweile als aus Funktionsmangel der Software) ausprobieren wollen.
Ich bin auch soweit gekommen dass die Heldensoftware mein Plugin erkennt und die UI lädt usw, allerdings habe ich noch keine Möglichkeit gefunden an die XML Daten zu gelangen (oder schlichtweg einen Fehler dabei gemacht).

Meine "HeldenStart" Klasse implementiert das "HeldenXMLDatenPlugin" Interface und somit auch die "public String getType()" (gibt DATEN) zurück als auch die "public void doWork(JFrame arg0, Integer arg1, DatenAustauschImpl arg2)" aus der ich dann die Oberfläche erschaffe.

Ich schätze mal dass ich durch das DatenAustauschImpl Objekt an die XML Daten gelange, wüsste allerdings nicht wie, und hatte gehofft das mir hier vieleicht jemand weiterhelfen kann.
Ziel ist es momentan an die Daten eines (oder aller) Helden zu kommen, was genau ich dann damit anfangen werde kann ich noch nicht sagen, bis jetzt war das für mich eher mal ein Weg in der Freizeit ausserhalb der Arbeit wieder zu programmieren xD

Liebe Grüße
DrSteelhammer
Targodan
Verlaufen! -- (Höhlenkundig 0)
Beiträge: 6
Registriert: 12. Jul 2016, 09:37

Re: Zugriff auf die XML Schnittstelle

Beitrag von Targodan »

Ich fange auch gerade an mir ein Plugin zu schreiben und bin ziemlich am verzweifeln. Gibt es überhaupt eine Dokumentation zu wenigstens einer der Plugin-Schnittstellen?!

Hier mal was ich mir bisher zusammen gesucht habe.
Dieses OpenSource (juhu!) Projekt benutzt die XML Schnittstelle, da kann man sich ein bisschen was raussuchen. https://github.com/HRogge/CompactPDFExport

Ansonsten hier mal ein paar Code-Snippets die ich bisher so zusammen getragen habe:

In der Implementierung des helden.plugin.HeldenXMLDatenPlugin3 Interface sind für den Datenaustausch folgende Methoden wichtig:

Code: Alles auswählen

    @Override
    public String getType() {
        return helden.plugin.HeldenXMLDatenPlugin3.DATEN;
    }

    @Override
    public void init(DatenAustausch3Interface dai, JFrame jframe) {
        // Wird aufgerufen, wenn die HeldenSoftware gestartet wird und liefert dir das Interface
        // Auf jeden fall irgendwie die dai übernehmen zur späteren verwendung. Ich mache das so:
        this.service = new Service(dai); // Den Service habe ich selbst geschrieben.
    }
Und hier ein paar Snippets aus meinem Service, da bin ich aber noch stark am experimentieren.

Code: Alles auswählen

// Imports

import helden.plugin.datenxmlplugin.DatenAustausch3Interface;
import java.io.StringWriter;
import javax.swing.JFrame;
import javax.xml.bind.JAXB;

import org.w3c.dom.*;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import reiseplugin.data.jaxb.*; // Hier sind meine von JAXB generierten Dateien drin

// ----------- Erstmal ein helferlein

    private String documentToString(Document doc) {
        DOMSource ds = new DOMSource(doc);
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        try {
            // Mit dem Try mache ich erstmal nur eine unchecked exception draus, später dann richtig abfangen
            TransformerFactory.newInstance().newTransformer().transform(ds, result);
        } catch(Exception e) {
            throw new RuntimeException(e);
        }
        return writer.toString();
    }
    
// ---------- Hier eine "echte" Abfrage
    public Daten getSelectedHeld() {
        Document request = documentBuilder.newDocument();
        
        Element requestElement = request.createElement("action");
		request.appendChild(requestElement);
		requestElement.setAttribute("action", "held");
		requestElement.setAttribute("id", "selected");
		requestElement.setAttribute("format", "xml");
		requestElement.setAttribute("version", "3");
        
        Object result = dai.exec(request);
		if (result == null) {
			throw new RuntimeException("Unbekannter Rückgabewert auf Request: null");
		}
		if (!(result instanceof org.w3c.dom.Document)) {
			throw new RuntimeException("Unbekannter Rückgabewert auf Request: "
					+ result.getClass().getCanonicalName());
		}
        
		Document doc = (org.w3c.dom.Document) result;
        
        // Funktioniert nur, wenn du JAXB verwenden willst, dazu gleich noch mehr
        // Alternativ kann man auch direkt auf dem Dokument arbeiten.
        // Die Daten-Klasse representiert die Daten eines Helden.
        Daten d = JAXB.unmarshal(new DOMSource(doc), Daten.class);
        return d;
    }
Und noch ein bisschen zu JAXB: Die einzige XSD (XML-Schema) die ich gefunden habe ist bei dem OpenSource-Projekt dabei das ich oben verlinkt habe.
Noch zwei Fragen an little.yoda: Gibt es eine "offizielle" XSD für die Daten? Gibt es irgendeine Dokumentation, was für actions ich der Schnittstelle geben kann und mit welchen Parametern? Bisher habe ich nur die "held" action gefunden und auch für die musste ich in dem OpenSource Projekt wühlen.
Benutzeravatar
little.yoda
Meine Höhle! -- (Höhlenkundig 21)
Beiträge: 2515
Registriert: 10. Dez 2004, 17:48
Kontaktdaten:

Re: Zugriff auf die XML Schnittstelle

Beitrag von little.yoda »

Nur kurz, da gerade nicht viel Zeit:

ich habe zwei Plugins auf github gestellt:

https://github.com/littleyoda/hsTestPlugin
https://github.com/littleyoda/hsStatistikPlugin

Einmal mein StatistikPlugin (nutzt aber leider nicht JAXB) und einmal einfach ein TestPlugin, welche JAXB nutzt.


Die Frage versuche ich in den nächsten Tagen zu beantworten:
Macht uns das Leben einfacher und beachtet die Anmerkungen zum Bugreporting.
Eine schöne Art uns Danke zu sagen: Uns unterstützen oder meine persönliche Wunschliste
Antworten