Skip to content

Commit

Permalink
Finished fcrepo-kernel
Browse files Browse the repository at this point in the history
  • Loading branch information
ajs6f committed Feb 15, 2013
1 parent ff2ea5d commit 9f9c300
Show file tree
Hide file tree
Showing 9 changed files with 161 additions and 139 deletions.
25 changes: 10 additions & 15 deletions fcrepo-kernel/pom.xml
Expand Up @@ -20,26 +20,26 @@
<groupId>org.modeshape</groupId>
<artifactId>modeshape-jcr</artifactId>
</dependency>

<dependency>
<groupId>org.infinispan</groupId>
<artifactId>infinispan-core</artifactId>
</dependency>

<dependency>
<groupId>org.jgroups</groupId>
<artifactId>jgroups</artifactId>
</dependency>

<dependency>
<groupId>org.modeshape</groupId>
<artifactId>modeshape-jcr-api</artifactId>
</dependency>

<dependency>
<groupId>org.jboss.jbossts</groupId>
<artifactId>jbossjta</artifactId>
</dependency>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
</dependency>

<!-- Logging: we'll use LogBack (which implements the SLF4J API); ModeShape
knows what to do. -->
Expand All @@ -52,26 +52,21 @@
<artifactId>javax.inject</artifactId>
</dependency>
<dependency>
<!-- spring-test (v. 3.2.0-RELEASE) currently depends on commons-logging -->
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<!-- test gear -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam-container-openwebbeans</artifactId>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam-junit4</artifactId>
</dependency>
</dependencies>

Expand Down
@@ -1,4 +1,4 @@
package org.fcrepo.spring;
package org.fcrepo.jcr;

import java.lang.annotation.RetentionPolicy;

Expand Down
@@ -0,0 +1,44 @@

package org.fcrepo.jcr;

import java.net.URL;
import java.util.Collections;

import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.jcr.RepositoryException;

import org.modeshape.jcr.JcrRepository;
import org.modeshape.jcr.JcrRepositoryFactory;
import org.modeshape.jcr.api.RepositoryFactory;

public class ModeShapeRepositoryFactoryBean {

@Inject
private JcrRepositoryFactory jcrRepositoryFactory;

@Inject
@ModeShapeRepositoryConfiguration
private URL repositoryConfiguration;

private JcrRepository repository;

@PostConstruct
public void buildRepository() {
try {
repository =
(JcrRepository) jcrRepositoryFactory
.getRepository(Collections.singletonMap(
RepositoryFactory.URL,
repositoryConfiguration));
} catch (RepositoryException e) {
throw new IllegalStateException(e);
}
}

public JcrRepository getRepository() {
if (repository == null) buildRepository();
return repository;
}

}
82 changes: 44 additions & 38 deletions fcrepo-kernel/src/main/java/org/fcrepo/observer/SimpleObserver.java
@@ -1,3 +1,4 @@

package org.fcrepo.observer;

import static com.google.common.collect.Collections2.filter;
Expand All @@ -19,43 +20,48 @@

public class SimpleObserver implements EventListener {

final private Integer eventTypes = Event.NODE_ADDED + Event.NODE_REMOVED
+ Event.NODE_MOVED + Event.PROPERTY_ADDED + Event.PROPERTY_CHANGED
+ Event.PROPERTY_REMOVED;

@Inject
private Repository repository;

@Inject
private EventBus eventBus;

@Inject
private EventFilter eventFilter;

final private Logger logger = LoggerFactory.getLogger(SimpleObserver.class);

@PostConstruct
public void buildListener() throws RepositoryException {
Session session = repository.login();
session.getWorkspace()
.getObservationManager()
.addEventListener(this, eventTypes, "/", true, null, null,
false);
session.save();
session.logout();
}

// it's okay to suppress type-safety warning here,
// because we know that EventIterator only produces
// Events, like an Iterator<Event>
@SuppressWarnings("unchecked")
@Override
public void onEvent(EventIterator events) {
for (Event e : filter(new Builder<Event>().addAll(events).build(),
eventFilter)) {
logger.debug("Putting event: " + e.toString() + " on the bus.");
eventBus.post(e);
}
}
final private Integer eventTypes = Event.NODE_ADDED + Event.NODE_REMOVED +
Event.NODE_MOVED + Event.PROPERTY_ADDED + Event.PROPERTY_CHANGED +
Event.PROPERTY_REMOVED;

@Inject
private Repository repository;

@Inject
private EventBus eventBus;

@Inject
private EventFilter eventFilter;

private Session session;

final private Logger logger = LoggerFactory.getLogger(SimpleObserver.class);

@PostConstruct
public void buildListener() {
try {
session = repository.login();
session.getWorkspace().getObservationManager().addEventListener(
this, eventTypes, "/", true, null, null, false);
session.save();
session.logout();
} catch (RepositoryException e) {
throw new IllegalStateException(e);
}

}

// it's okay to suppress type-safety warning here,
// because we know that EventIterator only produces
// Events, like an Iterator<Event>
@SuppressWarnings("unchecked")
@Override
public void onEvent(EventIterator events) {
for (Event e : filter(new Builder<Event>().addAll(events).build(),
eventFilter)) {
logger.debug("Putting event: " + e.toString() + " on the bus.");
eventBus.post(e);
}
}

}

