/** * */ package org.commcare.android.database.app.models; import org.commcare.resources.model.Resource; import org.commcare.resources.model.ResourceInstaller; import org.commcare.resources.model.ResourceLocation; 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.ExtWrapTagged; import org.javarosa.core.util.externalizable.PrototypeFactory; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Vector; /** * A model extension which reads Resource models from the * Version 2 db, and writes them back into the Version 3 * db. * <p/> * <p/> * NOTE: This updater is _NOT ROBUST AGAINST METADATA * CHANGES_. If the Resource model metadata changes, this * needs to be modified to reflect the V2/3 metadata. * * @author ctsims */ public class ResourceModelUpdater extends Resource { /** * Blank constructor for deserialization only! */ public ResourceModelUpdater() { } @Override public void readExternal(DataInputStream in, PrototypeFactory pf) throws IOException, DeserializationException { this.recordId = ExtUtil.readInt(in); this.version = ExtUtil.readInt(in); this.id = ExtUtil.readString(in); this.guid = ExtUtil.readString(in); this.status = ExtUtil.readInt(in); this.parent = ExtUtil.nullIfEmpty(ExtUtil.readString(in)); locations = (Vector<ResourceLocation>)ExtUtil.read(in, new ExtWrapList(ResourceLocation.class), pf); this.initializer = (ResourceInstaller)ExtUtil.read(in, new ExtWrapTagged(), pf); } @Override public void writeExternal(DataOutputStream out) throws IOException { ExtUtil.writeNumeric(out, recordId); ExtUtil.writeNumeric(out, version); ExtUtil.writeString(out, id); ExtUtil.writeString(out, guid); ExtUtil.writeNumeric(out, status); ExtUtil.writeString(out, ExtUtil.emptyIfNull(parent)); ExtUtil.write(out, new ExtWrapList(locations)); ExtUtil.write(out, new ExtWrapTagged(initializer)); ExtUtil.writeString(out, ExtUtil.emptyIfNull((String)null)); } }