SuperX-Kernmodul
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

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