This file was deleted.

25 changes: 18 additions & 7 deletions fcrepo-kernel/src/test/java/org/fcrepo/AbstractTest.java
@@ -1,19 +1,30 @@

package org.fcrepo;

import static org.ops4j.pax.exam.CoreOptions.junitBundles;

import org.junit.Before;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.PaxExam;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@RunWith(PaxExam.class)
public abstract class AbstractTest {

protected Logger logger;
protected Logger logger;

@Before
public void setLogger() {
logger = LoggerFactory.getLogger(this.getClass());
}

@Before
public void setLogger() {
logger = LoggerFactory.getLogger(this.getClass());
}
@Configuration
public Option[] config() {
Option[] config = {junitBundles()};
return config;
}

}
Expand Up @@ -12,12 +12,10 @@
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;

import com.google.common.eventbus.EventBus;
import com.google.common.eventbus.Subscribe;

@ContextConfiguration({ "/spring-test/eventing.xml", "/spring-test/repo.xml" })
public class SimpleObserverTest extends AbstractTest {

private Integer eventBusMessageCount;
Expand Down
@@ -1,24 +1,23 @@

package org.fcrepo.services;

import org.apache.tika.io.IOUtils;
import org.fcrepo.AbstractTest;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;
import static org.jgroups.util.Util.assertEquals;
import static org.jgroups.util.Util.assertTrue;
import static org.modeshape.jcr.api.JcrConstants.JCR_CONTENT;
import static org.modeshape.jcr.api.JcrConstants.JCR_DATA;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.inject.Inject;
import javax.jcr.Node;
import javax.jcr.Repository;
import javax.jcr.Session;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

import static org.jgroups.util.Util.assertEquals;
import static org.jgroups.util.Util.assertTrue;
import static org.modeshape.jcr.api.JcrConstants.JCR_CONTENT;
import static org.modeshape.jcr.api.JcrConstants.JCR_DATA;

import org.apache.tika.io.IOUtils;
import org.fcrepo.AbstractTest;
import org.junit.Test;

@ContextConfiguration({ "/spring-test/repo.xml" })
public class DatastreamServiceTest extends AbstractTest {

@Inject
Expand All @@ -29,14 +28,17 @@ public void testCreateDatastreamNode() throws Exception {
Session session = repository.login();
InputStream is = new ByteArrayInputStream("asdf".getBytes());

Node n = new DatastreamService().createDatastreamNode(session, "testDatastreamNode", "application/octet-stream", is);
Node n =
new DatastreamService().createDatastreamNode(session,
"testDatastreamNode", "application/octet-stream", is);

session.save();

session = repository.login();

assertTrue(session.getRootNode().hasNode("testDatastreamNode"));
assertEquals("asdf", session.getNode("/testDatastreamNode").getNode(JCR_CONTENT).getProperty(JCR_DATA).getString());
assertEquals("asdf", session.getNode("/testDatastreamNode").getNode(
JCR_CONTENT).getProperty(JCR_DATA).getString());

}

Expand All @@ -45,13 +47,17 @@ public void testGetDatastreamContentInputStream() throws Exception {
Session session = repository.login();
InputStream is = new ByteArrayInputStream("asdf".getBytes());

Node n = new DatastreamService().createDatastreamNode(session, "testDatastreamNode", "application/octet-stream", is);
Node n =
new DatastreamService().createDatastreamNode(session,
"testDatastreamNode", "application/octet-stream", is);

session.save();

session = repository.login();

InputStream contentInputStream = new DatastreamService().getDatastreamContentInputStream(session, "/testDatastreamNode");
InputStream contentInputStream =
new DatastreamService().getDatastreamContentInputStream(
session, "/testDatastreamNode");

assertEquals("asdf", IOUtils.toString(contentInputStream, "UTF-8"));
}
Expand Down

0 comments on commit 9f9c300

Please sign in to comment.