refactoring org to uk - never use f**ng eclipse
authorjprocter <jprocter@compbio.dundee.ac.uk>
Thu, 14 Dec 2006 18:49:07 +0000 (18:49 +0000)
committerjprocter <jprocter@compbio.dundee.ac.uk>
Thu, 14 Dec 2006 18:49:07 +0000 (18:49 +0000)
git-svn-id: https://svn.lifesci.dundee.ac.uk/svn/repository/trunk@292 be28352e-c001-0410-b1a7-c7978e42abec

src/uk/ac/vamsas/test/ExampleApplication.java [new file with mode: 0644]

diff --git a/src/uk/ac/vamsas/test/ExampleApplication.java b/src/uk/ac/vamsas/test/ExampleApplication.java
new file mode 100644 (file)
index 0000000..186e51e
--- /dev/null
@@ -0,0 +1,160 @@
+/**
+ * Created on 14-Sep-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package uk.ac.vamsas.test;
+
+import uk.ac.vamsas.client.*;
+
+import java.awt.Event;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.io.IOException;
+import java.util.Vector;
+/**
+ * Toy vamsas command line client application demonstrating the API.
+ * 
+ * @author jimp
+ */
+
+public class ExampleApplication {
+  private static ClientHandle app;
+  private static UserHandle user; // TODO: make this something defined by the api
+  private static IClientFactory clientfactory;
+  private static IClient vorbaclient;
+  private static byte[] mydata;
+  private static Vector vamsasObjects;
+  private static boolean isUpdated = false;
+  private static boolean isShuttingdown = false;
+  private static boolean isFinalizing = false;
+  private static void processVamsasDocument(IClientDocument doc) {
+    // merge vamsasObjects with vamsas objects in document
+    // get this apps 'mydata' if it hasn't got it already.
+    // .. access this application's 'public' mydata' if there is any.
+  }
+  private static void addHandlers(IClient avorbaclient) {
+    // make a non-volatile reference to the client instance.
+    final IClient vorbaclient = avorbaclient;
+    // register update handler
+    vorbaclient.addDocumentUpdateHandler(new PropertyChangeListener() {
+      public void propertyChange(PropertyChangeEvent evt) {
+        System.out.println("Vamsas document update for "+evt.getPropertyName()
+            +": "+evt.getOldValue()+" to "+evt.getNewValue());
+        // merge new data into ours.
+        isUpdated=true; // tell main thread to reflect change...
+      }
+    });
+    // register close handler
+    vorbaclient.addVorbaEventHandler(Events.DOCUMENT_REQUESTTOCLOSE, 
+        new PropertyChangeListener() {
+       public void propertyChange(PropertyChangeEvent evt) {
+         System.out.println("Received request to close vamsas document.");
+         // ask user for a filename to save it to. 
+         // Then pass it to the vorba object...
+         vorbaclient.storeDocument(new java.io.File("UserLocation"));
+       }
+    });
+    
+    // register some more handlers to monitor the session :
+    
+    vorbaclient.addVorbaEventHandler(Events.CLIENT_CREATION, 
+        new PropertyChangeListener() {
+      public void propertyChange(PropertyChangeEvent evt) {
+        System.out.println("New Vamsas client for "+evt.getPropertyName()
+            +": "+evt.getOldValue()+" to "+evt.getNewValue());
+        // tell app add new client to its list of clients.
+      }
+    });
+    vorbaclient.addVorbaEventHandler(Events.CLIENT_FINALIZATION, 
+        new PropertyChangeListener() {
+      public void propertyChange(PropertyChangeEvent evt) {
+        System.out.println("Vamsas client finalizing for "+evt.getPropertyName()
+            +": "+evt.getOldValue()+" to "+evt.getNewValue());
+        // tell app to update its list of clients to communicate with.
+      }
+    });
+    vorbaclient.addVorbaEventHandler(Events.SESSION_SHUTDOWN, 
+        new PropertyChangeListener() {
+      public void propertyChange(PropertyChangeEvent evt) {
+        System.out.println("Session "+evt.getPropertyName()+" is shutting down.");
+        // tell app to finalize its session data before shutdown.
+      }
+    });
+    vorbaclient.addVorbaEventHandler(Events.DOCUMENT_FINALIZEAPPDATA, 
+        new PropertyChangeListener() {
+      public void propertyChange(PropertyChangeEvent evt) {
+        System.out.println("Application received a DOCUMENT_FINALIZEAPPDATA event.");
+        // tell app to finalize its session data prior to the storage of the current session as an archive.
+      }
+    });
+    
+  }
+  public static String 
+       Usage="ExampleApplication <vamsasFileDirectory> <vamsasSessionURN> <action> [+<arguments>]\n"
+         +"<action> is one of :\n\tsave,update,close,watch";
+  
+  private static boolean parseArgs(String args[]) {
+    return true; // incorrect arguments.
+  }
+  public static void main(String[] args) {
+    if ((args.length<=2) || !parseArgs(args)) {
+      System.err.print(Usage);
+    }
+
+    // get IClientFactory
+    try {
+      clientfactory = new uk.ac.vamsas.client.simpleclient.SimpleClientFactory(args[0]);
+    } catch (IOException e) {
+      System.err.println(e+"\n"+Usage);
+      System.exit(1);
+    }
+    
+    // get an Iclient with session data
+    app = new ClientHandle("uk.ac.vamsas.test.ExampleApplication","0.1");
+    user = new UserHandle("arnolduser","deathsdoor");
+    try {
+      vorbaclient = clientfactory.getIClient(app, user);
+    } catch (NoDefaultSessionException e) {
+      System.err.println("There appear to be several sessions to choose from :");
+      String[] sessions = clientfactory.getCurrentSessions();
+      for (int s=0;s<sessions.length; s++)
+        System.err.println(sessions[s]);
+      System.exit(2);
+    }
+    addHandlers(vorbaclient);
+    try {
+      vorbaclient.joinSession();
+    }
+    catch (Exception se) {
+      se.printStackTrace();
+      System.err.println(se+" when joining session.\n"+Usage);
+      System.exit(1);
+    }
+    // register an update listener and a close listener.
+    // get document data
+    try {
+      IClientDocument cdoc = vorbaclient.getClientDocument();
+      processVamsasDocument(cdoc);
+    } catch (Exception e) {
+      System.err.println("Unexpected exception when retrieving the client document for the first time!");
+      e.printStackTrace(System.err);
+      System.exit(1);
+    }
+
+    // Main application event loop - wait around and do stuff...
+    while (!isShuttingdown) {
+      // do something with data
+      // , update document, or something.
+      // ..
+      
+    }
+    // call finalizeClient
+    vorbaclient.finalizeClient();
+    // { meanwhile, eventHandlers are called to do any saves if need be }
+    // and all registered listeners will be deregistered to avoid deadlock.
+    
+    // finish
+  }
+}