Hallo zusammen,
Ich bin neu hier und brauch gleich mal was
Ich würde gernen ein XML auslesen, es über ein JTREE anzeigen bzw. bearbeiten und dann wieder in eine XML Datei zurückschreiben. Über die Konsole bring ich das auch schon alles hin. Es fehlt mir eigentlich nur mehr die GUI - Umsetzung.
Das XML kann z.b so aussehen (Die Struktur bleibt immer gleich--> es werden nur Elemente gelöscht bzw. hinzugefügt)
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<AlarmConfig>
<AlarmModule>
<ALARM AttributeName="Alarmgenerierung_1.test" AlarmText="Anzeigentest" AlarmGroupIndex="1" Priority="100"/>
<ALARM AttributeName="Alarmgenerierung_2.test" AlarmText="Anzeigentest" AlarmGroupIndex="2" Priority="200"/>
<ALARM AttributeName="Alarmgenerierung_3.test" AlarmText="Anzeigentest" AlarmGroupIndex="3" Priority="300"/>
<ALARM AttributeName="Alarmgenerierung_4.test" AlarmText="Anzeigentest" AlarmGroupIndex="4" Priority="400"/>
</AlarmModule>
<AlarmGruppen>
<ALARMGROUP Group="Alarmgenerierung_1" TextAttribute="G,S,L," AlarmGroupIndex="1"/>
<ALARMGROUP Group="Alarmgenerierung_2" TextAttribute="R,T,L," AlarmGroupIndex="2"/>
<ALARMGROUP Group="Alarmgenerierung_3" TextAttribute="O,T,L," AlarmGroupIndex="3"/>
<ALARMGROUP Group="Alarmgenerierung_4" TextAttribute="G,T,L," AlarmGroupIndex="4"/>
</AlarmGruppen>
</AlarmConfig>
[/XML]
Um das ganze zu laden hab ich eine Loader Klasse geschrieben die mir ein Jdom.Doc zurückliefert:
[/XML]
Eine Handler Klasse bekommt eben dieses Doc übergeben und kann damit dann gewisse Aktionen ausführen (Gruppen auslesen, Löschen, hinzufügen etc...)
Der Saver speichert das DOC dann wieder in eine Datei:
Wie schon gesagt mir fehlt einfach der Ansatz das in ein JTREE Element zu verpacken bzw. da verarbeiten zu können!:bahnhof: Vlt. kann mir ja jemand einen kleinen Tipp geben
Besten Dank,
Mario
Ich bin neu hier und brauch gleich mal was
Ich würde gernen ein XML auslesen, es über ein JTREE anzeigen bzw. bearbeiten und dann wieder in eine XML Datei zurückschreiben. Über die Konsole bring ich das auch schon alles hin. Es fehlt mir eigentlich nur mehr die GUI - Umsetzung.
Das XML kann z.b so aussehen (Die Struktur bleibt immer gleich--> es werden nur Elemente gelöscht bzw. hinzugefügt)
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<AlarmConfig>
<AlarmModule>
<ALARM AttributeName="Alarmgenerierung_1.test" AlarmText="Anzeigentest" AlarmGroupIndex="1" Priority="100"/>
<ALARM AttributeName="Alarmgenerierung_2.test" AlarmText="Anzeigentest" AlarmGroupIndex="2" Priority="200"/>
<ALARM AttributeName="Alarmgenerierung_3.test" AlarmText="Anzeigentest" AlarmGroupIndex="3" Priority="300"/>
<ALARM AttributeName="Alarmgenerierung_4.test" AlarmText="Anzeigentest" AlarmGroupIndex="4" Priority="400"/>
</AlarmModule>
<AlarmGruppen>
<ALARMGROUP Group="Alarmgenerierung_1" TextAttribute="G,S,L," AlarmGroupIndex="1"/>
<ALARMGROUP Group="Alarmgenerierung_2" TextAttribute="R,T,L," AlarmGroupIndex="2"/>
<ALARMGROUP Group="Alarmgenerierung_3" TextAttribute="O,T,L," AlarmGroupIndex="3"/>
<ALARMGROUP Group="Alarmgenerierung_4" TextAttribute="G,T,L," AlarmGroupIndex="4"/>
</AlarmGruppen>
</AlarmConfig>
[/XML]
Um das ganze zu laden hab ich eine Loader Klasse geschrieben die mir ein Jdom.Doc zurückliefert:
Java:
package xml;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class XmlLoader {
private String path;
private Document doc;
public XmlLoader(String p ){
this.path = p;
}
public Document getJdomDocument(){
File fin = new File(this.path);
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(fin));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
SAXBuilder builder = new SAXBuilder();
try {
this.doc = builder.build(is);
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return doc;
}
}
Eine Handler Klasse bekommt eben dieses Doc übergeben und kann damit dann gewisse Aktionen ausführen (Gruppen auslesen, Löschen, hinzufügen etc...)
Java:
package xml;
import java.util.ArrayList;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
public class XmlHandler {
private Document doc;
private Element root;
private List<Element> AlarmModule = new ArrayList<Element>();
private List<Element> AlarmGroups = new ArrayList<Element>();
public XmlHandler(Document d){
this.setJdomDoc(d);
this.root = doc.getRootElement();
this.AlarmModule = root.getChild("AlarmModule").getChildren();
this.AlarmGroups = root.getChild("AlarmGruppen").getChildren();
}
public void setJdomDoc(Document doc) {
this.doc = doc;
this.root = doc.getRootElement();
this.AlarmModule = root.getChild("AlarmModule").getChildren();
this.AlarmGroups = root.getChild("AlarmGruppen").getChildren();
}
public Document getJdomDoc() {
return doc;
}
public Element getRootElement(){
return this.doc.getRootElement();
}
public List<Element> getAlarmGroups() {
return this.AlarmGroups;
}
public List<Element> getAlarmModules(){
return this.AlarmModule;
}
public void AddAlarmModule(String name, String alarmtext,
int alarmgroupindex, int priority) throws UnknownAlarmModuleException{
if((name == "") || alarmtext == "" || alarmgroupindex <= 0 || alarmgroupindex >= 20 || priority <= 0 || priority >= 500){
throw new UnknownAlarmModuleException();
}
else
{
Element el = new Element("ALARM").setAttribute("AttributeName", name).
setAttribute("AlarmText", alarmtext).
setAttribute("AlarmGroupIndex",Integer.toString(alarmgroupindex)).
setAttribute("Priority", Integer.toString(alarmgroupindex));
this.root.getChild("AlarmModule").addContent(el);
}
}
public void AddAlarmGroup(String name, String textatt, int alarmgroupindex)
throws UnknownAlarmModuleException{
if((name == "") || textatt == "" || alarmgroupindex <= 0 || alarmgroupindex >= 20 ){
throw new UnknownAlarmModuleException();
}
else
{
Element el = new Element("ALARMGROUP").setAttribute("Group", name).
setAttribute("TextAttribute", textatt).
setAttribute("AlarmGroupIndex",Integer.toString(alarmgroupindex));
this.root.getChild("AlarmGruppen").addContent(el);
}
}
public List<Element> getAlarmModulesByName(String name){
//gibt eine ArrayList mit allen Elementen zurück die den übergebenen Modulnamen besitzen
List<Element> list = new ArrayList<Element>();
List<Element> filter = new ArrayList<Element>();
Element helpelement = new Element("HelpElement");
helpelement.setAttribute("AttributeName", name);
list =this.getAlarmModules();
for (Element element : list) {
if(element.getAttribute("AttributeName").toString()
.equals(helpelement.getAttribute("AttributeName").toString())){
filter.add(element);
}
}
return filter;
}
public List<Element> getAlarmModulesByPrio(int prio){
//gibt eine ArrayList mit allen Elementen zurück die die übergebene Prioritaet besitzen
List<Element> list = new ArrayList<Element>();
List<Element> filter = new ArrayList<Element>();
Element helpelement = new Element("HelpElement");
helpelement.setAttribute("Priority", Integer.toString(prio));
list =this.getAlarmModules();
for (Element element : list) {
if(element.getAttribute("Priority").toString()
.equals(helpelement.getAttribute("Priority").toString())){
filter.add(element);
}
}
return filter;
}
public List<Element> getAlarmModulesByGroup(int group){
//gibt eine ArrayList mit allen Elementen zurück die die übergebene Alarmgruppe besitzen
List<Element> list = new ArrayList<Element>();
List<Element> filter = new ArrayList<Element>();
Element helpelement = new Element("HelpElement");
helpelement.setAttribute("AlarmGroupIndex", Integer.toString(group));
list = this.getAlarmModules();
for (Element element : list) {
if(element.getAttribute("AlarmGroupIndex").toString()
.equals(helpelement.getAttribute("AlarmGroupIndex").toString())){
filter.add(element);
}
}
return filter;
}
public List<Element> getAlarmGroupsByGroup(int group){
//gibt eine ArrayList mit allen Elementen zurück die die übergebene Alarmgruppe besitzen
List<Element> list = new ArrayList<Element>();
List<Element> filter = new ArrayList<Element>();
Element helpelement = new Element("HelpElement");
helpelement.setAttribute("AlarmGroupIndex", Integer.toString(group));
list = this.getAlarmGroups();
for (Element element : list) {
if(element.getAttribute("AlarmGroupIndex").toString()
.equals(helpelement.getAttribute("AlarmGroupIndex").toString())){
filter.add(element);
}
}
return filter;
}
public void deleteAlarmModule(List<Element> list){
for(Element el : list ){
this.root.getChild("AlarmModule").removeContent(el);
}
}
public void deleteAlarmGroups(List<Element> list){
for (Element el : list){
this.root.getChild("AlarmGruppen").removeContent(el);
}
}
}
Der Saver speichert das DOC dann wieder in eine Datei:
Java:
package xml;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.jdom.*;
import org.jdom.output.XMLOutputter;
public class XmlDocWriter {
private String path;
private Document doc;
public XmlDocWriter(Document d){
this.doc = d;
}
public boolean WriteDocToFile(String p){
this.path = p;
File fout = new File(this.path);
try {
XMLOutputter out = new XMLOutputter();
OutputStream fos = new FileOutputStream(fout);
out.output(this.doc, fos);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e){
e.printStackTrace();
}
return true;
}
}
Wie schon gesagt mir fehlt einfach der Ansatz das in ein JTREE Element zu verpacken bzw. da verarbeiten zu können!:bahnhof: Vlt. kann mir ja jemand einen kleinen Tipp geben
Besten Dank,
Mario