chemistry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Florent Guillaume ...@nuxeo.com>
Subject Re: svn commit: r1580826 - in /chemistry/opencmis/trunk: chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/ chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemi...
Date Mon, 24 Mar 2014 13:23:01 GMT
Hi,

Could you please open a JIRA ticket for this, and reference it in
further commits?

Thanks,
Florent


On Mon, Mar 24, 2014 at 1:49 PM,  <fmui@apache.org> wrote:
> Author: fmui
> Date: Mon Mar 24 12:49:00 2014
> New Revision: 1580826
>
> URL: http://svn.apache.org/r1580826
> Log:
> added support for CMIS extension: content stream hash
>
> Added:
>     chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java
  (with props)
>     chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java
  (with props)
>     chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java
  (with props)
> Modified:
>     chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java
>     chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
>     chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java
>
> Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java
> URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java?rev=1580826&r1=1580825&r2=1580826&view=diff
> ==============================================================================
> --- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java
(original)
> +++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-api/src/main/java/org/apache/chemistry/opencmis/client/api/DocumentProperties.java
Mon Mar 24 12:49:00 2014
> @@ -18,6 +18,10 @@
>   */
>  package org.apache.chemistry.opencmis.client.api;
>
> +import java.util.List;
> +
> +import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
> +
>  /**
>   * Accessors to CMIS document properties.
>   *
> @@ -204,4 +208,16 @@ public interface DocumentProperties {
>       * @cmis 1.0
>       */
>      String getContentStreamId();
> +
> +    /**
> +     * Returns the content hashes or {@code null} if the document has no content
> +     * (CMIS property {@code cmis:contentStreamHash}).
> +     *
> +     * @return the list of content hashes or {@code null} if the property hasn't
> +     *         been requested, hasn't been provided by the repository, or the
> +     *         document has no content
> +     *
> +     * @cmis Extension
> +     */
> +    List<ContentStreamHash> getContentStreamHashes();
>  }
>
> Modified: chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
> URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java?rev=1580826&r1=1580825&r2=1580826&view=diff
> ==============================================================================
> --- chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
(original)
> +++ chemistry/opencmis/trunk/chemistry-opencmis-client/chemistry-opencmis-client-impl/src/main/java/org/apache/chemistry/opencmis/client/runtime/DocumentImpl.java
Mon Mar 24 12:49:00 2014
> @@ -38,6 +38,7 @@ import org.apache.chemistry.opencmis.cli
>  import org.apache.chemistry.opencmis.commons.PropertyIds;
>  import org.apache.chemistry.opencmis.commons.data.Ace;
>  import org.apache.chemistry.opencmis.commons.data.ContentStream;
> +import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
>  import org.apache.chemistry.opencmis.commons.data.ObjectData;
>  import org.apache.chemistry.opencmis.commons.data.PartialContentStream;
>  import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
> @@ -46,6 +47,7 @@ import org.apache.chemistry.opencmis.com
>  import org.apache.chemistry.opencmis.commons.enums.VersioningState;
>  import org.apache.chemistry.opencmis.commons.exceptions.CmisNotSupportedException;
>  import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
> +import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamHashImpl;
>  import org.apache.chemistry.opencmis.commons.spi.Holder;
>
>  public class DocumentImpl extends AbstractFilableCmisObject implements Document {
> @@ -122,6 +124,20 @@ public class DocumentImpl extends Abstra
>          return getPropertyValue(PropertyIds.CONTENT_STREAM_ID);
>      }
>
> +    public List<ContentStreamHash> getContentStreamHashes() {
> +        List<String> hashes = getPropertyValue(PropertyIds.CONTENT_STREAM_HASH);
> +        if (hashes == null || hashes.size() == 0) {
> +            return null;
> +        }
> +
> +        List<ContentStreamHash> result = new ArrayList<ContentStreamHash>(hashes.size());
> +        for (String hash : hashes) {
> +            result.add(new ContentStreamHashImpl(hash));
> +        }
> +
> +        return result;
> +    }
> +
>      // operations
>
>      public Document copy(ObjectId targetFolderId, Map<String, ?> properties, VersioningState
versioningState,
>
> Modified: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java
> URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java?rev=1580826&r1=1580825&r2=1580826&view=diff
> ==============================================================================
> --- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java
(original)
> +++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/PropertyIds.java
Mon Mar 24 12:49:00 2014
> @@ -343,7 +343,7 @@ public final class PropertyIds {
>       */
>      public static final String POLICY_TEXT = "cmis:policyText";
>
> -    // ---- retention ---
> +    // ---- retention ----
>      /**
>       * CMIS retention property {@code cmis:rm_expirationDate}: expiration date.
>       * <p>
> @@ -382,4 +382,16 @@ public final class PropertyIds {
>       * @cmis 1.1
>       */
>      public static final String HOLD_IDS = "cmis:rm_holdIds";
> +
> +    // ---- extensions ----
> +    /**
> +     * Content Hash property {@code cmis:contentStreamHash} (multivalue): hashes
> +     * of the content stream
> +     * <p>
> +     * CMIS data type: string<br>
> +     * Java type: String
> +     *
> +     * @cmis Extension
> +     */
> +    public static final String CONTENT_STREAM_HASH = "cmis:contentStreamHash";
>  }
>
> Added: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java
> URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java?rev=1580826&view=auto
> ==============================================================================
> --- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java
(added)
> +++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java
Mon Mar 24 12:49:00 2014
> @@ -0,0 +1,47 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.chemistry.opencmis.commons.data;
> +
> +/**
> + * Content hash.
> + */
> +public interface ContentStreamHash {
> +
> +    /**
> +     * Returns the content hash property value ({@code cmis:contentStreamHash}).
> +     *
> +     * @return the content hash property value
> +     */
> +    String getPropertyValue();
> +
> +    /**
> +     * Returns the hash algorithm.
> +     *
> +     * @return the hash algorithm or {@code null} if the property value is
> +     *         invalid
> +     */
> +    String getAlgorithm();
> +
> +    /**
> +     * Returns the hash value.
> +     *
> +     * @return the hash value or {@code null} if the property value is invalid
> +     */
> +    String getHash();
> +}
>
> Propchange: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-api/src/main/java/org/apache/chemistry/opencmis/commons/data/ContentStreamHash.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java
> URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java?rev=1580826&view=auto
> ==============================================================================
> --- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java
(added)
> +++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java
Mon Mar 24 12:49:00 2014
> @@ -0,0 +1,164 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.chemistry.opencmis.commons.impl.dataobjects;
> +
> +import java.io.IOException;
> +import java.io.InputStream;
> +import java.security.MessageDigest;
> +import java.security.NoSuchAlgorithmException;
> +import java.util.ArrayList;
> +import java.util.List;
> +import java.util.Locale;
> +
> +import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
> +
> +public class ContentStreamHashImpl implements ContentStreamHash {
> +
> +    public static final String ALGORITHM_MD5 = "md5";
> +    public static final String ALGORITHM_SHA1 = "sha-1";
> +    public static final String ALGORITHM_SHA224 = "sha-224";
> +    public static final String ALGORITHM_SHA256 = "sha-256";
> +    public static final String ALGORITHM_SHA384 = "sha-384";
> +    public static final String ALGORITHM_SHA512 = "sha-512";
> +    public static final String ALGORITHM_SHA3 = "sha-3";
> +
> +    private final static char[] HEX_DIGITS = "0123456789abcdef".toCharArray();
> +
> +    private String propertyValue;
> +    private String algorithm = null;
> +    private String hash = null;
> +
> +    /**
> +     * Constructs an object without values.
> +     */
> +    public ContentStreamHashImpl() {
> +    }
> +
> +    /**
> +     * Constructs an object from the {@code cmis:contentStreamHash} property
> +     * value.
> +     *
> +     * @param propertyValue
> +     *            the property value
> +     */
> +    public ContentStreamHashImpl(String propertyValue) {
> +        this.propertyValue = propertyValue;
> +
> +        if (propertyValue == null) {
> +            return;
> +        }
> +
> +        String pv = propertyValue.trim();
> +        int algEnd = pv.indexOf('}');
> +        if (pv.charAt(0) != '{' || algEnd < 1) {
> +            return;
> +        }
> +
> +        this.algorithm = pv.substring(1, algEnd).toLowerCase(Locale.ENGLISH);
> +        this.hash = pv.substring(algEnd + 1).replaceAll("\\s", "").toLowerCase(Locale.ENGLISH);
> +    }
> +
> +    /**
> +     * Constructs an object from the algorithm and hash.
> +     *
> +     * @param algorithm
> +     *            the algorithm
> +     * @param hash
> +     *            the hash value
> +     */
> +    public ContentStreamHashImpl(String algorithm, String hash) {
> +        if (algorithm == null || algorithm.trim().length() == 0) {
> +            throw new IllegalArgumentException("Algorithm must be set!");
> +        }
> +
> +        if (hash == null || hash.trim().length() == 0) {
> +            throw new IllegalArgumentException("Hash must be set!");
> +        }
> +
> +        this.algorithm = algorithm.toLowerCase(Locale.ENGLISH);
> +        this.hash = hash.replaceAll("\\s", "").toLowerCase(Locale.ENGLISH);
> +        this.propertyValue = "{" + algorithm + "}" + hash;
> +    }
> +
> +    public String getPropertyValue() {
> +        return propertyValue;
> +    }
> +
> +    public String getAlgorithm() {
> +        return algorithm;
> +    }
> +
> +    public String getHash() {
> +        return hash;
> +    }
> +
> +    /**
> +     * Creates a list of content hashes from a stream
> +     * <p>
> +     * This method consumes the stream but doesn't close it.
> +     *
> +     * @param stream
> +     *            the stream
> +     * @param algorithm
> +     *            the algorithms
> +     * @return the list of content hashes
> +     */
> +    public static List<ContentStreamHash> createContentHashes(InputStream stream,
String... algorithm)
> +            throws IOException, NoSuchAlgorithmException {
> +        if (stream == null) {
> +            throw new IllegalArgumentException("Stream must be set!");
> +        }
> +
> +        if (algorithm == null || algorithm.length == 0) {
> +            throw new IllegalArgumentException("Algorithm must be set!");
> +        }
> +
> +        MessageDigest[] md = new MessageDigest[algorithm.length];
> +        for (int i = 0; i < algorithm.length; i++) {
> +            md[i] = MessageDigest.getInstance(algorithm[i]);
> +        }
> +
> +        int b;
> +        byte[] buffer = new byte[64 * 1024];
> +        while ((b = stream.read(buffer)) > -1) {
> +            for (int j = 0; j < md.length; j++) {
> +                md[j].update(buffer, 0, b);
> +            }
> +        }
> +
> +        List<ContentStreamHash> result = new ArrayList<ContentStreamHash>();
> +
> +        for (int i = 0; i < md.length; i++) {
> +            result.add(new ContentStreamHashImpl(algorithm[i], byteArrayToHexString(md[i].digest())));
> +        }
> +
> +        return result;
> +    }
> +
> +    protected static String byteArrayToHexString(byte[] bytes) {
> +        int n = bytes.length;
> +        char[] hashHex = new char[n * 2];
> +        for (int i = 0; i < n; i++) {
> +            hashHex[i * 2] = HEX_DIGITS[(0xF0 & bytes[i]) >>> 4];
> +            hashHex[i * 2 + 1] = HEX_DIGITS[0x0F & bytes[i]];
> +        }
> +
> +        return new String(hashHex);
> +    }
> +}
>
> Propchange: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/main/java/org/apache/chemistry/opencmis/commons/impl/dataobjects/ContentStreamHashImpl.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
> Added: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java
> URL: http://svn.apache.org/viewvc/chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java?rev=1580826&view=auto
> ==============================================================================
> --- chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java
(added)
> +++ chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java
Mon Mar 24 12:49:00 2014
> @@ -0,0 +1,147 @@
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one
> + * or more contributor license agreements.  See the NOTICE file
> + * distributed with this work for additional information
> + * regarding copyright ownership.  The ASF licenses this file
> + * to you under the Apache License, Version 2.0 (the
> + * "License"); you may not use this file except in compliance
> + * with the License.  You may obtain a copy of the License at
> + *
> + * http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing,
> + * software distributed under the License is distributed on an
> + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> + * KIND, either express or implied.  See the License for the
> + * specific language governing permissions and limitations
> + * under the License.
> + */
> +package org.apache.chemistry.opencmis.commons.impl.misc;
> +
> +import static org.junit.Assert.assertEquals;
> +import static org.junit.Assert.assertNotNull;
> +
> +import java.io.ByteArrayInputStream;
> +import java.util.List;
> +
> +import org.apache.chemistry.opencmis.commons.data.ContentStreamHash;
> +import org.apache.chemistry.opencmis.commons.impl.IOUtils;
> +import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamHashImpl;
> +import org.junit.Test;
> +
> +public class ContentStreamHashTest {
> +
> +    @Test
> +    public void testHash() throws Exception {
> +        ContentStreamHashImpl hash1 = new ContentStreamHashImpl("{alg}0123456789abcdef");
> +        ContentStreamHashImpl hash2 = new ContentStreamHashImpl("alg", "0123456789abcdef");
> +
> +        assertEquals("alg", hash1.getAlgorithm());
> +        assertEquals("0123456789abcdef", hash1.getHash());
> +
> +        assertEquals(hash1.getPropertyValue(), hash2.getPropertyValue());
> +        assertEquals(hash2.getAlgorithm(), hash2.getAlgorithm());
> +        assertEquals(hash2.getHash(), hash2.getHash());
> +    }
> +
> +    @Test
> +    public void testHashCorrected() throws Exception {
> +        ContentStreamHashImpl hash1 = new ContentStreamHashImpl("{alg} 01 23 45 67 89
AB CD EF ");
> +        ContentStreamHashImpl hash2 = new ContentStreamHashImpl("ALG", "0123 4567 89ab
cdef");
> +
> +        assertEquals("alg", hash1.getAlgorithm());
> +        assertEquals("0123456789abcdef", hash1.getHash());
> +
> +        assertEquals(hash2.getAlgorithm(), hash2.getAlgorithm());
> +        assertEquals(hash2.getHash(), hash2.getHash());
> +    }
> +
> +    @Test
> +    public void testHashStreamMD5() throws Exception {
> +        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
> +        ByteArrayInputStream stream = new ByteArrayInputStream(content);
> +
> +        ContentStreamHash hash = ContentStreamHashImpl.createContentHashes(stream, ContentStreamHashImpl.ALGORITHM_MD5)
> +                .get(0);
> +
> +        assertEquals(ContentStreamHashImpl.ALGORITHM_MD5, hash.getAlgorithm());
> +        assertEquals("ed076287532e86365e841e92bfc50d8c", hash.getHash());
> +        assertEquals("{md5}ed076287532e86365e841e92bfc50d8c", hash.getPropertyValue());
> +
> +        stream.close();
> +    }
> +
> +    @Test
> +    public void testHashStreamSHA1() throws Exception {
> +        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
> +        ByteArrayInputStream stream = new ByteArrayInputStream(content);
> +
> +        ContentStreamHash hash = ContentStreamHashImpl
> +                .createContentHashes(stream, ContentStreamHashImpl.ALGORITHM_SHA1).get(0);
> +
> +        assertEquals(ContentStreamHashImpl.ALGORITHM_SHA1, hash.getAlgorithm());
> +        assertEquals("2ef7bde608ce5404e97d5f042f95f89f1c232871", hash.getHash());
> +        assertEquals("{sha-1}2ef7bde608ce5404e97d5f042f95f89f1c232871", hash.getPropertyValue());
> +
> +        stream.close();
> +    }
> +
> +    @Test
> +    public void testHashStreamSHA256() throws Exception {
> +        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
> +        ByteArrayInputStream stream = new ByteArrayInputStream(content);
> +
> +        ContentStreamHash hash = ContentStreamHashImpl.createContentHashes(stream,
> +                ContentStreamHashImpl.ALGORITHM_SHA256).get(0);
> +
> +        assertEquals(ContentStreamHashImpl.ALGORITHM_SHA256, hash.getAlgorithm());
> +        assertEquals("7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069",
hash.getHash());
> +        assertEquals("{sha-256}7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069",
> +                hash.getPropertyValue());
> +
> +        stream.close();
> +    }
> +
> +    @Test
> +    public void testHashStreamSHA512() throws Exception {
> +        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
> +        ByteArrayInputStream stream = new ByteArrayInputStream(content);
> +
> +        ContentStreamHash hash = ContentStreamHashImpl.createContentHashes(stream,
> +                ContentStreamHashImpl.ALGORITHM_SHA512).get(0);
> +
> +        assertEquals(ContentStreamHashImpl.ALGORITHM_SHA512, hash.getAlgorithm());
> +        assertEquals(
> +                "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
> +                hash.getHash());
> +        assertEquals(
> +                "{sha-512}"
> +                        + "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
> +                hash.getPropertyValue());
> +
> +        stream.close();
> +    }
> +
> +    @Test
> +    public void testHashStreams() throws Exception {
> +        byte[] content = IOUtils.toUTF8Bytes("Hello World!");
> +        ByteArrayInputStream stream = new ByteArrayInputStream(content);
> +
> +        List<ContentStreamHash> hashes = ContentStreamHashImpl.createContentHashes(stream,
> +                ContentStreamHashImpl.ALGORITHM_SHA1, ContentStreamHashImpl.ALGORITHM_SHA256,
> +                ContentStreamHashImpl.ALGORITHM_SHA512);
> +
> +        assertNotNull(hashes);
> +        assertEquals(3, hashes.size());
> +
> +        assertEquals("{sha-1}2ef7bde608ce5404e97d5f042f95f89f1c232871", hashes.get(0).getPropertyValue());
> +        assertEquals("{sha-256}7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069",
hashes.get(1)
> +                .getPropertyValue());
> +        assertEquals(
> +                "{sha-512}"
> +                        + "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8",
> +                hashes.get(2).getPropertyValue());
> +
> +        stream.close();
> +    }
> +}
>
> Propchange: chemistry/opencmis/trunk/chemistry-opencmis-commons/chemistry-opencmis-commons-impl/src/test/java/org/apache/chemistry/opencmis/commons/impl/misc/ContentStreamHashTest.java
> ------------------------------------------------------------------------------
>     svn:eol-style = native
>
>



-- 
Florent Guillaume, Director of R&D, Nuxeo
Open Source Content Management Platform for Business Apps
http://www.nuxeo.com   http://community.nuxeo.com

Mime
View raw message