import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.vamsas.client.simpleclient.VamsasArchive;
-import org.vamsas.client.simpleclient.VamsasArchiveReader;
-import org.vamsas.objects.core.ApplicationData;
-import org.vamsas.objects.core.Entry;
-import org.vamsas.objects.core.Provenance;
-import org.vamsas.objects.core.VAMSAS;
-import org.vamsas.objects.core.VamsasDocument;
+der;
+import uk.ac.vamsas.objects.core.Alignment;
+import uk.ac.vamsas.objects.core.ApplicationData;
+import uk.ac.vamsas.objects.core.Entry;
+import uk.ac.vamsas.objects.core.Instance;
+import uk.ac.vamsas.objects.core.Provenance;
+import uk.ac.vamsas.objects.core.VAMSAS;
+import uk.ac.vamsas.objects.core.VamsasDocument;
+import uk.ac.vamsas.objects.ut
+import uk.ac.vamsas.client.simpleclient.VamsasArchive;
+import uk.ac.vamsas.client.simpleclient.VamsasArchiveReader;
+ils.ProvenanceStuff;
public class ArchiveWriter {
* form is ArchiveWriter new/modified argive command list
*/
- static Log log = LogFactory.getLog("org.vamsas.test.simpleclient.ArchiveWriter");
-
- /**
- * @param action
- * text for action entry
- * @return new Provenance entry for ArchiveWriter created docs.
- * TODO: Verify and move to SimpleClient class for provenance handling
- */
- public static Entry newProvenanceEntry(String user, String action) {
- log.debug("Adding ProvenanceEntry("+user+","+action+")");
- Entry e = new Entry();
- e.setAction(action);
- e.setUser(user);
- e.setDate(new org.exolab.castor.types.Date(new Date()));
- return e;
- }
-
- public static Provenance newProvenance() {
- Provenance list = new Provenance();
- list.addEntry(newProvenanceEntry("ArchiveWriter", "Created new Vamsas Document"));
- return list;
- }
-
+ static Log log = LogFactory.getLog(ArchiveWriter.class);
+
private static void mergeVecs(Object[] destvec, Object[] svec1, Object[] svec2) {
int i;
for (i=0; i<svec1.length; i++)
}
// Merge appDataReferences require transfer of jar entries, perhaps with a renaming of the entry.
// Merge appDatas require eventually unique URNS
+ // TODO: merging global appdata from different documents where same app has written them causes conflict
- public static Hashtable hashOfAppDatas(Hashtable ht, ApplicationData[] appdatas) {
+ public static Hashtable hashOfAppDatas(Hashtable ht, Instance[] appdatas) {
if (ht==null)
ht = new Hashtable();
for (int i=0, j=appdatas.length; i<j; i++) {
if (!ht.containsKey(appdatas[i].getUrn())) {
Hashtable aphash = new Hashtable();
ht.put(appdatas[i].getUrn(), aphash);
- aphash.put(appdatas[i], appdatas[i].getAppDataChoice().getDataReference());
+ aphash.put(appdatas[i], appdatas[i].getDataReference());
} else {
// ensure urns and references are unique
/**
* safely copies an appData from one archive to another.
* @param darc destination archive
- * @param dest destination document object
+ * @param dest destination document Vobject
* @param sarc source archive reader
* @param entry application data to be copied from source archive
*/
public static void addAppDataEntry(VamsasArchive darc, VamsasDocument dest, VamsasArchiveReader sarc, ApplicationData entry) {
-
- // check uniqueness of entry.urn amongst dest.ApplicationData[].urn
+ // TODO: fix instances
+ // check uniqueness of instance's[] entry.urn amongst dest.ApplicationData[].getInstances[].urn
// check uniqueness of entry.user[].urn amongst dest.ApplicationData[].user[].urn
// check uniqueness of entry.user
// entry.getAppDataChoice().getData() or getDataReference is unique
for (int i=0, j=dest.getApplicationDataCount(); i<j; i++) {
ApplicationData o = dest.getApplicationData()[i];
// ensure new urn is really unique
- String urn = entry.getUrn();
+ //String urn = entry.getUrn();
int v = 1;
- while (o.getUrn().equals(urn)) {
- urn = entry.getUrn()+v++;
- }
+ //while (o.getUrn().equals(urn)) {
+ // urn = entry.getUrn()+v++;
+ // }
// uniqueness of urn
// check each user ApplicationData
// uniqueness (again)
/** TODO: LATER: should verify that all ids really are unique in newly merged document. If not then what ?
* investigate possibility of having an id translation between appDatas and the core document -
* the mapping is stored when an external application performs a merge, but when the owning
- * Application accesses the object, the vorba_id is updated to the new one when it writes its
+ * Application accesses the Vobject, the vorba_id is updated to the new one when it writes its
* references in to its appdata again
*/
if (source.getApplicationDataCount()>0) {
VamsasArchive varc = new VamsasArchive(newarch, true);
VamsasDocument docroot;
docroot = new VamsasDocument();
- docroot.setProvenance(newProvenance());
+ docroot.setProvenance(ProvenanceStuff.newProvenance("ArchiveWriter", "user", "Created new Vamsas Document"));
while (++argpos<argv.length) {
File archive = new File(argv[argpos]);
InputStream istream;
if ((istream = vdoc.getVamsasXmlStream())!=null) {
// make a new vamsas document from the vamsas.xml entry
VAMSAS root = VAMSAS.unmarshal(new InputStreamReader(istream)); // TODO: verify only one VAMSAS element per vamsas.xml entry.
- docroot.getProvenance().addEntry(newProvenanceEntry("user", "added vamsas.xml from "+argv[argpos-1]));
+ docroot.getProvenance().addEntry(ProvenanceStuff.newProvenanceEntry("ArchiveWriter", "user", "added vamsas.xml from "+argv[argpos-1]));
docroot.addVAMSAS(root);
}
}