public static Element serializeCaseComponent( CaseComponent casecomponent, String name, Document doc) { try { Element root = doc.createElement("CaseComponent"); root.setAttribute("Name", name); root.setAttribute("Class", casecomponent.getClass().getCanonicalName()); root.setAttribute("IdAttribute", casecomponent.getIdAttribute().getName()); for (Attribute at : AttributeUtils.getAttributes(casecomponent)) { if (CaseComponent.class.isAssignableFrom(at.getType())) root.appendChild( serializeCaseComponent( (CaseComponent) at.getValue(casecomponent), at.getName(), doc)); else { Element child = doc.createElement(at.getName()); Object value = at.getValue(casecomponent); if (value != null) child.appendChild(doc.createTextNode(value.toString())); root.appendChild(child); } } return root; } catch (Exception e) { org.apache.commons.logging.LogFactory.getLog(CaseComponentSerializer.class).error(e); } return null; }
public static CaseComponent deserializeCaseComponent(Node node) { try { NamedNodeMap nodemap = node.getAttributes(); String className = nodemap.getNamedItem("Class").getTextContent(); CaseComponent cc = (CaseComponent) Class.forName(className).newInstance(); NodeList nl = node.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node child = nl.item(i); String nodeName = child.getNodeName(); if (nodeName.equals("CaseComponent")) { Attribute at = new Attribute( child.getAttributes().getNamedItem("Name").getTextContent(), Class.forName(child.getAttributes().getNamedItem("Class").getTextContent())); AttributeUtils.setValue(at, cc, deserializeCaseComponent(child)); } else { Attribute at = new Attribute(nodeName, cc.getClass()); if (child.getFirstChild() != null) { String value = child.getFirstChild().getTextContent(); Object oValue = PlainTextTypeConverter.convert(value, at.getType()); AttributeUtils.setValue(at, cc, oValue); } } } return cc; } catch (Exception e) { org.apache.commons.logging.LogFactory.getLog(CaseComponentSerializer.class).error(e); } return null; }
private static void defineNewIds(CaseComponent cc, HashMap componentsKeys) throws jcolibri.exception.ExecutionException { if (cc == null) return; Attribute keyAtt = cc.getIdAttribute(); Object newkeyvalue = componentsKeys.get(keyAtt); try { if (newkeyvalue != null) keyAtt.setValue(cc, newkeyvalue); for (Object on : cc.getClass().getDeclaredFields()) { java.lang.reflect.Field f = (java.lang.reflect.Field) on; Attribute at = new Attribute(f); Object o = at.getValue(cc); if (o instanceof CaseComponent) defineNewIds((CaseComponent) o, componentsKeys); } } catch (Exception e) { org.apache.commons.logging.LogFactory.getLog(DefineNewIdsMethod.class).error(e); } }