From: jprocter Date: Mon, 16 Jan 2006 10:14:00 +0000 (+0000) Subject: refactored - Vorba object binding machinery and interfaces live in org.vamsas.client... X-Git-Tag: Release_0.2~385 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=752df214324e7e5feabf2432c52ee33d43bedb49;p=vamsas.git refactored - Vorba object binding machinery and interfaces live in org.vamsas.client, specific clients now live in their own package. git-svn-id: https://svn.lifesci.dundee.ac.uk/svn/repository/trunk@135 be28352e-c001-0410-b1a7-c7978e42abec --- diff --git a/src/org/vamsas/client/SimpleClient.java b/src/org/vamsas/client/SimpleClient.java deleted file mode 100644 index e70ffec..0000000 --- a/src/org/vamsas/client/SimpleClient.java +++ /dev/null @@ -1,363 +0,0 @@ -/* - * Created on 15-Sep-2005 - * - * TODO To change the template for this generated file go to - * Window - Preferences - Java - Code Style - Code Templates - */ -package org.vamsas.client; - -import java.beans.EventHandler; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.Reader; -import java.io.Writer; -import java.lang.reflect.Field; -import java.util.Hashtable; -import java.util.Vector; - -import org.exolab.castor.xml.IDResolver; -import org.exolab.castor.xml.MarshalException; -import org.exolab.castor.xml.Marshaller; -import org.exolab.castor.xml.UnmarshalListener; -import org.exolab.castor.xml.Unmarshaller; -import org.exolab.castor.xml.ValidationException; -import org.vamsas.objects.core.VamsasDocument; - -/** - * @author jimp - */ -public class SimpleClient implements IClient { - - UserHandle user = null; - - SessionHandle session = null; - - ClientHandle client = null; - - /* - * (non-Javadoc) - * TODO: check that build substitution variables are correct - * @see org.vamsas.client.IClient#getAbout() - */ - public String getAbout() { - return new String("VORBA SimpleClient version $version$ build $build$"); - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#getSessionUrn() - */ - public String getSessionUrn() { - return session.getSessionUrn(); - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#getSessionHandle() - */ - public SessionHandle getSessionHandle() { - return session; - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#getClientHandle() - */ - public ClientHandle getClientHandle() { - return client; - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#getUserHandle() - */ - public UserHandle getUserHandle() { - return user; - } - - private Hashtable handlers = initHandlers(); - - private Vector listeners = new Vector(); - - /** - * make all the PropertyChangeSupport objects for the - * events described in org.vamsas.client.Event - * @return - */ - private static Hashtable initHandlers() { - Hashtable events = new Hashtable(); - java.util.Iterator evt = Events.EventList.iterator(); - while (evt.hasNext()) { - Object ths = evt.next(); - events.put(ths, (Object) new PropertyChangeSupport(ths)); - } - return events; - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#addDocumentUpdateHandler(java.util.EventListener) - */ - public void addDocumentUpdateHandler(PropertyChangeListener evt) { - if (handlers.containsKey(Events.DOCUMENT_UPDATE)) { - Object handler; - ((PropertyChangeSupport) (handler = handlers.get(Events.DOCUMENT_UPDATE))) - .addPropertyChangeListener(evt); - listeners.add(handler); - listeners.add((Object) evt); - } - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#finalizeClient() - */ - public void finalizeClient() { - // TODO: determine if this is last client in session - // TODO: raise events like : ((lst_client && document.request.to.close), (client_finalization), ( - - // if (handlers.containsKey(Events.)) - // if (handlers.containsKey(Events.CLIENT_FINALIZATION)) - // deregister listeners. - // mark this instance as finalized - } - - /** - * writes the VamsasDocument to the given stream. - * TODO: ensure that (at least) default provenance entries are written for objects. - * @param outstream - * @param doc - * @throws IOException - * @throws MarshalException - * @throws ValidationException - */ - private static void setVamsasDocument(Writer outstream, VamsasDocument doc) - throws IOException, MarshalException, ValidationException { - Marshaller marshaller = new Marshaller(outstream); - marshaller.marshal(doc); - } - - /** - * Unmarshals a vamsasDocument object from a stream, registers - * unregistered objects, records existing VorbaIds, and completes - * the org.vamsas.client.object housekeeping fields. - * For a valid unmarshalling, the array of returned objects also includes - * a sync parameter which is true if new VorbaIds - * were created. If sync is false, then the caller should ensure that the - * vamsasDocument is written back to disk to propagate the new VorbaIds. - * TODO: ensure that provenance is correct for newly registered objects - * @param instream - the XML input stream - * @param factory - the SimpleClient's properly configured VorbaId factory to make new references. - * @return null or {(Object) VamsasDocument object, (Object) Hashtable of object references, (Object) Boolean(sync) } - */ -private static Object[] getVamsasDocument(Reader instream, - IVorbaIdFactory factory) { - Unmarshaller unmarshaller = new Unmarshaller(instream); - unmarshaller.setIDResolver(new IDResolver() { - public Object resolve(String id) { - System.err.println("Warning - id " + id - + " is not found in the VamsasDocument!"); - return null; - } - }); - Hashtable refbase = new Hashtable(); - Vector unrefed = new Vector(); - final Hashtable objrefs = refbase; - final IVorbaIdFactory vorbafactory = factory; - final Vector unrefedObj = unrefed; - unmarshaller.setUnmarshalListener(new UnmarshalListener() { - - /* - * (non-Javadoc) - * - * @see org.exolab.castor.xml.UnmarshalListener#attributesProcessed(java.lang.Object) - */ - public void attributesProcessed(Object object) { - } - - /* - * (non-Javadoc) - * - * @see org.exolab.castor.xml.UnmarshalListener#fieldAdded(java.lang.String, - * java.lang.Object, java.lang.Object) - */ - public void fieldAdded(String fieldName, Object parent, Object child) { - } - - /* - * (non-Javadoc) - * - * @see org.exolab.castor.xml.UnmarshalListener#initialized(java.lang.Object) - */ - public void initialized(Object object) { - } - - /* - * Check if the object has an 'id' field - if it does, copy the value into - * the VorbaId field of object, and add the object to the VorbaId hash. - * - * @see org.exolab.castor.xml.UnmarshalListener#unmarshalled(java.lang.Object) - */ - public void unmarshalled(Object newobj) { - if (newobj instanceof object) { - object nobj = (object) newobj; - nobj.set__stored_in_document(true); - Field fd = null; - try { - if (nobj.isRegisterable()) { - // look for the id field (should be an NCName string) - nobj.__vorba = vorbafactory; - fd = nobj.getClass().getField("id"); - String idstring; - if (fd.get(nobj) != null) { - idstring = (String) fd.get(nobj); - if (idstring.length() > 0) { - if (!objrefs.containsKey(idstring)) { - objrefs.put(idstring, nobj); - nobj.setVorbaId(VorbaId.newId(idstring)); - } else { - System.err.println("Serious problem : duplicate id '"+idstring+"' found! expect badness."); - // TODO: HANDLE duplicate XML ids correctly - } - } else { - // add to list of objects without a valid vorbaId - unrefedObj.add(nobj); - } - } else { - // add to list of objects without a valid vorbaId - unrefedObj.add(nobj); - } - - nobj.doHash(); - } - } catch (Exception e) { - return; - }; - - } - } - - }); - // Call the unmarshaller. - try { - while (instream.ready()) { - Object obj = unmarshaller.unmarshal(instream); - boolean sync=true; - if (obj instanceof VamsasDocument) { - if (unrefed.size()>0) { - sync=false; // document is out of sync - ids have been created. - java.util.Iterator newobj = unrefed.listIterator(); - while (newobj.hasNext()) { - object o = (object) newobj.next(); - // forces registration and id field update. - VorbaId id = o.getVorbaId(); - if (!objrefs.containsKey(id)) { - objrefs.put(id.id, o); - } else { - throw new Error("Serious! Duplicate reference made by vorbaIdFactory!"); - } - } - } - return new Object[] { obj, objrefs, new Boolean(sync)}; - } - } - } catch (MarshalException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ValidationException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - return null; - } - /** - * extract data appropriate for client, session and user - * from vamsas document. - * @return application's byte array - */ - private byte[] getApplicationData() { - // TODO: extract correct byte object from Jar and return it to application. - return null; - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#getClientDocument() - */ - public IClientDocument getClientDocument() { - Object[] vdoc;// TODO: = getVamsasDocument(new Reader()); - // ClientDocument cdoc = new ClientDocument(getApplicationData(), - // ((VamsasDocument) vdoc[0]).getVAMSAS(), (Hashtable) vdoc[1], this); - // - return null; - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#updateDocument(org.vamsas.client.IClientDocument) - */ - public void updateDocument(IClientDocument newdoc) { - // TODO Auto-generated method stub - // - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#storeDocument(java.io.File) - */ - public void storeDocument(File location) { - // TODO Auto-generated method stub - - } - - /* - * (non-Javadoc) - * - * @see org.vamsas.client.IClient#addVorbaEventHandler(java.lang.String, - * java.beans.PropertyChangeListener) - */ - public void addVorbaEventHandler(String EventChain, PropertyChangeListener evt) { - if (handlers.containsKey(EventChain)) { - Object handler; - ((PropertyChangeSupport) (handler = handlers.get(EventChain))) - .addPropertyChangeListener(evt); - listeners.add(handler); - listeners.add((Object) evt); - } - } - - /* (non-Javadoc) - * @see org.vamsas.client.IClient#pollUpdate() - */ - public void pollUpdate() { - // TODO wake up UpdateWatcher thread to check for updates. - - } - - public static void main(String[] args) { - } - - /* (non-Javadoc) - * @see org.vamsas.client.IClient#joinSession() - */ - public void joinSession() throws Exception { - // TODO Auto-generated method stub - - } -} diff --git a/src/org/vamsas/client/VorbaXmlBinder.java b/src/org/vamsas/client/VorbaXmlBinder.java new file mode 100644 index 0000000..9fc6965 --- /dev/null +++ b/src/org/vamsas/client/VorbaXmlBinder.java @@ -0,0 +1,190 @@ +/** + * + */ +package org.vamsas.client; + +import java.io.IOException; +import java.io.Reader; +import java.io.Writer; +import java.lang.reflect.Field; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Vector; + +import org.exolab.castor.xml.IDResolver; +import org.exolab.castor.xml.MarshalException; +import org.exolab.castor.xml.Marshaller; +import org.exolab.castor.xml.UnmarshalListener; +import org.exolab.castor.xml.Unmarshaller; +import org.exolab.castor.xml.ValidationException; +import org.vamsas.objects.core.VamsasDocument; +/** + * Implements the Vamsas object ID machinery for translating + * between non-volatile XML IDs and object references. Use the + * marshalling and unmarshalling methods in this class in order + * to avoid validation exceptions when marshalling new objects + * into the vamsas document. + */ +public class VorbaXmlBinder implements UnmarshalListener { + private final IVorbaIdFactory vorbafactory; + + private final Vector obj; + + private final Hashtable objrefs; + + public VorbaXmlBinder(IVorbaIdFactory vorbafactory, Vector obj, Hashtable objrefs) { + this.vorbafactory = vorbafactory; + this.obj = obj; + this.objrefs = objrefs; + } + + /* + * (non-Javadoc) + * + * @see org.exolab.castor.xml.UnmarshalListener#attributesProcessed(java.lang.Object) + */ + public void attributesProcessed(Object object) { + } + + /* + * (non-Javadoc) + * + * @see org.exolab.castor.xml.UnmarshalListener#fieldAdded(java.lang.String, + * java.lang.Object, java.lang.Object) + */ + public void fieldAdded(String fieldName, Object parent, Object child) { + } + + /* + * (non-Javadoc) + * + * @see org.exolab.castor.xml.UnmarshalListener#initialized(java.lang.Object) + */ + public void initialized(Object object) { + } + + /* + * Check if the object has an 'id' field - if it does, copy the value into + * the VorbaId field of object, and add the object to the VorbaId hash. + * + * @see org.exolab.castor.xml.UnmarshalListener#unmarshalled(java.lang.Object) + */ + public void unmarshalled(Object newobj) { + if (newobj instanceof object) { + object nobj = (object) newobj; + nobj.set__stored_in_document(true); + Field fd = null; + try { + if (nobj.isRegisterable()) { + // look for the id field (should be an NCName string) + nobj.__vorba = vorbafactory; + fd = nobj.getClass().getField("id"); + String idstring; + if (fd.get(nobj) != null) { + idstring = (String) fd.get(nobj); + if (idstring.length() > 0) { + if (!objrefs.containsKey(idstring)) { + objrefs.put(idstring, nobj); + nobj.setVorbaId(VorbaId.newId(idstring)); + } else { + System.err.println("Serious problem : duplicate id '"+idstring+"' found! expect badness."); + // TODO: HANDLE duplicate XML ids correctly + } + } else { + // add to list of objects without a valid vorbaId + obj.add(nobj); + } + } else { + // add to list of objects without a valid vorbaId + obj.add(nobj); + } + + nobj.doHash(); + } + } catch (Exception e) { + return; + }; + + } + } + + /** + * writes the VamsasDocument to the given stream. + * TODO: ensure that (at least) default provenance entries are written for objects. + * @param outstream + * @param doc + * @throws IOException + * @throws MarshalException + * @throws ValidationException + */ + private static void setVamsasDocument(Writer outstream, VamsasDocument doc) + throws IOException, MarshalException, ValidationException { + Marshaller marshaller = new Marshaller(outstream); + marshaller.marshal(doc); + } + + /** + * Unmarshals a vamsasDocument object from a stream, registers + * unregistered objects, records existing VorbaIds, and completes + * the org.vamsas.client.object housekeeping fields. + * For a valid unmarshalling, the array of returned objects also includes + * a sync parameter which is true if new VorbaIds + * were created. If sync is false, then the caller should ensure that the + * vamsasDocument is written back to disk to propagate the new VorbaIds. + * TODO: ensure that provenance is correct for newly registered objects + * @param instream - the XML input stream + * @param factory - the SimpleClient's properly configured VorbaId factory to make new references. + * @return null or {(Object) VamsasDocument object, (Object) Hashtable of object references, (Object) Boolean(sync) } + */ + public static Object[] getVamsasDocument(Reader instream, + IVorbaIdFactory factory) { + Unmarshaller unmarshaller = new Unmarshaller(instream); + unmarshaller.setIDResolver(new IDResolver() { + public Object resolve(String id) { + System.err.println("Warning - id " + id + + " is not found in the VamsasDocument!"); + return null; + } + }); + Hashtable refbase = new Hashtable(); + Vector unrefed = new Vector(); + final Hashtable objrefs = refbase; + final IVorbaIdFactory vorbafactory = factory; + final Vector unrefedObj = unrefed; + unmarshaller.setUnmarshalListener(new VorbaXmlBinder(vorbafactory, unrefedObj, objrefs)); + // Call the unmarshaller. + try { + while (instream.ready()) { + Object obj = unmarshaller.unmarshal(instream); + boolean sync=true; + if (obj instanceof VamsasDocument) { + if (unrefed.size()>0) { + sync=false; // document is out of sync - ids have been created. + java.util.Iterator newobj = unrefed.listIterator(); + while (newobj.hasNext()) { + object o = (object) newobj.next(); + // forces registration and id field update. + VorbaId id = o.getVorbaId(); + if (!objrefs.containsKey(id)) { + objrefs.put(id.id, o); + } else { + throw new Error("Serious! Duplicate reference made by vorbaIdFactory!"); + } + } + } + return new Object[] { obj, objrefs, new Boolean(sync)}; + } + } + } catch (MarshalException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ValidationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return null; + } +} \ No newline at end of file diff --git a/src/org/vamsas/client/simpleclient/FileWatcher.java b/src/org/vamsas/client/simpleclient/FileWatcher.java index a3225db..e2a3ad0 100644 --- a/src/org/vamsas/client/simpleclient/FileWatcher.java +++ b/src/org/vamsas/client/simpleclient/FileWatcher.java @@ -5,7 +5,6 @@ package org.vamsas.client.simpleclient; import java.io.File; -import org.vamsas.client.SimpleClient; /** * @author jim Watches a particular file for its creation, deletion, or diff --git a/src/org/vamsas/client/simpleclient/SimpleClient.java b/src/org/vamsas/client/simpleclient/SimpleClient.java new file mode 100644 index 0000000..cbf5c0d --- /dev/null +++ b/src/org/vamsas/client/simpleclient/SimpleClient.java @@ -0,0 +1,207 @@ +/* + * Created on 15-Sep-2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.vamsas.client.simpleclient; + +import java.beans.EventHandler; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.BufferedReader; +import java.io.File; +import java.util.Hashtable; +import java.util.Vector; + +import org.vamsas.client.ClientHandle; +import org.vamsas.client.Events; +import org.vamsas.client.IClient; +import org.vamsas.client.IClientDocument; +import org.vamsas.client.SessionHandle; +import org.vamsas.client.UserHandle; + +/** + * @author jimp + */ +public class SimpleClient implements IClient { + + UserHandle user = null; + + SessionHandle session = null; + + ClientHandle client = null; + + /* + * (non-Javadoc) + * TODO: check that build substitution variables are correct + * @see org.vamsas.client.IClient#getAbout() + */ + public String getAbout() { + return new String("VORBA SimpleClient version $version$ build $build$"); + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#getSessionUrn() + */ + public String getSessionUrn() { + return session.getSessionUrn(); + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#getSessionHandle() + */ + public SessionHandle getSessionHandle() { + return session; + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#getClientHandle() + */ + public ClientHandle getClientHandle() { + return client; + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#getUserHandle() + */ + public UserHandle getUserHandle() { + return user; + } + + private Hashtable handlers = initHandlers(); + + private Vector listeners = new Vector(); + + /** + * make all the PropertyChangeSupport objects for the + * events described in org.vamsas.client.Event + * @return + */ + private static Hashtable initHandlers() { + Hashtable events = new Hashtable(); + java.util.Iterator evt = Events.EventList.iterator(); + while (evt.hasNext()) { + Object ths = evt.next(); + events.put(ths, (Object) new PropertyChangeSupport(ths)); + } + return events; + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#addDocumentUpdateHandler(java.util.EventListener) + */ + public void addDocumentUpdateHandler(PropertyChangeListener evt) { + if (handlers.containsKey(Events.DOCUMENT_UPDATE)) { + Object handler; + ((PropertyChangeSupport) (handler = handlers.get(Events.DOCUMENT_UPDATE))) + .addPropertyChangeListener(evt); + listeners.add(handler); + listeners.add((Object) evt); + } + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#finalizeClient() + */ + public void finalizeClient() { + // TODO: determine if this is last client in session + // TODO: raise events like : ((lst_client && document.request.to.close), (client_finalization), ( + + // if (handlers.containsKey(Events.)) + // if (handlers.containsKey(Events.CLIENT_FINALIZATION)) + // deregister listeners. + // mark this instance as finalized + } + + /** + * extract data appropriate for client, session and user + * from vamsas document. + * @return application's byte array + */ + private byte[] getApplicationData() { + // TODO: extract correct byte object from Jar and return it to application. + return null; + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#getClientDocument() + */ + public IClientDocument getClientDocument() { + Object[] vdoc;// TODO: = getVamsasDocument(new Reader()); + // ClientDocument cdoc = new ClientDocument(getApplicationData(), + // ((VamsasDocument) vdoc[0]).getVAMSAS(), (Hashtable) vdoc[1], this); + // + return null; + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#updateDocument(org.vamsas.client.IClientDocument) + */ + public void updateDocument(IClientDocument newdoc) { + // TODO Auto-generated method stub + // + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#storeDocument(java.io.File) + */ + public void storeDocument(File location) { + // TODO Auto-generated method stub + + } + + /* + * (non-Javadoc) + * + * @see org.vamsas.client.IClient#addVorbaEventHandler(java.lang.String, + * java.beans.PropertyChangeListener) + */ + public void addVorbaEventHandler(String EventChain, PropertyChangeListener evt) { + if (handlers.containsKey(EventChain)) { + Object handler; + ((PropertyChangeSupport) (handler = handlers.get(EventChain))) + .addPropertyChangeListener(evt); + listeners.add(handler); + listeners.add((Object) evt); + } + } + + /* (non-Javadoc) + * @see org.vamsas.client.IClient#pollUpdate() + */ + public void pollUpdate() { + // TODO wake up UpdateWatcher thread to check for updates. + + } + + public static void main(String[] args) { + } + + /* (non-Javadoc) + * @see org.vamsas.client.IClient#joinSession() + */ + public void joinSession() throws Exception { + // TODO Auto-generated method stub + + } +} diff --git a/src/org/vamsas/client/SimpleClientFactory.java b/src/org/vamsas/client/simpleclient/SimpleClientFactory.java similarity index 92% rename from src/org/vamsas/client/SimpleClientFactory.java rename to src/org/vamsas/client/simpleclient/SimpleClientFactory.java index 6637d1e..73d7ae9 100644 --- a/src/org/vamsas/client/SimpleClientFactory.java +++ b/src/org/vamsas/client/simpleclient/SimpleClientFactory.java @@ -1,8 +1,13 @@ -package org.vamsas.client; +package org.vamsas.client.simpleclient; import java.io.File; import java.io.IOException; +import org.vamsas.client.ClientHandle; +import org.vamsas.client.IClient; +import org.vamsas.client.IClientFactory; +import org.vamsas.client.UserHandle; + /** * TODO document type SimpleClientFactory * @author jimp diff --git a/src/org/vamsas/test/ExampleApplication.java b/src/org/vamsas/test/ExampleApplication.java index e8bce3c..520f668 100644 --- a/src/org/vamsas/test/ExampleApplication.java +++ b/src/org/vamsas/test/ExampleApplication.java @@ -105,7 +105,7 @@ public class ExampleApplication { // get IClientFactory try { - clientfactory = new org.vamsas.client.SimpleClientFactory(args[0]); + clientfactory = new org.vamsas.client.simpleclient.SimpleClientFactory(args[0]); } catch (IOException e) { System.err.println(e+"\n"+Usage); System.exit(1); diff --git a/src/org/vamsas/test/simpleclient/VamsasArchive.java b/src/org/vamsas/test/simpleclient/VamsasArchive.java index e820c52..cc1e777 100644 --- a/src/org/vamsas/test/simpleclient/VamsasArchive.java +++ b/src/org/vamsas/test/simpleclient/VamsasArchive.java @@ -9,7 +9,6 @@ import java.io.PrintWriter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.vamsas.client.SimpleClient; import org.vamsas.client.simpleclient.*; import org.vamsas.objects.core.AppDataChoice; import org.vamsas.objects.core.ApplicationData;