You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
183 lines
7.8 KiB
183 lines
7.8 KiB
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<String> dependentOnFields) { |
|
StringBuffer result = new StringBuffer("<feld " + dynamic(f) + ">\n"); |
|
result.append(getBasics(f)); |
|
appendSichtgruppe(f, result); |
|
appendRelation(f, isFullXMLRequired, result); |
|
if(dependentOnFields!=null && dependentOnFields.size()>0) |
|
{ |
|
result.append("<dependentOn>\n"); |
|
for (int i = 0; i < dependentOnFields.size(); ++i) { |
|
result.append("<fieldname>"+dependentOnFields.get(i)+"</fieldname>"); |
|
} |
|
result.append("</dependentOn>"); |
|
} |
|
// result.append(" <maskenname>Nutzungsprotokolle (intern)</maskenname> |
|
result.append("<rownr>" + rownr + "</rownr>\n"); |
|
result.append("</feld>\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("<feld " + dynamic(f) + ">\n<relation>"); |
|
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</relation>\n</feld>"); |
|
} |
|
|
|
return result.toString(); |
|
|
|
} |
|
|
|
private static void appendRelation(Field f, boolean isFullXMLRequired, StringBuffer result) { |
|
result.append(" <relation>\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("<!-- wegen dynamischen Nachladens der Einträge per Ajax(dojo) werden Einzelitems nicht ausgegeben-->\n"); |
|
} |
|
result.append(" </relation>\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("<defaultwert hasDbValue=\"" + hasDefaultValueInDB + "\"><key><![CDATA[" + f.getDefaultValue().getId() + "]]></key><name><![CDATA[" + name |
|
+ "]]></name></defaultwert>\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(" <tid>" + f.getId() + "</tid>\n"); |
|
result.append(" <name>" + f.getName() + "</name>\n"); |
|
if (!(f.getCaptionShort() == null)) result.append(" <caption_short>" + f.getCaptionShort() + "</caption_short>\n"); |
|
if (!(f.getCaptionLong() == null)) { |
|
result.append(" <caption_long><![CDATA["); |
|
if (f.getCaptionLong() != null && f.getCaptionLong().startsWith("<html>")) |
|
result.append(f.getCaptionLong().substring(6)); |
|
else |
|
result.append(f.getCaptionLong()); |
|
|
|
result.append("]]></caption_long>\n"); |
|
} |
|
result.append(" <nummer>" + f.getNummer() + "</nummer>\n"); |
|
result.append(" <x>" + f.getX() + "</x>\n"); |
|
result.append(" <y>" + f.getY() + "</y>\n"); |
|
result.append(" <buttonbreite>" + f.getButtonbreite() + "</buttonbreite>\n"); |
|
result.append(" <feldbreite>" + f.getFeldbreite() + "</feldbreite>\n"); |
|
result.append(" <zeilenanzahl>" + f.getZeilenanzahl() + "</zeilenanzahl>\n"); |
|
result.append(" <typ>" + f.getTyp().getStringValue() + "</typ>\n"); |
|
result.append(" <laenge>" + f.getLaenge() + "</laenge>\n"); |
|
result.append(" <obligatorisch>" + (f.isObligatorisch() ? "1" : "0") + "</obligatorisch>\n"); |
|
result.append(" <art>" + f.getArt().getIntValue() + "</art>\n"); |
|
result.append(" <attribut hasDynamicSichtDefault=\"" + (f.hasDynamicDefaultSicht() ? "true" : "false") + "\"><![CDATA[" |
|
+ (f.hasDynamicDefaultSicht() ? "" : f.getAttribut()) + "]]></attribut>"); |
|
return result; |
|
} |
|
|
|
} |
|
|
|
// Created on 29.04.2005 at 16:01:17 |
|
|
|
|