package de.superx.common;
import java.util.Enumeration;
import javax.swing.tree.TreeNode;
import javax.swing.tree.TreePath;
import de.memtext.util.TreeUtils;
import de.superx.common.Field.Art;
import de.superx.common.Field.Typ;
public class FieldXmlEncoder {
/**
* Xml-Darstellung wie zur Erstellung der Maske (maske_html.xsl) benötigt
* wird.
*
* @return
*/
public static String toXml(Field f, boolean isFullXMLRequired, int rownr) {
StringBuffer result = new StringBuffer("\n");
result.append(getBasics(f));
appendSichtgruppe(f, result);
appendRelation(f, isFullXMLRequired, result);
// result.append(" Nutzungsprotokolle (intern)
result.append("" + rownr + "\n");
result.append("\n");
return result.toString();
}
private static String dynamic(Field f) {
String result = " isDynamic=\"false\"";
if (f.isDynamic()) result = " isDynamic=\"true\"";
return result;
}
/**
* Aufruf von Ajax-Nachladen
*
* @param f
* @param param
* @return
*/
public static String toXml(Field f, String param) {
if (param == null) throw new IllegalArgumentException("Param null");
StringBuffer result = new StringBuffer();
if (param.equalsIgnoreCase("!all"))
result.append(toXml(f, true, 0));// bei Ajax-nachladen wird rownr
// nicht benötigt
else {
result.append("\n");
if (!f.getSelectableItemsTree().containsItemWithId(param))
throw new IllegalArgumentException("Im Feld " + f.getName() + " (" + f.getId() + ") gibt es kein Element " + param);
SelectableItemNode startnode = f.getSelectableItemsTree().getById(param);
for (Enumeration en = startnode.children(); en.hasMoreElements();) {
SelectableItemNode node = (SelectableItemNode) en.nextElement();
node.toXml(f.isTreeView(), result);
}
result.append("\n\n");
}
return result.toString();
}
private static void appendRelation(Field f, boolean isFullXMLRequired, StringBuffer result) {
result.append(" \n");
if (isFullXMLRequired || (f.getArt() != Art.id_12_Sicht && !(f.getArt() == Art.id_1_Nummer_Text_nur_mit_Dialog && (f.getZeilenanzahl() > 1 || f.isDynamic())))) {
TreeNode anode;
int maxLevel = -1; // default alle Knoten ausgeben
if (f.getSichtgruppe() != null && f.getSichtgruppe().getSelectedSicht().getXmlMaxEntries() != null) {
// bis zu welchem Level ausgeben, damit maximal x Knoten
// angezeigt
// werden
maxLevel = TreeUtils.getMaxLevel(f.getSelectableItemsTree().getRoot(), f.getSichtgruppe().getSelectedSicht().getXmlMaxEntries().intValue());
}
// Knoten ausgeben
for (Enumeration en = f.getSelectableItemsTree().getRoot().preorderEnumeration(); en.hasMoreElements();) {
anode = (TreeNode) en.nextElement();
SelectableItemNode node = (SelectableItemNode) anode;
if (isNodeWanted(f, node, maxLevel))
// bei Feldart 9 (altes Xml Treeview wird parent mit
// ausgegeben
node.toXml(f.isTreeView(), result);
}
} else {
result.append("\n");
}
result.append(" \n");
if (f.getDefaultValue() != null) {
String name = f.getDefaultValue().getName().toString();
// bei Datumsdirekteingabe auf ' verzichten
if (f.getTyp() == Typ.typ_char && f.getArt() == Art.id_0_nur_Text_direkte_Eingabe) {
if (name.startsWith("'")) name = name.substring(1);
if (name.endsWith("'")) name = name.substring(0, name.length() - 1);
}
String hasDefaultValueInDB = "false";
if (f.getDefaultwertString() != null && !f.getDefaultwertString().equals("")) hasDefaultValueInDB = "true";
result.append("\n");
}
}
/**
* //bei alt. Hierarchien nicht sichtbare Knoten überspringen
*
* @param f
* @param node
* @param maxLevel
* @return
*/
private static boolean isNodeWanted(Field f, SelectableItemNode node, int maxLevel) {
int dummy = 1;
boolean isWanted = true;
if (node.isRoot() || node.isTemporary()) isWanted = false;
if (isWanted && f.getSichtgruppe() != null) {
AbstractSicht sicht = f.getSichtgruppe().getSelectedSicht();
if (maxLevel > -1 && node.getLevel() > maxLevel) {
isWanted = false;
}
if (isWanted && sicht.isAltHier() && !sicht.isVisible(new TreePath(node.getPath()))) isWanted = false;
}
return isWanted;
}
private static void appendSichtgruppe(Field f, StringBuffer result) {
if (f.isOldOrganigrammArt() || f.isSicht()) {
if (f.getSichtgruppe() == null)
throw new IllegalStateException("Kann Feld " + f.getName() + "(" + f.getId() + ") nicht als XML darstellen, solange variable sichtgruppe null ist");
result.append(f.getSichtgruppe().toXml(f.isOldOrganigrammArt()));
}
}
private static StringBuffer getBasics(Field f) {
StringBuffer result = new StringBuffer("");
result.append(" " + f.getId() + "\n");
result.append(" " + f.getName() + "\n");
if (!(f.getCaptionShort() == null)) result.append(" " + f.getCaptionShort() + "\n");
if (!(f.getCaptionLong() == null)) {
result.append(" "))
result.append(f.getCaptionLong().substring(6));
else
result.append(f.getCaptionLong());
result.append("]]>\n");
}
result.append(" " + f.getNummer() + "\n");
result.append(" " + f.getX() + "\n");
result.append(" " + f.getY() + "\n");
result.append(" " + f.getButtonbreite() + "\n");
result.append(" " + f.getFeldbreite() + "\n");
result.append(" " + f.getZeilenanzahl() + "\n");
result.append(" " + f.getTyp().getStringValue() + "\n");
result.append(" " + f.getLaenge() + "\n");
result.append(" " + (f.isObligatorisch() ? "1" : "0") + "\n");
result.append(" " + f.getArt().getIntValue() + "\n");
result.append(" ");
return result;
}
}
// Created on 29.04.2005 at 16:01:17