X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fuk%2Fac%2Fvamsas%2Fclient%2Fsimpleclient%2FSimpleClientAppdata.java;h=ececd9edfe34610adfda330371b1ae51895569f2;hb=917d7bbb140b99761a96008a44910bb2a10022f1;hp=18f7d2e8cfb0eac3bf4cd908059fdd8067825f0f;hpb=815d45c0c23f2309d93c3ca073d307f391927b11;p=vamsas.git diff --git a/src/uk/ac/vamsas/client/simpleclient/SimpleClientAppdata.java b/src/uk/ac/vamsas/client/simpleclient/SimpleClientAppdata.java index 18f7d2e..ececd9e 100644 --- a/src/uk/ac/vamsas/client/simpleclient/SimpleClientAppdata.java +++ b/src/uk/ac/vamsas/client/simpleclient/SimpleClientAppdata.java @@ -22,6 +22,8 @@ import java.util.jar.JarOutputStream; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import uk.ac.vamsas.client.AppDataInputStream; +import uk.ac.vamsas.client.AppDataOutputStream; import uk.ac.vamsas.client.IClientAppdata; import uk.ac.vamsas.objects.core.AppData; import uk.ac.vamsas.objects.core.ApplicationData; @@ -124,16 +126,14 @@ public class SimpleClientAppdata implements IClientAppdata { * @param docreader * @return */ - private JarInputStream getAppDataStream(AppData appdata, VamsasArchiveReader docreader) { + private InputStream getAppDataStream(AppData appdata, VamsasArchiveReader docreader) { String entryRef = appdata.getDataReference(); if (entryRef!=null) { log.debug("Resolving appData reference +"+entryRef); InputStream entry = docreader.getAppdataStream(entryRef); if (entry!=null) { - if (entry instanceof JarInputStream) { - return (JarInputStream) entry; - } - log.warn("Implementation problem - docreader didn't return a JarInputStream entry."); + return entry; + // log.warn("Implementation problem - docreader didn't return a JarInputStream entry."); } } else { log.debug("GetAppDataStream called for an AppData without a data reference."); @@ -158,15 +158,17 @@ public class SimpleClientAppdata implements IClientAppdata { return null; } // resolve and load data - JarInputStream entry = getAppDataStream(appdata, docreader); + InputStream entry = getAppDataStream(appdata, docreader); ByteArrayOutputStream bytes = new ByteArrayOutputStream(); try { byte buff[] = new byte[_TRANSFER_BUFFER]; int olen=0; - while (entry.available()>0) { - int len = entry.read(buff, olen, _TRANSFER_BUFFER); - bytes.write(buff, 0, len); - olen+=len; + while (entry!=null && entry.available()>0) { + int len = entry.read(buff, 0, _TRANSFER_BUFFER); + if (len>-1) + { bytes.write(buff, 0, len); + olen+=len; + } } buff=null; } catch (Exception e) { @@ -191,7 +193,7 @@ public class SimpleClientAppdata implements IClientAppdata { * @param docreader * @return data in object or null if no data is accessible */ - private DataInput getAppDataAsDataInputStream(AppData appdata, VamsasArchiveReader docreader) { + private AppDataInputStream getAppDataAsDataInputStream(AppData appdata, VamsasArchiveReader docreader) { if (appdata!=null && docreader!=null) { String entryRef = appdata.getDataReference(); if (entryRef!=null) { @@ -208,7 +210,7 @@ public class SimpleClientAppdata implements IClientAppdata { byte[] data=appdata.getData(); if (data.length>0) { ByteArrayInputStream stream = new ByteArrayInputStream(data); - return new DataInputStream(stream); + return new AppDataInputStream(stream); } else { log.debug("Returning null input stream for empty Appdata data block in id="+appdata.getVorbaId()); return null; @@ -258,7 +260,7 @@ public class SimpleClientAppdata implements IClientAppdata { * @param clientOrUser - the appData to resolve - false for client, true for user appdata. * @return null or the DataInputStream desired. */ - private DataInput _getappdataInputStream(boolean clientOrUser) { + private AppDataInputStream _getappdataInputStream(boolean clientOrUser) { if (clientdoc==null) throw new Error("Implementation error, Improperly initialized SimpleClientAppdata."); String appdName; @@ -292,7 +294,7 @@ public class SimpleClientAppdata implements IClientAppdata { /* (non-Javadoc) * @see uk.ac.vamsas.client.IClientAppdata#getClientInputStream() */ - public DataInput getClientInputStream() { + public AppDataInputStream getClientInputStream() { return _getappdataInputStream(false); } @@ -306,13 +308,13 @@ public class SimpleClientAppdata implements IClientAppdata { /* (non-Javadoc) * @see uk.ac.vamsas.client.IClientAppdata#getUserInputStream() */ - public DataInput getUserInputStream() { + public AppDataInputStream getUserInputStream() { return _getappdataInputStream(true); } /** * methods for writing new AppData entries. */ - private DataOutput _getAppdataOutputStream(boolean clientOrUser) { + private AppDataOutputStream _getAppdataOutputStream(boolean clientOrUser) { String apdname; SessionFile apdfile=null; if (!clientOrUser) { @@ -390,6 +392,7 @@ public class SimpleClientAppdata implements IClientAppdata { if (ref==null) { throw new IOException("Null AppData.DataReference passed."); } + log.debug("Writing appData_entry.dat as "+ref); if (vdoc.writeAppdataFromStream(ref, istrm)) { log.debug("Entry updated successfully."); } else { @@ -403,7 +406,7 @@ public class SimpleClientAppdata implements IClientAppdata { /* (non-Javadoc) * @see uk.ac.vamsas.client.IClientAppdata#getClientOutputStream() */ - public DataOutput getClientOutputStream() { + public AppDataOutputStream getClientOutputStream() { if (clientdoc==null) throw new Error("Implementation error, Improperly initialized SimpleClientAppdata."); if (log.isDebugEnabled()) @@ -414,7 +417,7 @@ public class SimpleClientAppdata implements IClientAppdata { /* (non-Javadoc) * @see uk.ac.vamsas.client.IClientAppdata#getUserOutputStream() */ - public DataOutput getUserOutputStream() { + public AppDataOutputStream getUserOutputStream() { if (clientdoc==null) throw new Error("Implementation error, Improperly initialized SimpleClientAppdata."); if (log.isDebugEnabled()) @@ -431,6 +434,7 @@ public class SimpleClientAppdata implements IClientAppdata { throw new Error("Implementation error, Improperly initialized SimpleClientAppdata."); extractAppData(clientdoc.getVamsasDocument()); // LATER - check validity of a DataReference before we return true + // TODO: return true if usersData is null but we have already written a new data stream if ((appsGlobal!=null) && (appsGlobal.getDataReference()!=null || appsGlobal.getData()!=null)) return true; return false; @@ -444,7 +448,8 @@ public class SimpleClientAppdata implements IClientAppdata { throw new Error("Implementation error, Improperly initialized SimpleClientAppdata."); extractAppData(clientdoc.getVamsasDocument()); // LATER - check validity of a DataReference before we return true - if ((appsGlobal!=null) && (appsGlobal.getDataReference()!=null || appsGlobal.getData()!=null)) + // TODO: return true if usersData is null but we have already written a new data stream + if ((usersData!=null) && (usersData.getDataReference()!=null || usersData.getData()!=null)) return true; return false; } @@ -516,7 +521,7 @@ public class SimpleClientAppdata implements IClientAppdata { */ protected boolean isModified() { // LATER differentiate between core xml modification and Jar Entry modification. - if (newAppData.sessionFile.exists() || newUserData.sessionFile.exists()) + if ((newAppData!=null && newAppData.sessionFile.exists()) || (newUserData!=null && newUserData.sessionFile.exists())) return true; return false; }