--- /dev/null
+/**
+ * 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
+ }
+}