Skip to content

Commit

Permalink
Minor code cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Jun 26, 2015
1 parent f13ca21 commit 6e6da97
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 154 deletions.
Expand Up @@ -15,7 +15,10 @@
*/
package org.fcrepo.connector.file;

import static java.nio.file.Files.deleteIfExists;

import org.fcrepo.kernel.exception.RepositoryRuntimeException;

import org.infinispan.schematic.Schematic;
import org.infinispan.schematic.document.Document;
import org.infinispan.schematic.document.EditableDocument;
Expand All @@ -41,12 +44,13 @@
*
* @author Mike Durbin
* @author acoburn
* @author ajs6f
*/
public class ExternalJsonSidecarExtraPropertyStore implements ExtraPropertiesStore {

private FedoraFileSystemConnector connector;
private final FedoraFileSystemConnector connector;

private File propertyStoreRoot;
private final File propertyStoreRoot;

private final DocumentTranslator translator;

Expand Down Expand Up @@ -87,7 +91,7 @@ protected File sidecarFile(final String id) {
}

/**
* This is a trivial reimplementation of the private modeshape implementation in
* This is a trivial reimplementation of the private Modeshape implementation in
* org.modeshape.connector.filesystem.JsonSidecarExtraPropertyStore
*
* See: https://github.com/ModeShape/modeshape/blob/modeshape-4.2.0.Final/modeshape-jcr/src/main/java/
Expand All @@ -98,12 +102,11 @@ protected File sidecarFile(final String id) {
*/
@Override
public boolean removeProperties(final String id) {
final File file = sidecarFile(id);
if (!file.exists()) {
return false;
try {
return deleteIfExists(sidecarFile(id).toPath());
} catch (final IOException e) {
throw new RepositoryRuntimeException(id, e);
}
file.delete();
return true;
}


Expand All @@ -123,12 +126,12 @@ public Map<Name, Property> getProperties(final String id) {
if (!sidecarFile.exists()) {
return Collections.emptyMap();
}
try {
final Document document = Json.read(new FileInputStream(sidecarFile), false);
final Map<Name, Property> results = new HashMap<Name, Property>();
try (final FileInputStream sidecarStream = new FileInputStream(sidecarFile)) {
final Document document = Json.read(sidecarStream, false);
final Map<Name, Property> results = new HashMap<>();
translator.getProperties(document, results);
return results;
} catch (IOException e) {
} catch (final IOException e) {
throw new RepositoryRuntimeException(id, e);
}
}
Expand All @@ -155,19 +158,23 @@ public void updateProperties(final String id, final Map<Name, Property> properti
sidecarFile.createNewFile();
document = Schematic.newDocument();
} else {
final Document existing = Json.read(new FileInputStream(sidecarFile), false);
document = Schematic.newDocument(existing);
try (final FileInputStream sidecarStream = new FileInputStream(sidecarFile)) {
final Document existing = Json.read(sidecarStream, false);
document = Schematic.newDocument(existing);
}
}
for (Map.Entry<Name, Property> entry : properties.entrySet()) {
for (final Map.Entry<Name, Property> entry : properties.entrySet()) {
final Property property = entry.getValue();
if (property == null) {
translator.removeProperty(document, entry.getKey(), null, null);
} else {
translator.setProperty(document, property, null, null);
}
}
Json.write(document, new FileOutputStream(sidecarFile));
} catch (IOException e) {
try (final FileOutputStream outputStream = new FileOutputStream(sidecarFile)) {
Json.write(document, outputStream);
}
} catch (final IOException e) {
throw new RepositoryRuntimeException(id, e);
}
}
Expand All @@ -193,14 +200,16 @@ public void storeProperties(final String id, final Map<Name, Property> propertie
sidecarFile.createNewFile();
}
final EditableDocument document = Schematic.newDocument();
for (Property property : properties.values()) {
for (final Property property : properties.values()) {
if (property == null) {
continue;
}
translator.setProperty(document, property, null, null);
}
Json.write(document, new FileOutputStream(sidecarFile));
} catch (IOException e) {
try (final FileOutputStream outputStream = new FileOutputStream(sidecarFile)) {
Json.write(document, outputStream);
}
} catch (final IOException e) {
throw new RepositoryRuntimeException(id, e);
}
}
Expand Down
Expand Up @@ -86,7 +86,7 @@ public void initialize(final NamespaceRegistry registry,
final NodeTypeManager nodeTypeManager) throws IOException {
try {
super.initialize(registry, nodeTypeManager);
} catch (RepositoryException e) {
} catch (final RepositoryException e) {
throw new RepositoryRuntimeException("Error initializing FedoraFileSystemConnector!", e);
}

Expand Down
Expand Up @@ -15,47 +15,51 @@
*/
package org.fcrepo.connector.file;

import org.apache.commons.io.FileUtils;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.modeshape.jcr.cache.document.DocumentTranslator;

import java.io.File;
import java.io.IOException;

import static java.nio.file.Files.createTempDirectory;
import static org.mockito.Mockito.mock;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.when;

/**
* @author Mike Durbin
*/
@RunWith(MockitoJUnitRunner.class)
public class ExternalJsonSidecarExtraPropertyStoreTest {

@Mock
private FedoraFileSystemConnector mockConnector;

@Mock
private DocumentTranslator mockTranslator;

private static final String FEDERATION_ROOT = "/federation-root";
private static final String FILE_PATH = "/federation-root/file";
@Test
public void testSidecarFile() throws IOException {
final File tmp = createTempDirectory("filesystem-federation").toFile();
try {
final FedoraFileSystemConnector mockConnector = mock(FedoraFileSystemConnector.class);
final DocumentTranslator mockTranslator = mock(DocumentTranslator.class);
when(mockConnector.fileFor("/")).thenReturn(new File(FEDERATION_ROOT));
when(mockConnector.isContentNode("/")).thenReturn(false);
when(mockConnector.isRoot("/")).thenReturn(true);
when(mockConnector.fileFor("/file")).thenReturn(new File(FILE_PATH));
when(mockConnector.isContentNode("/file")).thenReturn(false);
when(mockConnector.fileFor("/file/fcr:content")).thenReturn(new File(FILE_PATH));
when(mockConnector.isContentNode("/file/fcr:content")).thenReturn(true);

final ExternalJsonSidecarExtraPropertyStore store
= new ExternalJsonSidecarExtraPropertyStore(mockConnector, mockTranslator, tmp);
Assert.assertEquals(new File(tmp, "federation-root.modeshape.json"), store.sidecarFile("/"));
Assert.assertEquals(new File(tmp, "file.modeshape.json"), store.sidecarFile("/file"));
Assert.assertEquals(new File(tmp, "file.content.modeshape.json"), store.sidecarFile("/file/fcr:content"));
} finally {
FileUtils.deleteDirectory(tmp);
}
tmp.deleteOnExit();

when(mockConnector.fileFor("/")).thenReturn(new File(FEDERATION_ROOT));
when(mockConnector.isContentNode("/")).thenReturn(false);
when(mockConnector.isRoot("/")).thenReturn(true);
when(mockConnector.fileFor("/file")).thenReturn(new File(FILE_PATH));
when(mockConnector.isContentNode("/file")).thenReturn(false);
when(mockConnector.fileFor("/file/fcr:content")).thenReturn(new File(FILE_PATH));
when(mockConnector.isContentNode("/file/fcr:content")).thenReturn(true);

final ExternalJsonSidecarExtraPropertyStore store =
new ExternalJsonSidecarExtraPropertyStore(mockConnector, mockTranslator, tmp);
assertEquals(new File(tmp, "federation-root.modeshape.json"), store.sidecarFile("/"));
assertEquals(new File(tmp, "file.modeshape.json"), store.sidecarFile("/file"));
assertEquals(new File(tmp, "file.content.modeshape.json"), store.sidecarFile("/file/fcr:content"));
}

}
Expand Up @@ -30,7 +30,6 @@
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.modeshape.jcr.api.JcrConstants.JCR_DATA;
import static org.modeshape.jcr.api.JcrConstants.NT_FILE;
import static org.modeshape.jcr.api.JcrConstants.NT_RESOURCE;
Expand All @@ -45,11 +44,12 @@
import javax.jcr.NamespaceRegistry;

import org.infinispan.schematic.document.Document;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import org.modeshape.jcr.ExecutionContext;
import org.modeshape.jcr.api.nodetype.NodeTypeManager;
import org.modeshape.jcr.cache.document.DocumentTranslator;
Expand All @@ -67,6 +67,7 @@
* @author Andrew Woods
* Date: 2/3/14
*/
@RunWith(MockitoJUnitRunner.class)
public class FedoraFileSystemConnectorTest {

private FedoraFileSystemConnector connector;
Expand Down Expand Up @@ -100,7 +101,7 @@ public class FedoraFileSystemConnectorTest {
@Mock
private BinaryValue binaryValue;

private ExecutionContext mockContext = new ExecutionContext();
private final ExecutionContext mockContext = new ExecutionContext();

private static final Logger logger =
getLogger(FedoraFileSystemConnectorTest.class);
Expand All @@ -111,6 +112,7 @@ public static void beforeClass() throws IOException {
tmpFile =
createTempFile(directoryPath, "fedora-filesystemtestfile",
"txt").toFile();
tmpFile.deleteOnExit();
try (FileOutputStream outputStream = new FileOutputStream(tmpFile)) {
outputStream.write("hello".getBytes());
} catch (final IOException e) {
Expand All @@ -121,6 +123,7 @@ public static void beforeClass() throws IOException {
tmpFile2 =
createTempFile(directoryPath, "fedora-filesystemtestfile",
"txt").toFile();
tmpFile2.deleteOnExit();
try (FileOutputStream outputStream = new FileOutputStream(tmpFile2)) {
outputStream.write("goodbye".getBytes());
} catch (final IOException e) {
Expand All @@ -129,24 +132,8 @@ public static void beforeClass() throws IOException {
}
}

@AfterClass
public static void afterClass() {
try {
if ( tmpFile.exists() ) {
tmpFile.delete();
}
if ( tmpFile2.exists() ) {
tmpFile2.delete();
}
} catch (final Exception e) {
logger.error("Error deleting: " + tmpFile.getAbsolutePath()
+ " - " + e.getMessage());
}
}

@Before
public void setUp() throws Exception {
initMocks(this);
public void setUp() throws IOException {

connector = new FedoraFileSystemConnector();
setField(connector, "directoryPath", directoryPath.toString());
Expand All @@ -167,7 +154,7 @@ public void testGetDocumentByIdNull() {
}

@Test
public void testGetDocumentByIdDatastream() throws Exception {
public void testGetDocumentByIdDatastream() {
when(mockTranslator.getPrimaryTypeName(any(Document.class)))
.thenReturn(NT_FILE);
when(mockNameFactory.create(anyString())).thenReturn(
Expand All @@ -178,7 +165,7 @@ public void testGetDocumentByIdDatastream() throws Exception {
}

@Test
public void testGetDocumentByIdContent() throws Exception {
public void testGetDocumentByIdContent() {
when(mockTranslator.getPrimaryTypeName(any(Document.class)))
.thenReturn(NT_RESOURCE);
when(mockNameFactory.create(anyString())).thenReturn(
Expand Down

0 comments on commit 6e6da97

Please sign in to comment.