hi zusammen
für meine applikation habe ich folgende klasse geschrieben, welche meine models bereithält, lädt & speichert:
ist es sinnvoll diese aufgabe auf diese weise zu lösen?
gibt es bessere ansätze? ich bin mir eben wegen den statischen objekten & methoden nicht so ganz sicher... aber auf die andere seite ist es so am praktischsten, um von überall her zugriff auf die daten zu haben...
vielen dank für anregungen!
gruss
m@nu
für meine applikation habe ich folgende klasse geschrieben, welche meine models bereithält, lädt & speichert:
Code:
/*
* Created on 19.05.2005
*/
package net.msites.drivesync.data.core.models;
import java.io.File;
import java.util.ArrayList;
import net.msites.drivesync.data.core.io.TaskIconXMLReader;
import net.msites.drivesync.data.core.io.plugindefinition.PluginDefinitionReader;
import net.msites.drivesync.data.core.io.setting.SettingReader;
import net.msites.drivesync.data.core.io.setting.SettingWriter;
import net.msites.drivesync.data.core.io.task.TaskReader;
import net.msites.drivesync.data.core.io.task.TaskWriter;
import net.msites.drivesync.data.core.models.plugindefinition.PluginDefinitionHolder;
import net.msites.drivesync.data.core.models.settings.SettingHolder;
import net.msites.drivesync.data.core.models.settings.SettingProperty;
import net.msites.drivesync.data.core.models.task.Group;
import net.msites.drivesync.data.core.models.task.TaskHolder;
import net.msites.drivesync.data.reusable.io.BasicXMLStructureReader;
/**
* Diese Klasse stellt statische Methoden zur Verfügung, welche den Zugriff
* auf die Haupt-Datenstrukturen erlauben.
*
* @author Manuel Alabor
* @version 1.0
*/
public class ApplicationDataHolder {
/* Eigenschaften: */
private static SettingHolder settingHolder = null;
private static TaskHolder taskHolder = null;
private static PluginDefinitionHolder pluginDefinitionHolder = null;
private static ArrayList quickAddHolder = null;
private static ArrayList taskIconHolder = null;
/* Konstanten: */
private static final String settingXML = "settings.xml";
private static final String taskXML = "tasks.xml";
private static final String pluginDefinitionXML = "plugins/plugins.xml";
private static final String quickAddXML = "quickadd.xml";
private static final String taskIconXML = "taskicons/icons.xml";
// Getter-Methoden ---------------------------------------------------------
/**
* Liefert die Datenstruktur <code>settingHolder</code> mit allen aktuell
* geladenen/verfügbaren Einstellungen für DriveSync.
* Wurde die Datenstruktur noch nicht initialisiert/geladen, wird dies
* automatisch nachgeholt.
*
* @return
*/
public static SettingHolder getSettingHolder() {
if(settingHolder == null) {
loadSettingXML();
}
return settingHolder;
}
/**
* Liefert die Datenstruktur <code>taskHolder</code> mit allen aktuell
* geladenen/verfügbaren Aufgaben.
* Wurde die Datenstruktur noch nicht initialisiert/geladen, wird dies
* automatisch nachgeholt.
*
* @return
*/
public static TaskHolder getTaskHolder() {
if(taskHolder == null) {
loadTaskXML();
}
return taskHolder;
}
/**
* Liefert die Datenstruktur <code>pluginHolder</code> mit allen aktuell
* geladenen Plugins.
* Wurde die Datenstruktur noch nicht initialisiert/geladen, wird dies
* automatisch nachgeholt.
*
* @return
*/
public static PluginDefinitionHolder getPluginDefinitionHolder() {
if(pluginDefinitionHolder == null) {
loadPluginDefinitionXML();
}
return pluginDefinitionHolder;
}
/**
* Liefert die Datenstruktur <code>quickAddHolder</code> mit allen aktuell
* geladenen QuickAdd-Einträgen für das erstellen von Namenausschlüssen.
* Wurde die Datenstruktur noch nicht initialisiert/geladen, wird dies
* automatisch nachgeholt.
*
* @return
*/
public static ArrayList getQuickAddHolder() {
if(quickAddHolder == null) {
loadQuickAddXML();
}
return quickAddHolder;
}
/**
* Liefert die Datenstruktur <code>taskIconHolder</code> mit allen aktuell
* geladenen Aufgaben-Symbolen.
* Wurde die Datenstruktur noch nicht initialisiert/geladen, wird dies
* automatisch nachgeholt.
*
* @return
*/
public static ArrayList getTaskIconHolder() {
if(taskIconHolder == null) {
loadTaskIconXML();
}
return taskIconHolder;
}
// Laden -------------------------------------------------------------------
/**
* Lädt alle Einstellungen aus der Settings.xml in einen
* <code>SettingHolder</code>.
*/
private static void loadSettingXML() {
/* Prüfen ob Setting-XML existiert: */
File checker = new File(settingXML);
if(!checker.exists() || !checker.isFile()) {
// Wenn die Setting-XML-Datei nicht existiert, wird ein SettingHolder
// mit Standart-Einstellungen erstellt.
// Sobald gespeichert wird, wird der neue Standart-SettingHolder dann
// in die XML-Datei geschrieben.
settingHolder = createDefaultSettingHolder();
} else {
// Existiert die XML-Datei, wird diese eingelesen.
try {
// Einstellungen holen:
SettingReader settingReader = new SettingReader();
settingHolder = settingReader.readXML(settingXML);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Lädt die Aufgaben in der XML-Datei "tasks.xml" im Applikationsordner
* in die Datenstruktur <code>taskHolder</code>.
*/
private static void loadTaskXML() {
/* Prüfen ob Task-XML existiert: */
File checker = new File(taskXML);
if(!checker.exists() || !checker.isFile()) {
// Wenn die Task-XML-Datei nicht existiert, wird ein TaskHolder mit
// Standart-Daten erstellt.
// Sobald gespeichert wird, wird der neue Standart-TaskHolder dann
// in die XML-Datei geschrieben.
taskHolder = createDefaultTaskHolder();
} else {
// Existiert die XML-Datei, wird diese eingelesen.
try {
// Aufgaben holen:
TaskReader taskReader = new TaskReader();
taskHolder = taskReader.readXML(taskXML);
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* Lädt alle installierten Plugins in die Datenstruktur
* <code>pluginHolder</code>.
*/
private static void loadPluginDefinitionXML() {
try {
// Plugins holen:
PluginDefinitionReader pluginReader = new PluginDefinitionReader();
pluginDefinitionHolder = pluginReader.readXML(pluginDefinitionXML);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Lädt die XML mit allen QuickAdd-Items, welche für das erstellen von neuen
* Namenausschlüssen verwendet werden können.
*/
private static void loadQuickAddXML() {
BasicXMLStructureReader reader = new BasicXMLStructureReader("item");
quickAddHolder = reader.readXML(quickAddXML);
}
/**
* Lädt die XML mit allen verfügbaren Aufgabensymbolen, welche zur verfügung
* stehen.
*/
private static void loadTaskIconXML() {
TaskIconXMLReader reader = new TaskIconXMLReader();
taskIconHolder = reader.readXML(taskIconXML);
}
// Speichern ---------------------------------------------------------------
/**
* Speichert die Daten im <code>settingHolder</code> in die entsprechende
* XML-Datei.
*/
public static void saveSettingHolder() {
try {
// Einstellungen speichern:
SettingWriter writer = new SettingWriter();
writer.writeXML(settingXML, settingHolder);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Speichert die Daten im <code>taskHolder</code> in die entsprechende
* XML-Datei.
*/
public static void saveTaskHolder() {
try {
// Aufgaben speichern:
TaskWriter writer = new TaskWriter();
writer.writeXML(taskXML, taskHolder);
} catch (Exception e) {
e.printStackTrace();
}
}
// Default-Strukturen ------------------------------------------------------
// Folgende Methoden liefern den jeweiligen Data-Holder mit den Standart-
// Inhalten. Somit kann eine Datei frisch erstellt werden, falls diese nicht
// vorhanden sein sollte.
/**
* Erstellt einen <code>SettingHolder</code> welcher lediglich die Standart-
* Einstellungen enthält.
*
* @return
*/
private static SettingHolder createDefaultSettingHolder() {
/* SettingHolder erstellen: */
SettingHolder settingHolder = new SettingHolder();
/* Standart-Einstellungen erstellen: */
SettingProperty concurrentThreads =
new SettingProperty("concurrentThreads", new Integer(1));
SettingProperty saveTasksBeforeSync =
new SettingProperty("saveTasksBeforeSync", new Boolean(true));
/* Einstellungen zum Holder hinzufügen: */
settingHolder.addProperty(concurrentThreads);
settingHolder.addProperty(saveTasksBeforeSync);
/* Rückgabe: */
return settingHolder;
}
/**
* Erstellt einen leeren <code>TaskHolder</code>, welcher lediglich die
* Standart-Gruppe "< keine >" (id = 0) enthält.
*
* @return
*/
private static TaskHolder createDefaultTaskHolder() {
/* TaskHolder erstellen: */
TaskHolder taskHolder = new TaskHolder();
/* Standartgruppe erstellen & zum Holder hinzufügen: */
Group defaultGroup = new Group("0", "< keine >");
taskHolder.addGroup(defaultGroup);
/* Rückgabe: */
return taskHolder;
}
}
ist es sinnvoll diese aufgabe auf diese weise zu lösen?
gibt es bessere ansätze? ich bin mir eben wegen den statischen objekten & methoden nicht so ganz sicher... aber auf die andere seite ist es so am praktischsten, um von überall her zugriff auf die daten zu haben...
vielen dank für anregungen!
gruss
m@nu