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;
* @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.");
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) {
* @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) {
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;
* @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;
/* (non-Javadoc)
* @see uk.ac.vamsas.client.IClientAppdata#getClientInputStream()
*/
- public DataInput getClientInputStream() {
+ public AppDataInputStream getClientInputStream() {
return _getappdataInputStream(false);
}
/* (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) {
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 {
/* (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())
/* (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())
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;
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;
}
*/
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;
}