package de.superx.common; import java.util.Enumeration; import java.util.List; 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, List dependentOnFields) { StringBuffer result = new StringBuffer("\n"); result.append(getBasics(f)); appendSichtgruppe(f, result); appendRelation(f, isFullXMLRequired, result); if(dependentOnFields!=null && dependentOnFields.size()>0) { result.append("\n"); for (int i = 0; i < dependentOnFields.size(); ++i) { result.append(""+dependentOnFields.get(i)+""); } result.append(""); } // 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,null));// 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