added retry mechanism for opening of vamsas archives before it's assumed that the...
[vamsas.git] / src / uk / ac / vamsas / client / simpleclient / IdFactory.java
index 3a7f2bb..09a28e4 100644 (file)
@@ -5,13 +5,14 @@ package uk.ac.vamsas.client.simpleclient;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.vamsas.client.ClientHandle;
-import org.vamsas.client.SessionHandle;
-import org.vamsas.client.UserHandle;
-import org.vamsas.client.VorbaId;
-import org.vamsas.client.VorbaIdFactory;
-import org.vamsas.client.Vobject;
-import org.vamsas.objects.utils.document.VersionEntries;
+
+import uk.ac.vamsas.client.ClientHandle;
+import uk.ac.vamsas.client.SessionHandle;
+import uk.ac.vamsas.client.UserHandle;
+import uk.ac.vamsas.client.Vobject;
+import uk.ac.vamsas.client.VorbaId;
+import uk.ac.vamsas.client.VorbaIdFactory;
+import uk.ac.vamsas.objects.utils.document.VersionEntries;
 
 import java.util.Hashtable;
 import java.util.zip.CRC32;
@@ -49,12 +50,23 @@ public class IdFactory extends VorbaIdFactory {
     unique.reset();
     unique.update(new Object[] { session, client, user}.toString().getBytes());
     // TODO: Ensure format of URNs and use standard composition methods.
-    idstring = client.getClientName()+":"+unique.getValue()+".";
+    idstring = client.getClientNCname()+"_"+unique.getValue()+".";
     extantids=new Hashtable();
     this.extanthashv=new Hashtable();
   }
   /**
-   * values for keys in this hash can be used to reference the org.vamsas.client.Vobject instance for the VorbaId string.
+   * Create IdFactory with existing object hashes and id set
+   * @param session
+   * @param client
+   * @param user
+   * @param extanthashv hash of existing VorbaIds from a previous read of same document
+   */
+  protected IdFactory(SessionHandle session, ClientHandle client, UserHandle user, Hashtable extanthashv) {
+    this(session, client, user);
+    this.extanthashv = extanthashv;
+  }
+  /**
+   * values for keys in this hash can be used to reference the uk.ac.vamsas.client.Vobject instance for the VorbaId string.
    * @return the hash of all VorbaIds
    */
   protected Hashtable getVorbaIdHash() {
@@ -69,7 +81,7 @@ public class IdFactory extends VorbaIdFactory {
     return extanthashv;
   }
   /* (non-Javadoc)
-   * @see org.vamsas.client.VorbaIdFactory#makeVorbaId()
+   * @see uk.ac.vamsas.client.VorbaIdFactory#makeVorbaId()
    */
   public VorbaId makeVorbaId(Vobject vobject) {
     if (session==null)
@@ -88,13 +100,13 @@ public class IdFactory extends VorbaIdFactory {
       }
       newidstring=idstring+Integer.toString(sequence);
     } while (extantids.containsKey(newidstring));
-    extantids.put(newidstring, vobject); // hash the Vobject by its new Id
     VorbaId id = newId(newidstring); // VorbaId.hash()==newidstring.hash() so we can still recover vobject
+    extantids.put(id, vobject); // hash the Vobject by its new Id
     return id;
   }
 
   /* (non-Javadoc)
-   * @see org.vamsas.client.VorbaIdFactory#setSession(org.vamsas.client.SessionHandle)
+   * @see uk.ac.vamsas.client.VorbaIdFactory#setSession(uk.ac.vamsas.client.SessionHandle)
    */
   protected void setSession(SessionHandle sessionhandle) {
     if (sessionhandle!=null)
@@ -104,14 +116,14 @@ public class IdFactory extends VorbaIdFactory {
   }
 
   /* (non-Javadoc)
-   * @see org.vamsas.client.VorbaIdFactory#getSessionHandle()
+   * @see uk.ac.vamsas.client.VorbaIdFactory#getSessionHandle()
    */
   public SessionHandle getSessionHandle() {
     return session;
   }
 
   /* (non-Javadoc)
-   * @see org.vamsas.client.VorbaIdFactory#setClient(org.vamsas.client.ClientHandle)
+   * @see uk.ac.vamsas.client.VorbaIdFactory#setClient(uk.ac.vamsas.client.ClientHandle)
    */
   protected void setClient(ClientHandle appHandle) {
     if (appHandle!=null)
@@ -121,14 +133,14 @@ public class IdFactory extends VorbaIdFactory {
   }
 
   /* (non-Javadoc)
-   * @see org.vamsas.client.VorbaIdFactory#getClientHandle()
+   * @see uk.ac.vamsas.client.VorbaIdFactory#getClientHandle()
    */
   public ClientHandle getClientHandle() {
     return client;
   }
 
   /* (non-Javadoc)
-   * @see org.vamsas.client.VorbaIdFactory#setUser(org.vamsas.client.UserHandle)
+   * @see uk.ac.vamsas.client.VorbaIdFactory#setUser(uk.ac.vamsas.client.UserHandle)
    */
   protected void setUser(UserHandle userHandle) {
   if (userHandle!=null)
@@ -138,7 +150,7 @@ public class IdFactory extends VorbaIdFactory {
   }
 
   /* (non-Javadoc)
-   * @see org.vamsas.client.VorbaIdFactory#getUserHandle()
+   * @see uk.ac.vamsas.client.VorbaIdFactory#getUserHandle()
    */
   public UserHandle getUserHandle() {
     return user;