package org.commcare.android.database.user.models; import org.commcare.cases.model.CaseIndex; import org.javarosa.core.util.externalizable.DeserializationException; import org.javarosa.core.util.externalizable.ExtUtil; import org.javarosa.core.util.externalizable.ExtWrapList; import org.javarosa.core.util.externalizable.ExtWrapMapPoly; import org.javarosa.core.util.externalizable.ExtWrapNullable; import org.javarosa.core.util.externalizable.PrototypeFactory; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Date; import java.util.Hashtable; import java.util.Vector; /** * A model extension which reads Resource models from the * Version 6 db, and writes them back into the Version 7 * db. * * NOTE: This updater is _NOT ROBUST AGAINST METADATA * CHANGES_. If the Resource model metadata changes, this * needs to be modified to reflect the V6/7 metadata. * * @author ctsims */ public class ACasePreV6Model extends ACase { /** * Blank constructor for deserialization only! */ public ACasePreV6Model() { } @Override public void readExternal(DataInputStream in, PrototypeFactory pf) throws IOException, DeserializationException { typeId = ExtUtil.readString(in); id = ExtUtil.nullIfEmpty(ExtUtil.readString(in)); name = ExtUtil.nullIfEmpty(ExtUtil.readString(in)); closed = ExtUtil.readBool(in); dateOpened = (Date)ExtUtil.read(in, new ExtWrapNullable(Date.class), pf); recordId = ExtUtil.readInt(in); indices = (Vector<CaseIndex>)ExtUtil.read(in, new ExtWrapList(CaseIndexUpdater.class), pf); data = (Hashtable)ExtUtil.read(in, new ExtWrapMapPoly(String.class, true), pf); } @Override public void writeExternal(DataOutputStream out) throws IOException { ExtUtil.writeString(out, typeId); ExtUtil.writeString(out, ExtUtil.emptyIfNull(id)); ExtUtil.writeString(out, ExtUtil.emptyIfNull(name)); ExtUtil.writeBool(out, closed); ExtUtil.write(out, new ExtWrapNullable(dateOpened)); ExtUtil.writeNumeric(out, recordId); ExtUtil.write(out, new ExtWrapList(indices)); ExtUtil.write(out, new ExtWrapMapPoly(data)); } public static class CaseIndexUpdater extends CaseIndex { /* * serialization only! */ public CaseIndexUpdater() { } @Override public void readExternal(DataInputStream in, PrototypeFactory pf) throws IOException, DeserializationException { mName = ExtUtil.readString(in); mTargetId = ExtUtil.readString(in); mTargetCaseType = ExtUtil.readString(in); mRelationship = CaseIndex.RELATIONSHIP_CHILD; } @Override public void writeExternal(DataOutputStream out) throws IOException { ExtUtil.writeString(out, mName); ExtUtil.writeString(out, mTargetId); ExtUtil.writeString(out, mTargetCaseType); ExtUtil.writeString(out, mRelationship); } } }