/* ==== SERIALIZATION ==== */ /* * TODO: * * this new serialization scheme is kind of lame. ideally, we shouldn't have * to sub-class TreeElement at all; we should have an API that can * seamlessly represent complex data model objects (like weight history or * immunizations) as if they were explicity XML subtrees underneath the * parent TreeElement * * failing that, we should wrap this scheme in an ExternalizableWrapper */ /* * (non-Javadoc) * * @see * org.javarosa.core.services.storage.utilities.Externalizable#readExternal * (java.io.DataInputStream) */ public void readExternal(BinaryReader in_renamed, PrototypeFactory pf) { name = ExtUtil.nullIfEmpty(ExtUtil.readString(in_renamed)); multiplicity = ExtUtil.readInt(in_renamed); repeatable = ExtUtil.readBool(in_renamed); value = (IAnswerData)ExtUtil.read(in_renamed, new ExtWrapNullable(new ExtWrapTagged()), pf); // children = ExtUtil.nullIfEmpty((Vector)ExtUtil.read(in, new // ExtWrapList(TreeElement.class), pf)); // Jan 22, 2009 - [email protected] // old line: children = ExtUtil.nullIfEmpty((Vector)ExtUtil.read(in, new // ExtWrapList(TreeElement.class), pf)); // New Child deserialization // 1. read null status as boolean // 2. read number of children // 3. for i < number of children // 3.1 if read boolean true , then create TreeElement and deserialize // directly. // 3.2 if read boolean false then create tagged element and deserialize // child if (!ExtUtil.readBool(in_renamed)) { // 1. children = null; } else { children = new ArrayList(); // 2. int numChildren = (int)ExtUtil.readNumeric(in_renamed); // 3. for (int i = 0; i < numChildren; ++i) { Boolean normal = ExtUtil.readBool(in_renamed); TreeElement child; if (normal) { // 3.1 child = new TreeElement(); child.readExternal(in_renamed, pf); } else { // 3.2 child = (TreeElement)ExtUtil.read(in_renamed, new ExtWrapTagged(), pf); } child.setParent(this); children.Add(child); } } // end Jan 22, 2009 dataType = ExtUtil.readInt(in_renamed); relevant = ExtUtil.readBool(in_renamed); required = ExtUtil.readBool(in_renamed); enabled = ExtUtil.readBool(in_renamed); relevantInherited = ExtUtil.readBool(in_renamed); enabledInherited = ExtUtil.readBool(in_renamed); constraint = (Constraint)ExtUtil.read(in_renamed, new ExtWrapNullable( typeof(Constraint)), pf); preloadHandler = ExtUtil.nullIfEmpty(ExtUtil.readString(in_renamed)); preloadParams = ExtUtil.nullIfEmpty(ExtUtil.readString(in_renamed)); ArrayList attStrings = ExtUtil.nullIfEmpty((ArrayList)ExtUtil.read(in_renamed, new ExtWrapList(typeof(String)), pf)); setAttributesFromSingleStringVector(attStrings); }