fixed the User element and the form of the ApplicationData dataType.xsd definition.
[vamsas.git] / src / org / vamsas / client / simpleclient / IdFactory.java
1 /**
2  * 
3  */
4 package org.vamsas.client.simpleclient;
5
6 import org.apache.commons.logging.Log;
7 import org.apache.commons.logging.LogFactory;
8 import org.vamsas.client.ClientHandle;
9 import org.vamsas.client.SessionHandle;
10 import org.vamsas.client.UserHandle;
11 import org.vamsas.client.VorbaId;
12 import org.vamsas.client.VorbaIdFactory;
13 import org.vamsas.objects.utils.document.VersionEntries;
14
15 import java.util.Hashtable;
16 import java.util.zip.CRC32;
17 /**
18  * Simplest VorbaId constructor
19  * @author jimp
20  *
21  */
22 public class IdFactory extends VorbaIdFactory {
23   static Log log = LogFactory.getLog(IdFactory.class);
24   private SessionHandle session=null;
25   private ClientHandle client;
26   private UserHandle user;
27   private CRC32 unique=new CRC32(); // used to attempt a unique but predictable stream for IDs
28   private String idstring;
29   int sequence=1; // incrementing value for next new ID
30   /**
31    * 
32    */
33   public IdFactory() {
34     super();
35     // TODO Auto-generated constructor stub
36   }
37   
38   /**
39    * @param session
40    * @param client
41    * @param user
42    */
43   protected IdFactory(SessionHandle session, ClientHandle client, UserHandle user) {
44     super();
45     this.session = session;
46     this.client = client;
47     this.user = user;
48     unique.reset();
49     unique.update(new Object[] { session, client, user}.toString().getBytes());
50     // TODO: Ensure format of URNs and use standard composition methods.
51     idstring = client.getClientUrn()+":"+unique.getValue()+"/";
52     extantids=new Hashtable();
53   }
54
55   /* (non-Javadoc)
56    * @see org.vamsas.client.VorbaIdFactory#makeVorbaId()
57    */
58   public VorbaId makeVorbaId() {
59     if (session==null)
60       throw new Error("makeVorbaId called on improperly initialised IdFactory object!");
61     String newidstring;
62     do {
63       if (sequence>0) {
64         sequence++;
65       } else {
66         idstring+="1/";
67         sequence=1;
68       }
69       newidstring=idstring+Integer.toString(sequence);
70     } while (extantids.containsKey(newidstring));
71     VorbaId id = newId(newidstring);
72     return id;
73   }
74
75   /* (non-Javadoc)
76    * @see org.vamsas.client.VorbaIdFactory#setSession(org.vamsas.client.SessionHandle)
77    */
78   protected void setSession(SessionHandle sessionhandle) {
79     if (sessionhandle!=null)
80       session=sessionhandle;
81     else
82       log.warn("setSession(null) called.");
83   }
84
85   /* (non-Javadoc)
86    * @see org.vamsas.client.VorbaIdFactory#getSessionHandle()
87    */
88   public SessionHandle getSessionHandle() {
89     return session;
90   }
91
92   /* (non-Javadoc)
93    * @see org.vamsas.client.VorbaIdFactory#setClient(org.vamsas.client.ClientHandle)
94    */
95   protected void setClient(ClientHandle appHandle) {
96     if (appHandle!=null)
97       client = appHandle;
98     else
99       log.warn("setClient(null) called.");
100   }
101
102   /* (non-Javadoc)
103    * @see org.vamsas.client.VorbaIdFactory#getClientHandle()
104    */
105   public ClientHandle getClientHandle() {
106     return client;
107   }
108
109   /* (non-Javadoc)
110    * @see org.vamsas.client.VorbaIdFactory#setUser(org.vamsas.client.UserHandle)
111    */
112   protected void setUser(UserHandle userHandle) {
113   if (userHandle!=null)
114     user = userHandle;
115   else
116     log.warn("setUser(null) called.");
117   }
118
119   /* (non-Javadoc)
120    * @see org.vamsas.client.VorbaIdFactory#getUserHandle()
121    */
122   public UserHandle getUserHandle() {
123     return user;
124   }
125   /**
126    * Convenience method used for default behaviour in testing 
127    * and any anonymous internal vamsasDocument unmarshalling
128    * @param clientname
129    * @return
130    */
131   protected  static IdFactory getDummyFactory(String clientname) {
132     if (clientname==null)
133       clientname="org.vamsas.client.simpleclient.IdFactory";
134     return new IdFactory(new SessionHandle("dummy.session"), 
135         new ClientHandle(clientname,VersionEntries.latestVersion()), 
136         new UserHandle("arnoldUser", "none"));
137   }
138 }