Beispiel #1
0
  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;
  }
Beispiel #2
0
  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;
  }
Beispiel #3
0
  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;
  }
Beispiel #4
0
  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;
  }
Beispiel #5
0
  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;
  }
Beispiel #6
0
  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;
  }
Beispiel #7
0
  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;
  }
Beispiel #8
0
  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;
  }
Beispiel #9
0
  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;
  }
Beispiel #10
0
  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;
  }
Beispiel #11
0
  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;
  }
Beispiel #12
0
  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;
  }
Beispiel #13
0
  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;
  }
Beispiel #14
0
  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;
  }
Beispiel #15
0
  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;
  }
Beispiel #16
0
  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;
  }
Beispiel #17
0
  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;
  }
Beispiel #18
0
  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;
  }
Beispiel #19
0
  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;
  }
Beispiel #20
0
  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;
  }
Beispiel #21
0
  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;
  }
Beispiel #22
0
  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;
  }
Beispiel #23
0
  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;
  }
Beispiel #24
0
  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;
  }
Beispiel #25
0
  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;
  }
Beispiel #26
0
  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;
  }
Beispiel #27
0
  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;
  }
Beispiel #28
0
  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;
  }
Beispiel #29
0
  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;
  }
Beispiel #30
0
  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;
  }