-/**
+/*
+ * This file is part of the Vamsas Client version 0.2.
+ * Copyright 2010 by Jim Procter, Iain Milne, Pierre Marguerite,
+ * Andrew Waterhouse and Dominik Lindner.
+ *
+ * Earlier versions have also been incorporated into Jalview version 2.4
+ * since 2008, and TOPALi version 2 since 2007.
*
- * VAMSAS Project
- *
+ * The Vamsas Client is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * The Vamsas Client is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
*
- * Dec 13, 2006
- *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with the Vamsas Client. If not, see <http://www.gnu.org/licenses/>.
*/
-
package uk.ac.vamsas.client.simpleclient;
import java.io.File;
/**
* @see uk.ac.vamsas.client.IClientFactory#getIClient(uk.ac.vamsas.client.ClientHandle)
*
- * Creates a IClient object, using default UserHandle with system
- * variables:"user.name" or "USERNAME")), "host.name" or "HOSTNAME"
+ * 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 {
}
+ /**
+ * try to locate the sessionUrn within the simpleclient session arena
+ * @param sessionUrn
+ * @return
+ * @throws InvalidSessionUrnException
+ */
private File convertSessionUrnToFile(String sessionUrn)
throws InvalidSessionUrnException {
if (sessionUrn == null) {
log.debug("Incorrect URN: can not open session.");
- throw new InvalidSessionUrnException();
+ throw new InvalidSessionUrnException("SessionUrn was null");
}
SessionUrn urn = new SessionUrn(sessionUrn);
- return urn.asFile();
+ SimpleSessionHandle[] sh = null;
+ try {
+ sh = getSessionManager().getSessionFor(urn);
+ } catch (IOException e)
+ {
+ log.warn("Ignored IO Exception when trying to access sessionlist.",e);
+ }
+ File sesfile = null;
+ if (sh!=null)
+ {
+ if (sh.length==1)
+ {
+ sesfile = new File(sh[0].getPhysLoc());
+ sh[0] = null;
+ } else {
+ log.error("Raising exception for multiple session files corresponding to single URN (was : "+sessionUrn+")");
+ throw new InvalidSessionUrnException("IMPLEMENTATION ERROR: Multiple session files available for URN ("+sessionUrn+")");
+ }
+ }
+ return sesfile;
}
// 3. if it is - locate the file and pass to new VamsasSession
try {
- File sessionDirectory = this.convertSessionUrnToFile(sessionUrn);
+ File sessionDirectory = convertSessionUrnToFile(sessionUrn);
// create session
log
.debug("found session directory "
+ sessionDirectory.getAbsolutePath());
VamsasSession vamsasSession = new VamsasSession(sessionDirectory);
-
+
/*
* if (userId == null) { //create a default userHandle //with current OS
- * user and hostname userId = new UserHandle(System.getProperty("user.name",
+ * 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); }
+ * System.getProperty("host.name",System.getProperty("HOSTNAME",
+ * "Unknown") ));// clientName, clientVersion, sessionPath); }
*
*
* //create simple client client = new SimpleClient(userId,
* applicationHandle, vamsasSession);
*/
- client = this.initClient(sessionDirectory, userId, applicationHandle, null);
+ client = this.initClient(sessionDirectory, userId, applicationHandle,
+ null,null);
} catch (MalformedURLException e) {
log.error("error while creating new IClient: incorrect session urn", e);
client = null;
- } catch (InvalidSessionDocumentException e)
- {
- log.error("error while creating new IClient: invalid session document", e);
+ } catch (InvalidSessionDocumentException e) {
+ log
+ .error("error while creating new IClient: invalid session document",
+ e);
client = null;
} catch (InvalidSessionUrnException e) {
log.error("error while creating new IClient: incorrect session urn", e);
}
return client;
}
+
/**
- * initialise the vamsas session state and create a SimpleClient object to connect to it
- * @param sessdir newly created or existing session directory
- * @param userId
+ * initialise the vamsas session state and create a SimpleClient object to
+ * connect to it
+ *
+ * @param sessdir
+ * newly created or existing session directory
+ * @param userId
* @param clientHandle
- * @param vamsasDocument null or a document to pass to SimpleCLient to write into the sessdir
+ * @param vamsasDocument
+ * null or a document to pass to SimpleCLient to write into the
+ * sessdir
+ * @param preferredName - name to use instead of vamsasDocument path when creating new session URN
* @return the client
- * @throws IOException if there are problems in session or client creation or if the session already has a vamsasDocument
- * @throws InvalidSessionUrnException for a malformed sessdir
+ * @throws IOException
+ * if there are problems in session or client creation or if the
+ * session already has a vamsasDocument
+ * @throws InvalidSessionUrnException
+ * for a malformed sessdir
*/
private IClient initClient(File sessdir, UserHandle userId,
- ClientHandle clientHandle, File vamsasDocument) throws IOException, InvalidSessionUrnException, InvalidSessionDocumentException {
+ ClientHandle clientHandle, File vamsasDocument, String preferredName) throws IOException,
+ InvalidSessionUrnException, InvalidSessionDocumentException {
IClient client = null;
// create session
VamsasSession vamsasSession = null;
- if (vamsasDocument==null)
- {
+ if (vamsasDocument == null) {
vamsasSession = new VamsasSession(sessdir);
} else {
- vamsasSession = new VamsasSession(sessdir, vamsasDocument);
+ vamsasSession = new VamsasSession(sessdir, vamsasDocument,preferredName);
}
-
- this.getSessionManager().addSession(
- new SessionHandle(new SessionUrn(vamsasSession).getSessionUrn()));
+ getSessionManager().addSession(vamsasSession.getSessionUrn());
if (userId == null) {
// create a default userHandle
// userId = new UserHandle(System.getProperty("user.name",
// 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
+ if (availableSessions.length > 1) {// more than one session if
+ // available... can not choose
// represents list of session as String
StringBuffer sessionURNs = new StringBuffer("");
}
// no session available - create a new one
try {
- client = clientInNewSession(userId, clientHandle, null);
- } catch (Exception e)
- {
- throw new Error("IMPLEMENTATION ERROR: unexpected exception when creating a new session to connect to.",e);
+ client = clientInNewSession(userId, clientHandle, null,null);
+ } catch (Exception e) {
+ throw new Error(
+ "IMPLEMENTATION ERROR: unexpected exception when creating a new session to connect to.",
+ e);
}
return client;
}
/**
- * create a new session directory and possibly import an existing document into it
+ * create a new session directory and possibly import an existing document
+ * into it
+ *
* @param userId
* @param clientHandle
- * @param vamsasDocument null or a document file to copy into the new session
+ * @param vamsasDocument
+ * null or a document file to copy into the new session
+ * @param preferredName - name to be used as base for the new session URN
* @return null or a valid IClient instance
*/
private IClient clientInNewSession(UserHandle userId,
- ClientHandle clientHandle, File vamsasDocument) throws InvalidSessionDocumentException, InvalidSessionUrnException{
+ ClientHandle clientHandle, File vamsasDocument, String preferredName)
+ throws InvalidSessionDocumentException, InvalidSessionUrnException {
IClient client = null;
try {
// try and make a friendly session name
String sesspref = "";
- if (vamsasDocument!=null)
- {
- sesspref = vamsasDocument.getName().replaceAll("([^-A-Za-z0-9]|\\.vdj)", "");
+ if (vamsasDocument != null) {
+ if (preferredName!=null)
+ {
+ sesspref = preferredName.replaceAll(
+ "([^-A-Za-z0-9]|\\.vdj)", "");
+ } else {
+ sesspref = vamsasDocument.getName().replaceAll(
+ "([^-A-Za-z0-9]|\\.vdj)", "");
+ }
}
- sesspref += (new java.util.Date()).toString().replaceAll("[^-A-Za-z0-9]","_");
+ sesspref += (new java.util.Date()).toString().replaceAll("[^-A-Za-z0-9]",
+ "_");
// create sessionDirectory
- File sessdir = new File(sessionArena, sesspref+".simpleclient");
- if (sessdir.exists())
- {
+ File sessdir = new File(sessionArena, sesspref + ".simpleclient");
+ if (sessdir.exists()) {
// make a unique session name
- sessdir = File.createTempFile(sesspref, ".simpleclient",
- sessionArena);
+ sessdir = File.createTempFile(sesspref, ".simpleclient", sessionArena);
} else {
- if (!sessdir.createNewFile())
- {
- throw new Error("VAMSAS Implementation error : sesspref friendly session name is invalid on this platform - please tell the authors!");
+ if (!sessdir.createNewFile()) {
+ throw new Error(
+ "VAMSAS Implementation error : sesspref friendly session name is invalid on this platform - please tell the authors!");
}
}
log.debug("Creating new session directory");
if (!(sessdir.delete() && sessdir.mkdir()))
throw new IOException("Could not make session directory " + sessdir);
- client = initClient(sessdir, userId, clientHandle, vamsasDocument);
+ client = initClient(sessdir, userId, clientHandle, vamsasDocument, preferredName);
} catch (IOException e) {
log.error("error while creating new IClient", e);
} catch (InvalidSessionUrnException e) {
- log.error("Unable to create new IClient. The new session urn is malformed.",
- e);
+ log.error(
+ "Unable to create new IClient. The new session urn is malformed.", e);
}
return client;
public IClient getNewSessionIClient(ClientHandle applicationHandle) {
try {
- return clientInNewSession(null, applicationHandle, null);
- }
- catch (Exception e) {
- log.error("Failed to create new session for app with default user.",e);
+ return clientInNewSession(null, applicationHandle, null,null);
+ } catch (Exception e) {
+ log.error("Failed to create new session for app with default user.", e);
}
return null;
}
public IClient getNewSessionIClient(ClientHandle applicationHandle,
UserHandle userId) {
try {
- return clientInNewSession(userId, applicationHandle, null);
+ return clientInNewSession(userId, applicationHandle, null,null);
} catch (Exception e) {
- log.error("Failed to create new session for app and user.",e);
+ log.error("Failed to create new session for app and user.", e);
}
return null;
}
- private void checkImportedDocument(File vamsasDocument) throws InvalidSessionDocumentException
- {
- if (!vamsasDocument.exists())
- {
- throw new InvalidSessionDocumentException("File "+vamsasDocument+" does not exist");
+
+ private void checkImportedDocument(File vamsasDocument)
+ throws InvalidSessionDocumentException {
+ if (!vamsasDocument.exists()) {
+ throw new InvalidSessionDocumentException("File " + vamsasDocument
+ + " does not exist");
}
- if (!vamsasDocument.canRead())
- {
- throw new InvalidSessionDocumentException("File "+vamsasDocument+" does not exist");
+ if (!vamsasDocument.canRead()) {
+ throw new InvalidSessionDocumentException("File " + vamsasDocument
+ + " does not exist");
}
}
+
public IClient openAsNewSessionIClient(ClientHandle applicationHandle,
File vamsasDocument) throws InvalidSessionDocumentException {
- checkImportedDocument(vamsasDocument);
+ checkImportedDocument(vamsasDocument);
try {
- return clientInNewSession(null, applicationHandle, vamsasDocument);
- } catch (InvalidSessionUrnException e)
- {
+ return clientInNewSession(null, applicationHandle, vamsasDocument,null);
+ } catch (InvalidSessionUrnException e) {
throw new InvalidSessionDocumentException("Unexpected exception", e);
}
}
public IClient openAsNewSessionIClient(ClientHandle applicationHandle,
- UserHandle userId, File vamsasDocument) throws InvalidSessionDocumentException {
- checkImportedDocument(vamsasDocument);
+ UserHandle userId, File vamsasDocument)
+ throws InvalidSessionDocumentException {
+ checkImportedDocument(vamsasDocument);
try {
- return clientInNewSession(userId, applicationHandle, vamsasDocument);
- } catch (InvalidSessionUrnException e)
- {
- throw new InvalidSessionDocumentException("Unexpected exception", e);
+ return clientInNewSession(userId, applicationHandle, vamsasDocument,null);
+ } catch (InvalidSessionUrnException e) {
+ throw new InvalidSessionDocumentException("Unexpected exception", e);
+ }
+ }
+
+ public IClient openAsNewSessionIClient(ClientHandle applicationHandle,
+ File vamsasDocument, String sessionName)
+ throws InvalidSessionDocumentException {
+ checkImportedDocument(vamsasDocument);
+ try {
+ return clientInNewSession(null, applicationHandle, vamsasDocument, sessionName);
+ } catch (InvalidSessionUrnException e) {
+ throw new InvalidSessionDocumentException("Unexpected exception", e);
+ }
+ }
+
+ public IClient openAsNewSessionIClient(ClientHandle applicationHandle,
+ UserHandle userId, File vamsasDocument, String sessionName)
+ throws InvalidSessionDocumentException {
+ checkImportedDocument(vamsasDocument);
+ try {
+ return clientInNewSession(userId, applicationHandle, vamsasDocument, sessionName);
+ } catch (InvalidSessionUrnException e) {
+ throw new InvalidSessionDocumentException("Unexpected exception", e);
}
}