/* * 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 * * TODO To change the template for this generated type comment go to Window - * Preferences - Java - Code Style - Code Templates */ public class Client implements IClient { UserHandle user = null; SessionHandle session = null; ClientHandle client = null; /* * (non-Javadoc) * * @see org.vamsas.client.IClient#getAbout() */ public String getAbout() { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.vamsas.client.IClient#getSessionUrn() */ public String getSessionUrn() { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.vamsas.client.IClient#getSessionHandle() */ public SessionHandle getSessionHandle() { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.vamsas.client.IClient#getClientHandle() */ public ClientHandle getClientHandle() { // TODO Auto-generated method stub return null; } /* * (non-Javadoc) * * @see org.vamsas.client.IClient#getUserHandle() */ public UserHandle getUserHandle() { // TODO Auto-generated method stub return null; } 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, listener; ((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 Auto-generated method stub } /** * writes the VamsasDocument to the given stream. * @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 * any VorbaIds, and completes the org.vamsas.client.object housekeeping fields. * * @param instream - the XML input stream * @param factory - the Client's properly configured VorbaId factory to make new references. * @return null or {(Object) VamsasDocument object, (Object) Hashtable of object references) */ 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(); final Hashtable objrefs = refbase; final IVorbaIdFactory vorbafactory = factory; unmarshaller.setUnmarshalListener(new UnmarshalListener() { /* * (non-Javadoc) * * @see org.exolab.castor.xml.UnmarshalListener#attributesProcessed(java.lang.Object) */ public void attributesProcessed(Object object) { // TODO Auto-generated method stub } /* * (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) { // TODO Auto-generated method stub } /* * (non-Javadoc) * * @see org.exolab.castor.xml.UnmarshalListener#initialized(java.lang.Object) */ public void initialized(Object object) { // TODO Auto-generated method stub } /* * 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 { // look for the id field (should be an NCName string) fd = nobj.getClass().getField("id"); String idstring; if (fd.getType().getClass().equals("astring".getClass())) { 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)); nobj.__vorba = vorbafactory; } } } nobj.doHash(); } catch (Exception e) { return; } ; } } }); // Call the unmarshaller. try { while (instream.ready()) { Object obj = unmarshaller.unmarshal(instream); if (obj instanceof VamsasDocument) { return new Object[] { obj, objrefs}; } } } 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; } /* * (non-Javadoc) * * @see org.vamsas.client.IClient#getClientDocument() */ public IClientDocument getClientDocument() { // TODO Auto-generated method stub 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) { // TODO Auto-generated method stub } public static void main(String[] args) { } }