+++ /dev/null
-/*
-* VAMSAS Project
-*
-
-*
-* Dec 13, 2006
-*
-*/
-
-package org.vamsas.client.simpleclient;
-
-import java.io.File;
-
-import java.io.IOException;
-
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.vamsas.client.ClientHandle;
-import org.vamsas.client.IClient;
-import org.vamsas.client.IClientFactory;
-import org.vamsas.client.InvalidSessionUrnException;
-import org.vamsas.client.NoDefaultSessionException;
-import org.vamsas.client.SessionHandle;
-import org.vamsas.client.UserHandle;
-
-/**
- *
- *
- */
-public class SimpleClientFactory implements IClientFactory {
-
- private static Log log = LogFactory.getLog(SimpleClientFactory.class);
-
- private File sessionArena = null;
-
- private String vamsasSubdirectoryName = ".vamsas";
-
- private SessionsFile sessionFile = null;
- private static final String SESSION_LIST="sessions.obj";
-
- //private String[] currentlyAvailableDessions = null;
-
- /**
- * default constructor - called by CreateClientFactory only.
- *
- *Inits the sessionarena to the directory .vamsas of the user home directory.
- *
- */
- public SimpleClientFactory() throws IOException
- {
- // sessionArena
-
- //retrieves user home directory
- String userHomeDirectory = System.getProperty("user.home");
- if (userHomeDirectory == null || userHomeDirectory.length()<1)
- {
- new IOException("Unable to detect user home directory");
- }
- String sessionArenaPath = userHomeDirectory.concat(File.separator.concat(this.vamsasSubdirectoryName));
-
- this.initSessionArena(sessionArenaPath);
- this.initFactoryObjects();
- }
-
-
- /**
- * Create a client factory that works with sessions at the given
- * path.
- * @param path path to directory called session arena, where will be created session directories and session files.
- */
- public SimpleClientFactory(String path) throws IOException
- {
- this.initSessionArena(path);
- }
- /**
- * Inits sessionArena to a given path.
- * checks if path is valid.
- *
- * @param path path to a directory to use
- * @throws IOException if the path is incorrect
- */
- private void initSessionArena (String path) throws IOException
- {
- // Check path is valid and read/writeable.
- File arenaFile = new File (path);
- if (!arenaFile.exists())
- {
- if (! arenaFile.mkdirs())
- {
- this.sessionArena = null;
- throw(new IOException("Unable to create a directory called "+path));
- }
- }
- if (arenaFile.exists() && arenaFile.isDirectory() && arenaFile.canRead() && arenaFile.canWrite())
- {
- this.sessionArena = arenaFile;
- }
- else
- {
- this.sessionArena = null;
- throw(new IOException("Cannot read and write to a directory called "+path));
- }
- }
-
- /**
- * construct SessionFile objects and watchers for each
- */
- private void initFactoryObjects() throws IOException {
- if (this.sessionFile!=null )
- throw new IOException("initFactoryObjects called for initialised ClientFactory object.");
- this.sessionFile = new SessionsFile(new File(this.sessionArena,SESSION_LIST));
-
- }
- /**
- * @see org.vamsas.client.IClientFactory#getCurrentSessions()
- */
- public String[] getCurrentSessions()
- {
- String[] sessions = null;
- if (this.sessionFile!=null )
- {
- SessionHandle[] sessionHandles = this.sessionFile.retrieveSessionsList();
- if (sessionHandles != null)
- {
- sessions = new String[sessionHandles.length];
- for (int i = sessionHandles.length -1; i > 0; i--)
- {
- SessionHandle sessionHandle = sessionHandles[i];
- sessions [i] = sessionHandle.getSessionUrn();
- }
- }
- }
- return sessions;
- }
-
-
- private void discoverSession()
- {
-
- }
-
- /**
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle)
- *
- * Creates a IClient object, using default UserHandle with system variables:"user.name" or "USERNAME")),
- "host.name" or "HOSTNAME"
- */
- public IClient getIClient(ClientHandle applicationHandle)
- throws NoDefaultSessionException {
-
- return this.getIClient(applicationHandle, (UserHandle) null);
- }
-
- /**
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle, java.lang.String)
- */
- public IClient getIClient(ClientHandle applicationHandle, String sessionUrn) {
- // TODO Auto-generated method stub
- return null;
- }
-
- /**
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle, org.vamsas.client.UserHandle, java.lang.String)
- */
- public IClient getIClient(ClientHandle applicationHandle, UserHandle userId,
- String sessionUrn) {
- // TODO Auto-generated method stub
- return null;
- }
-
- /**
- * @see org.vamsas.client.IClientFactory#getIClient(org.vamsas.client.ClientHandle, org.vamsas.client.UserHandle)
- */
- public IClient getIClient(ClientHandle applicationHandle, UserHandle userId)
- throws NoDefaultSessionException {
- SimpleClient client = null;
- if (this.sessionArena==null)
- throw new Error("Improperly initialised SimpleClientFactory object - null sessionArena.");
-
- ClientHandle clientHandle =applicationHandle;
- //create default clientHandle with "SimpleVamsasClientApp","0.1",
- if (clientHandle == null)
- clientHandle = new ClientHandle("SimpleVamsasClientApp","0.1");
-
- //check if any available session(s)
- String[] availableSessions = this.getCurrentSessions();
- if (availableSessions != null)
- {//there are available sessions
- if (availableSessions.length>1)
- {//more than one session if available... can not choose
-
- //represents list of session as String
- StringBuffer sessionURNs = new StringBuffer("");
- for (int i = 0; i< availableSessions.length ; i++)
- {
- sessionURNs.append(availableSessions[i]+" ");
- }
- throw new NoDefaultSessionException("Several sessions available, please pick one: "+sessionURNs);
- }
-
- //check if only one session available. if yes, open it
- if (availableSessions.length == 1)
- {
- //only one session available, open it.
- return this.getIClient(clientHandle, availableSessions[0]);
- }
- }
- //no session available - create a new one
-
-
- try
- {
- //create sessionDirectory
- File sessdir = File.createTempFile("sess", ".simpleclient", this.sessionArena);
- log.debug("Creating new session directory");
- if (!(sessdir.delete() && sessdir.mkdir()))
- throw new IOException("Could not make session directory "+sessdir);
- //create session
- VamsasSession vamsasSession = new VamsasSession(sessdir);
-
- this.getSessionFile().addSession(new SessionHandle(new SessionUrn(vamsasSession).getSessionUrn()), false);
- if (userId == null)
- {
- //create a default userHandle
- //with current OS user and hostname
- userId = new UserHandle(System.getProperty("user.name", System.getProperty("USERNAME","Joe Doe")),
- System.getProperty("host.name",System.getProperty("HOSTNAME", "Unknown") ));// clientName, clientVersion, sessionPath);
- }
-
-
- //create simple client
- client = new SimpleClient(userId, clientHandle, vamsasSession);
- }
- catch (IOException e)
- {
- log.error("error while creating new IClient",e);
- }
- catch (InvalidSessionUrnException e)
- {
- log.error("Unable to create new IClient. The session urn is incorrect ",e);
- }
-
- return client;
- }
-
-
- /**
- * @return the sessionFile
- */
- private SessionsFile getSessionFile() throws IOException
- {
- if (this.sessionFile == null)
- {
- this.sessionFile = new SessionsFile( new File (this.sessionArena, SESSION_LIST));
- }
- return this.sessionFile;
- }
-
-
-
-}