Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
More improvements to the implementation of LowLevelStorageService
  • Loading branch information
ajs6f committed Mar 12, 2013
1 parent d15d16b commit d8739c1
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 48 deletions.
Expand Up @@ -2,8 +2,8 @@
package org.fcrepo.services;

import static com.google.common.collect.ImmutableMap.builder;
import static com.google.common.collect.Maps.transformEntries;
import static java.lang.Boolean.FALSE;
import static com.google.common.collect.Maps.filterEntries;
import static org.apache.commons.codec.binary.Hex.encodeHexString;
import static org.modeshape.jcr.api.JcrConstants.JCR_CONTENT;
import static org.modeshape.jcr.api.JcrConstants.JCR_DATA;

Expand All @@ -23,7 +23,6 @@
import javax.jcr.RepositoryException;
import javax.jcr.Session;

import org.apache.commons.codec.binary.Hex;
import org.fcrepo.utils.LowLevelCacheStore;
import org.infinispan.Cache;
import org.infinispan.loaders.CacheLoaderManager;
Expand All @@ -38,8 +37,8 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;

public class LowLevelStorageService {

Expand All @@ -60,48 +59,39 @@ private static JcrRepository getRepositoryInstance() {
return (JcrRepository) readOnlySession.getRepository();
}

public static Map<LowLevelCacheStore, Boolean> applyDigestToBlobs(
public static Map<LowLevelCacheStore, InputStream> applyDigestToBlobs(
final Node resource, final MessageDigest digest,
final String checksum) throws RepositoryException {
return applyToBlob(
resource,
new Maps.EntryTransformer<LowLevelCacheStore, InputStream, Boolean>() {
logger.debug("Checking resource: " + resource.getPath());
return filterEntries(getBlobs(resource),
new Predicate<Map.Entry<LowLevelCacheStore, InputStream>>() {

@Override
public boolean apply(
Map.Entry<LowLevelCacheStore, InputStream> entry) {

public Boolean transformEntry(LowLevelCacheStore store,
InputStream is) {
DigestInputStream ds = null;
try {
ds =
new DigestInputStream(is,
final DigestInputStream ds =
new DigestInputStream(entry.getValue(),
(MessageDigest) digest.clone());

while (ds.read() != -1);

String calculatedDigest =
Hex.encodeHexString(ds.getMessageDigest()
encodeHexString(ds.getMessageDigest()
.digest());

return checksum.equals(calculatedDigest);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
throw new IllegalStateException(e);
}

return FALSE;
return false;
}
});

}
});

public static
<T>
Map<LowLevelCacheStore, T>
applyToBlob(
final Node resource,
final Maps.EntryTransformer<LowLevelCacheStore, InputStream, T> transform)
throws RepositoryException {
return transformEntries(getBlobs(resource), transform);
}

/**
Expand Down
@@ -1,5 +1,23 @@
package org.fcrepo.services;

import static java.security.MessageDigest.getInstance;
import static org.fcrepo.services.DatastreamService.createDatastreamNode;
import static org.fcrepo.services.DatastreamService.getDatastream;
import static org.fcrepo.services.LowLevelStorageService.applyDigestToBlobs;
import static org.fcrepo.services.LowLevelStorageService.getBlobs;
import static org.fcrepo.services.ObjectService.createObjectNode;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;

import javax.inject.Inject;
import javax.jcr.Repository;
import javax.jcr.Session;

import org.apache.commons.io.IOUtils;
import org.fcrepo.Datastream;
import org.fcrepo.utils.LowLevelCacheStore;
Expand All @@ -8,21 +26,6 @@
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.inject.Inject;
import javax.jcr.Repository;
import javax.jcr.Session;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;

import static org.fcrepo.services.DatastreamService.createDatastreamNode;
import static org.fcrepo.services.DatastreamService.getDatastream;
import static org.fcrepo.services.ObjectService.createObjectNode;
import static org.fcrepo.services.LowLevelStorageService.getBlobs;
import static org.junit.Assert.*;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"/spring-test/repo.xml"})
Expand All @@ -46,15 +49,11 @@ public void testChecksumBlobs() throws Exception {

final Datastream ds = getDatastream("testObject", "testRepositoryContent");

final Map<LowLevelCacheStore,Boolean> booleanMap = LowLevelStorageService.applyDigestToBlobs(ds.getNode(), MessageDigest.getInstance("SHA-1"), "87acec17cd9dcd20a716cc2cf67417b71c8a7016");
final Map<LowLevelCacheStore, InputStream> booleanMap =
applyDigestToBlobs(ds.getNode(), getInstance("SHA-1"), "87acec17cd9dcd20a716cc2cf67417b71c8a7016");

assertNotEquals(0, booleanMap.size());

Iterator<Boolean> it = booleanMap.values().iterator();

while(it.hasNext()) {
assertTrue(it.next());
}
}

@Test
Expand Down

0 comments on commit d8739c1

Please sign in to comment.