public boolean checkStream( XStorage xParentStorage, String sName, String sMediaType, boolean bCompressed, byte[] pBytes) { // open substream element first XStream xSubStream = null; try { Object oSubStream = xParentStorage.openStreamElement(sName, ElementModes.READ); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't open substream '" + sName + "'!"); return false; } } catch (Exception e) { Error("Can't open substream '" + sName + "', exception : " + e + "!"); return false; } boolean bResult = InternalCheckStream(xSubStream, sName, sMediaType, bCompressed, pBytes, true); // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sName)) return false; return bResult; }
public boolean WriteBytesToEncrSubstream( XStorage xStorage, String sStreamName, String sMediaType, boolean bCompressed, byte[] pBytes, String sPass) { // open substream element XStream xSubStream = null; try { Object oSubStream = xStorage.openEncryptedStreamElement(sStreamName, ElementModes.WRITE, sPass); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't create substream '" + sStreamName + "'!"); return false; } } catch (Exception e) { Error("Can't create substream '" + sStreamName + "', exception : " + e + "!"); return false; } if (!WriteBytesToStream(xSubStream, sStreamName, sMediaType, bCompressed, pBytes)) return false; // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sStreamName)) return false; return true; }
public boolean WriteBytesToEncrStreamH( XStorage xStorage, String sStreamPath, String sMediaType, boolean bCompressed, byte[] pBytes, String sPass, boolean bCommit) { // open substream element XStream xSubStream = null; try { XHierarchicalStorageAccess xHStorage = (XHierarchicalStorageAccess) UnoRuntime.queryInterface(XHierarchicalStorageAccess.class, xStorage); if (xHStorage == null) { Error("The storage does not support hierarchical access!"); return false; } Object oSubStream = xHStorage.openEncryptedStreamElementByHierarchicalName( sStreamPath, ElementModes.WRITE, sPass); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't create substream '" + sStreamPath + "'!"); return false; } } catch (Exception e) { Error("Can't create substream '" + sStreamPath + "', exception : " + e + "!"); return false; } if (!WriteBytesToStream(xSubStream, sStreamPath, sMediaType, bCompressed, pBytes)) return false; XTransactedObject xTransact = (XTransactedObject) UnoRuntime.queryInterface(XTransactedObject.class, xSubStream); if (xTransact == null) { Error("Substream '" + sStreamPath + "', stream opened for writing must be transacted!"); return false; } if (bCommit) { try { xTransact.commit(); } catch (Exception e) { Error( "Can't commit storage after substream '" + sStreamPath + "' change, exception : " + e + "!"); return false; } } // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sStreamPath)) return false; return true; }
public boolean checkStreamH( XStorage xParentStorage, String sPath, String sMediaType, boolean bCompressed, byte[] pBytes) { // open substream element first XStream xSubStream = null; try { XHierarchicalStorageAccess xHStorage = (XHierarchicalStorageAccess) UnoRuntime.queryInterface(XHierarchicalStorageAccess.class, xParentStorage); if (xHStorage == null) { Error("The storage does not support hierarchical access!"); return false; } Object oSubStream = xHStorage.openStreamElementByHierarchicalName(sPath, ElementModes.READ); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't open substream '" + sPath + "'!"); return false; } } catch (Exception e) { Error("Can't open substream '" + sPath + "', exception : " + e + "!"); return false; } boolean bResult = InternalCheckStream(xSubStream, sPath, sMediaType, bCompressed, pBytes, true); // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sPath)) return false; return bResult; }
public XInputStream getInputStream(XStream xStream) { XInputStream xInTemp = null; try { xInTemp = xStream.getInputStream(); if (xInTemp == null) Error("Can't get the input part of a stream!"); } catch (Exception e) { Error("Can't get the input part of a stream, exception :" + e); } return xInTemp; }
public XStream OpenStream(XStorage xStorage, String sStreamName, int nMode) { // open substream element XStream xSubStream = null; try { Object oSubStream = xStorage.openStreamElement(sStreamName, nMode); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) Error("Can't create substream '" + sStreamName + "'!"); } catch (Exception e) { Error("Can't create substream '" + sStreamName + "', exception : " + e + "!"); } return xSubStream; }
public boolean WBToSubstrOfEncr( XStorage xStorage, String sStreamName, String sMediaType, boolean bCompressed, byte[] pBytes, boolean bEncrypted) { // open substream element XStream xSubStream = null; try { Object oSubStream = xStorage.openStreamElement(sStreamName, ElementModes.WRITE); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't create substream '" + sStreamName + "'!"); return false; } } catch (Exception e) { Error("Can't create substream '" + sStreamName + "', exception : " + e + "!"); return false; } // get access to the XPropertySet interface XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xSubStream); if (xPropSet == null) { Error("Can't get XPropertySet implementation from substream '" + sStreamName + "'!"); return false; } // set properties to the stream try { xPropSet.setPropertyValue("UseCommonStoragePasswordEncryption", new Boolean(bEncrypted)); } catch (Exception e) { Error( "Can't set 'UseCommonStoragePasswordEncryption' property to substream '" + sStreamName + "', exception: " + e); return false; } if (!WriteBytesToStream(xSubStream, sStreamName, sMediaType, bCompressed, pBytes)) return false; // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sStreamName)) return false; return true; }
public boolean checkStorageProperties( XStorage xStorage, String sMediaType, boolean bIsRoot, int nMode) { boolean bOk = false; // get access to the XPropertySet interface XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStorage); if (xPropSet != null) { try { // get "MediaType", "IsRoot" and "OpenMode" properties and control there values String sPropMediaType = AnyConverter.toString(xPropSet.getPropertyValue("MediaType")); boolean bPropIsRoot = AnyConverter.toBoolean(xPropSet.getPropertyValue("IsRoot")); int nPropMode = AnyConverter.toInt(xPropSet.getPropertyValue("OpenMode")); bOk = true; if (!sPropMediaType.equals(sMediaType)) { Error( "'MediaType' property contains wrong value, expected '" + sMediaType + "', set '" + sPropMediaType + "' !"); bOk = false; } if (bPropIsRoot != bIsRoot) { Error("'IsRoot' property contains wrong value!"); bOk = false; } if ((bIsRoot && (nPropMode | ElementModes.READ) != (nMode | ElementModes.READ)) || (!bIsRoot && (nPropMode & nMode) != nMode)) { Error( "'OpenMode' property contains wrong value, expected " + nMode + ", in reality " + nPropMode + "!"); bOk = false; } } catch (Exception e) { Error("Can't get properties of substorage, exception: " + e); } } else { Error("Can't get XPropertySet implementation from storage!"); } return bOk; }
public boolean disposeStream(XStream xStream, String sStreamName) { XComponent xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, xStream); if (xComponent == null) { Error("Can't get XComponent implementation from substream '" + sStreamName + "'!"); return false; } try { xComponent.dispose(); } catch (Exception e) { Error("Substream '" + sStreamName + "' disposing throws exception: " + e); return false; } return true; }
public boolean disposeStorage(XStorage xStorage) { // dispose the storage XComponent xComponent = (XComponent) UnoRuntime.queryInterface(XComponent.class, xStorage); if (xComponent == null) { Error("Can't retrieve XComponent implementation from storage!"); return false; } try { xComponent.dispose(); } catch (Exception e) { Error("Storage disposing failed!"); return false; } return true; }
public boolean commitStorage(XStorage xStorage) { // XTransactedObject must be supported by storages XTransactedObject xTransact = (XTransactedObject) UnoRuntime.queryInterface(XTransactedObject.class, xStorage); if (xTransact == null) { Error("Storage doesn't implement transacted access!"); return false; } try { xTransact.commit(); } catch (Exception e) { Error("Storage commit failed, exception:" + e); return false; } return true; }
public boolean cantOpenStorage(XStorage xStorage, String sName) { // try to open an opened substorage, open call must fail try { Object oDummyStorage = xStorage.openStorageElement(sName, ElementModes.READ); Error("The trying to reopen opened substorage '" + sName + "' must fail!"); } catch (Exception e) { return true; } return false; }
public boolean copyElementTo(XStorage xSource, String sName, XStorage xDest, String sTargetName) { // copy element with name sName from xSource to xDest try { xSource.copyElementTo(sName, xDest, sTargetName); } catch (Exception e) { Error("Element copying failed, exception: " + e); return false; } return true; }
public boolean copyStorage(XStorage xSourceStorage, XStorage xDestStorage) { // copy xSourceStorage to xDestStorage try { xSourceStorage.copyToStorage(xDestStorage); } catch (Exception e) { Error("Storage copying failed, exception: " + e); return false; } return true; }
public XStream cloneEncrSubStream(XStorage xStorage, String sName, String sPass) { // clone existing substream try { XStream xStream = xStorage.cloneEncryptedStreamElement(sName, sPass); return xStream; } catch (Exception e) { Error("Can't clone encrypted substream '" + sName + "', exception: " + e); } return null; }
public boolean moveElementTo(XStorage xSource, String sName, XStorage xDest) { // move element with name sName from xSource to xDest try { xSource.moveElementTo(sName, xDest, sName); } catch (Exception e) { Error("Element moving failed, exception: " + e); return false; } return true; }
public boolean renameElement(XStorage xStorage, String sOldName, String sNewName) { // rename element with name sOldName to sNewName try { xStorage.renameElement(sOldName, sNewName); } catch (Exception e) { Error("Element renaming failed, exception: " + e); return false; } return true; }
public boolean cantOpenStreamH(XStorage xStorage, String sPath, int nMode) { // try to open the substream with specified mode must fail XHierarchicalStorageAccess xHStorage = (XHierarchicalStorageAccess) UnoRuntime.queryInterface(XHierarchicalStorageAccess.class, xStorage); if (xHStorage == null) { Error("The storage does not support hierarchical access!"); return false; } try { Object oDummyStream = xHStorage.openStreamElementByHierarchicalName(sPath, nMode); Error("The trying to open substream '" + sPath + "' must fail!"); } catch (Exception e) { return true; } return false; }
public boolean cantOpenStream(XStorage xStorage, String sName, int nMode) { // try to open the substream with specified mode must fail try { Object oDummyStream = xStorage.openStreamElement(sName, nMode); Error("The trying to open substream '" + sName + "' must fail!"); } catch (Exception e) { return true; } return false; }
public boolean removeElement(XStorage xStorage, String sName) { // remove element with name sName try { xStorage.removeElement(sName); } catch (Exception e) { Error("Element removing failed, exception: " + e); return false; } return true; }
public XStorage openSubStorage(XStorage xStorage, String sName, int nMode) { // open existing substorage try { Object oSubStorage = xStorage.openStorageElement(sName, nMode); XStorage xSubStorage = (XStorage) UnoRuntime.queryInterface(XStorage.class, oSubStorage); return xSubStorage; } catch (Exception e) { Error("Can't open substorage '" + sName + "', exception: " + e); } return null; }
public int ChangeStreamPass( XStorage xStorage, String sStreamName, String sOldPass, String sNewPass) { // open substream element XStream xSubStream = null; try { Object oSubStream = xStorage.openEncryptedStreamElement(sStreamName, ElementModes.WRITE, sOldPass); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't open substream '" + sStreamName + "'!"); return 0; } } catch (Exception e) { Error("Can't open substream '" + sStreamName + "', exception : " + e + "!"); return 0; } // change the password for the stream XEncryptionProtectedSource xStreamEncryption = (XEncryptionProtectedSource) UnoRuntime.queryInterface(XEncryptionProtectedSource.class, xSubStream); if (xStreamEncryption == null) { Message( "Optional interface XEncryptionProtectedSource is not implemented, feature can not be tested!"); return -1; } try { xStreamEncryption.setEncryptionPassword(sNewPass); } catch (Exception e) { Error("Can't change encryption key of the substream '" + sStreamName + "', exception:" + e); return 0; } // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sStreamName)) return 0; return 1; }
public boolean WriteBytesToStream( XStream xStream, String sStreamName, String sMediaType, boolean bCompressed, byte[] pBytes) { // get output stream of substream XOutputStream xOutput = xStream.getOutputStream(); if (xOutput == null) { Error("Can't get XOutputStream implementation from substream '" + sStreamName + "'!"); return false; } // get XTrucate implementation from output stream XTruncate xTruncate = (XTruncate) UnoRuntime.queryInterface(XTruncate.class, xOutput); if (xTruncate == null) { Error("Can't get XTruncate implementation from substream '" + sStreamName + "'!"); return false; } // write requested byte sequence try { xTruncate.truncate(); xOutput.writeBytes(pBytes); } catch (Exception e) { Error("Can't write to stream '" + sStreamName + "', exception: " + e); return false; } // get access to the XPropertySet interface XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStream); if (xPropSet == null) { Error("Can't get XPropertySet implementation from substream '" + sStreamName + "'!"); return false; } // set properties to the stream try { xPropSet.setPropertyValue("MediaType", sMediaType); xPropSet.setPropertyValue("Compressed", new Boolean(bCompressed)); } catch (Exception e) { Error("Can't set properties to substream '" + sStreamName + "', exception: " + e); return false; } // check size property of the stream try { long nSize = AnyConverter.toLong(xPropSet.getPropertyValue("Size")); if (nSize != pBytes.length) { Error("The 'Size' property of substream '" + sStreamName + "' contains wrong value!"); return false; } } catch (Exception e) { Error("Can't get 'Size' property from substream '" + sStreamName + "', exception: " + e); return false; } return true; }
public boolean closeOutput(XStream xStream) { XOutputStream xOutTemp = null; try { xOutTemp = xStream.getOutputStream(); if (xOutTemp == null) { Error("Can't get the output part of a stream!"); return false; } } catch (Exception e) { Error("Can't get the output part of a stream, exception :" + e); return false; } try { xOutTemp.closeOutput(); } catch (Exception e) { Error("Can't close output part of a stream, exception :" + e); return false; } return true; }
public XStream CreateTempFileStream(XMultiServiceFactory xMSF) { // try to get temporary file representation XStream xTempFileStream = null; try { Object oTempFile = xMSF.createInstance("com.sun.star.io.TempFile"); xTempFileStream = (XStream) UnoRuntime.queryInterface(XStream.class, oTempFile); } catch (Exception e) { } if (xTempFileStream == null) Error("Can't create temporary file!"); return xTempFileStream; }
public String CreateTempFile(XMultiServiceFactory xMSF) { String sResult = null; // try to get temporary file representation XPropertySet xTempFileProps = null; try { Object oTempFile = xMSF.createInstance("com.sun.star.io.TempFile"); xTempFileProps = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, oTempFile); } catch (Exception e) { } if (xTempFileProps != null) { try { xTempFileProps.setPropertyValue("RemoveFile", new Boolean(false)); sResult = AnyConverter.toString(xTempFileProps.getPropertyValue("Uri")); } catch (Exception e) { Error("Can't control TempFile properties, exception: " + e); } } else { Error("Can't create temporary file representation!"); } // close temporary file explicitly try { XStream xStream = (XStream) UnoRuntime.queryInterface(XStream.class, xTempFileProps); if (xStream != null) { XOutputStream xOut = xStream.getOutputStream(); if (xOut != null) xOut.closeOutput(); XInputStream xIn = xStream.getInputStream(); if (xIn != null) xIn.closeInput(); } else Error("Can't close TempFile!"); } catch (Exception e) { Error("Can't close TempFile, exception: " + e); } return sResult; }
public XStorage cloneSubStorage(XSingleServiceFactory xFactory, XStorage xStorage, String sName) { // create a copy of a last committed version of specified substorage XStorage xResult = null; try { Object oTempStorage = xFactory.createInstance(); xResult = (XStorage) UnoRuntime.queryInterface(XStorage.class, oTempStorage); if (xResult != null) xStorage.copyStorageElementLastCommitTo(sName, xResult); } catch (Exception e) { Error("Can't clone substorage '" + sName + "', exception: " + e); return null; } return xResult; }
public boolean WriteBytesToSubstreamDefaultCompressed( XStorage xStorage, String sStreamName, String sMediaType, byte[] pBytes) { // open substream element XStream xSubStream = null; try { Object oSubStream = xStorage.openStreamElement(sStreamName, ElementModes.WRITE); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't create substream '" + sStreamName + "'!"); return false; } } catch (Exception e) { Error("Can't create substream '" + sStreamName + "', exception : " + e + "!"); return false; } // get output stream of substream XOutputStream xOutput = xSubStream.getOutputStream(); if (xOutput == null) { Error("Can't get XOutputStream implementation from substream '" + sStreamName + "'!"); return false; } // get XTrucate implementation from output stream XTruncate xTruncate = (XTruncate) UnoRuntime.queryInterface(XTruncate.class, xOutput); if (xTruncate == null) { Error("Can't get XTruncate implementation from substream '" + sStreamName + "'!"); return false; } // write requested byte sequence try { xTruncate.truncate(); xOutput.writeBytes(pBytes); } catch (Exception e) { Error("Can't write to stream '" + sStreamName + "', exception: " + e); return false; } // get access to the XPropertySet interface XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xSubStream); if (xPropSet == null) { Error("Can't get XPropertySet implementation from substream '" + sStreamName + "'!"); return false; } // set properties to the stream // do not set the compressed property try { xPropSet.setPropertyValue("MediaType", sMediaType); } catch (Exception e) { Error("Can't set properties to substream '" + sStreamName + "', exception: " + e); return false; } // check size property of the stream try { long nSize = AnyConverter.toLong(xPropSet.getPropertyValue("Size")); if (nSize != pBytes.length) { Error("The 'Size' property of substream '" + sStreamName + "' contains wrong value!"); return false; } } catch (Exception e) { Error("Can't get 'Size' property from substream '" + sStreamName + "', exception: " + e); return false; } // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sStreamName)) return false; return true; }
public boolean checkEncrStreamH( XStorage xParentStorage, String sPath, String sMediaType, byte[] pBytes, String sPass) { // Important: a common password for any of parent storage should not be set or // should be different from sPass XHierarchicalStorageAccess xHStorage = (XHierarchicalStorageAccess) UnoRuntime.queryInterface(XHierarchicalStorageAccess.class, xParentStorage); if (xHStorage == null) { Error("The storage does not support hierarchical access!"); return false; } try { Object oSubStream = xHStorage.openStreamElementByHierarchicalName(sPath, ElementModes.READ); XStream xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); Error("Encrypted substream '" + sPath + "' was opened without password!"); return false; } catch (WrongPasswordException wpe) { } catch (Exception e) { Error( "Unexpected exception in case of opening of encrypted stream '" + sPath + "' without password: "******"!"); return false; } String sWrongPass = "******"; sWrongPass += sPass; try { Object oSubStream = xHStorage.openEncryptedStreamElementByHierarchicalName( sPath, ElementModes.READ, sWrongPass); XStream xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); Error("Encrypted substream '" + sPath + "' was opened with wrong password!"); return false; } catch (WrongPasswordException wpe) { } catch (Exception e) { Error( "Unexpected exception in case of opening of encrypted stream '" + sPath + "' with wrong password: "******"!"); return false; } XStream xSubStream = null; try { Object oSubStream = xHStorage.openEncryptedStreamElementByHierarchicalName(sPath, ElementModes.READ, sPass); xSubStream = (XStream) UnoRuntime.queryInterface(XStream.class, oSubStream); if (xSubStream == null) { Error("Can't open encrypted substream '" + sPath + "'!"); return false; } } catch (Exception e) { Error("Can't open encrypted substream '" + sPath + "', exception : " + e + "!"); return false; } // encrypted streams will be compressed always, so after the storing this property is always // true, // although before the storing it can be set to false ( it is not always clear whether a stream // is encrypted // before the storing ) boolean bResult = InternalCheckStream(xSubStream, sPath, sMediaType, true, pBytes, false); // free the stream resources, garbage collector may remove the object too late if (!disposeStream(xSubStream, sPath)) return false; return bResult; }
public boolean InternalCheckStream( XStream xStream, String sName, String sMediaType, boolean bCompressed, byte[] pBytes, boolean bCheckCompressed) { // get input stream of substream XInputStream xInput = xStream.getInputStream(); if (xInput == null) { Error("Can't get XInputStream implementation from substream '" + sName + "'!"); return false; } byte pContents[][] = new byte[1][]; // ??? // read contents try { xInput.readBytes(pContents, pBytes.length + 1); } catch (Exception e) { Error("Can't read from stream '" + sName + "', exception: " + e); return false; } // check size of stream data if (pContents.length == 0) { Error("SubStream '" + sName + "' reading produced disaster!"); return false; } if (pBytes.length != pContents[0].length) { Error( "SubStream '" + sName + "' contains wrong amount of data! (" + pContents[0].length + "/" + pBytes.length + ")"); return false; } // check stream data for (int ind = 0; ind < pBytes.length; ind++) { if (pBytes[ind] != pContents[0][ind]) { Error( "SubStream '" + sName + "' contains wrong data! ( byte num. " + ind + " should be " + pBytes[ind] + " but it is " + pContents[0][ind] + ")"); return false; } } // check properties boolean bOk = false; // get access to the XPropertySet interface XPropertySet xPropSet = (XPropertySet) UnoRuntime.queryInterface(XPropertySet.class, xStream); if (xPropSet != null) { try { // get "MediaType" and "Size" properties and control there values String sPropMediaType = AnyConverter.toString(xPropSet.getPropertyValue("MediaType")); long nPropSize = AnyConverter.toLong(xPropSet.getPropertyValue("Size")); boolean bPropCompress = AnyConverter.toBoolean(xPropSet.getPropertyValue("Compressed")); bOk = true; if (!sPropMediaType.equals(sMediaType)) { Error( "'MediaType' property contains wrong value for stream '" + sName + "',\nexpected: '" + sMediaType + "', set: '" + sPropMediaType + "'!"); bOk = false; } if (nPropSize != pBytes.length) { Error("'Size' property contains wrong value for stream'" + sName + "'!"); bOk = false; } if (bCheckCompressed && bPropCompress != bCompressed) { Error("'Compressed' property contains wrong value for stream'" + sName + "'!"); bOk = false; } } catch (Exception e) { Error("Can't get properties of substream '" + sName + "', exception: " + e); } } else { Error("Can't get XPropertySet implementation from stream '" + sName + "'!"); } return bOk; }