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.