You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2011/04/13 18:47:27 UTC
svn commit: r1091847 - in /jackrabbit/sandbox/jcrutil: pom.xml
src/main/java/org/jcrutil/JcrFileObject.java
src/main/java/org/jcrutil/S3DataStore.java
src/test/java/org/jcrutil/S3DataStoreTest.java
Author: jukka
Date: Wed Apr 13 16:47:27 2011
New Revision: 1091847
URL: http://svn.apache.org/viewvc?rev=1091847&view=rev
Log:
JCR-2805: Jackrabbit Utilites upgrade to Jackrabbit 2.1.0
Patch by James Smitley.
Modified:
jackrabbit/sandbox/jcrutil/pom.xml
jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/JcrFileObject.java
jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/S3DataStore.java
jackrabbit/sandbox/jcrutil/src/test/java/org/jcrutil/S3DataStoreTest.java
Modified: jackrabbit/sandbox/jcrutil/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrutil/pom.xml?rev=1091847&r1=1091846&r2=1091847&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrutil/pom.xml (original)
+++ jackrabbit/sandbox/jcrutil/pom.xml Wed Apr 13 16:47:27 2011
@@ -6,7 +6,7 @@
<groupId>org.jcrutil</groupId>
<artifactId>jcrutil</artifactId>
<packaging>jar</packaging>
- <version>1.0-SNAPSHOT</version>
+ <version>1.1-SNAPSHOT</version>
<name>jcrutil</name>
<repositories>
@@ -60,7 +60,7 @@
<dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
- <version>1.0</version>
+ <version>2.0</version>
</dependency>
<dependency>
<groupId>commons-vfs</groupId>
@@ -70,7 +70,7 @@
<dependency>
<groupId>net.java.dev.jets3t</groupId>
<artifactId>jets3t</artifactId>
- <version>0.6.1</version>
+ <version>0.7.3</version>
</dependency>
<dependency>
<groupId>net.sf.ehcache</groupId>
@@ -80,37 +80,32 @@
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-api</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-core</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-jcr-commons</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-spi</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-spi-commons</artifactId>
- <version>1.5-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>org.apache.jackrabbit</groupId>
- <artifactId>jackrabbit-text-extractors</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>2.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-jcr-server</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>2.1.0</version>
</dependency>
</dependencies>
</project>
Modified: jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/JcrFileObject.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/JcrFileObject.java?rev=1091847&r1=1091846&r2=1091847&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/JcrFileObject.java (original)
+++ jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/JcrFileObject.java Wed Apr 13 16:47:27 2011
@@ -19,9 +19,12 @@ import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.Privilege;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.commons.vfs.FileContent;
import org.apache.commons.vfs.FileObject;
import org.apache.commons.vfs.FileSystemException;
import org.apache.commons.vfs.FileType;
@@ -29,11 +32,10 @@ import org.apache.commons.vfs.provider.A
import org.apache.commons.vfs.provider.GenericFileName;
import org.apache.commons.vfs.provider.URLFileName;
import org.apache.commons.vfs.util.MonitorOutputStream;
-import org.apache.jackrabbit.api.jsr283.security.AccessControlManager;
-import org.apache.jackrabbit.api.jsr283.security.Privilege;
import org.apache.jackrabbit.core.SessionImpl;
import org.apache.jackrabbit.core.security.authorization.PrivilegeRegistry;
-import org.apache.jackrabbit.server.io.MimeResolver;
+import org.apache.tika.config.TikaConfig;
+import org.apache.tika.mime.MimeTypes;
/**
* A JCR base FileObject for VFS
@@ -44,8 +46,8 @@ public class JcrFileObject extends Abstr
/** The Log */
private static Log log = LogFactory.getLog(JcrFileObject.class);
- /** The MimeResolver */
- private static MimeResolver MIME_RESOLVER = new MimeResolver();
+ /** The MimeTypes */
+ private static MimeTypes MIME_TYPES = TikaConfig.getDefaultConfig().getMimeRepository();
/** The FileSystem */
private JcrFileSystem jcrFs;
@@ -56,7 +58,7 @@ public class JcrFileObject extends Abstr
/** The Node represented by this FileObject */
private Node node;
- /**
+ /**
* Create a new FileObject
*
* @param node
@@ -294,7 +296,8 @@ public class JcrFileObject extends Abstr
SessionImpl sess = (SessionImpl) jcrFs.getSession();
AccessControlManager acm = sess.getAccessControlManager();
PrivilegeRegistry pr = new PrivilegeRegistry(sess);
- return acm.hasPrivileges(getName().getPath(), pr.getPrivileges(PrivilegeRegistry.READ));
+ Privilege[] privilegeArray = new Privilege[] { pr.getPrivilege(Privilege.JCR_READ) };
+ return acm.hasPrivileges(getName().getPath(), privilegeArray);
}
/**
@@ -306,7 +309,8 @@ public class JcrFileObject extends Abstr
SessionImpl sess = (SessionImpl) jcrFs.getSession();
AccessControlManager acm = sess.getAccessControlManager();
PrivilegeRegistry pr = new PrivilegeRegistry(sess);
- return acm.hasPrivileges(getName().getPath(), pr.getPrivileges(PrivilegeRegistry.WRITE));
+ Privilege[] privilegeArray = new Privilege[] { pr.getPrivilege(Privilege.JCR_WRITE) };
+ return acm.hasPrivileges(getName().getPath(), privilegeArray);
}
// get/set
@@ -387,7 +391,7 @@ public class JcrFileObject extends Abstr
}
Calendar lastModified = Calendar.getInstance();
- resNode.setProperty("jcr:mimeType", MIME_RESOLVER.getMimeType(getName().getBaseName()));
+ resNode.setProperty("jcr:mimeType", getMimeType());
resNode.setProperty("jcr:data", new BufferedInputStream(tmpFile.getContent().getInputStream()));
resNode.setProperty("jcr:lastModified", lastModified);
jcrFs.getSession().save();
@@ -399,6 +403,26 @@ public class JcrFileObject extends Abstr
tmpFile.delete();
}
}
+
+ private String getMimeType() throws IOException {
+ String mimeType = null;
+ InputStream contentInputStream = null;
+
+ try {
+ contentInputStream = tmpFile.getContent().getInputStream();
+ mimeType = MIME_TYPES.getMimeType(getName().getBaseName(), contentInputStream).toString();
+ } finally {
+ if (mimeType == null) {
+ mimeType = MIME_TYPES.getMimeType(getName().getBaseName()).toString();
+ }
+
+ if (contentInputStream != null) {
+ contentInputStream.close();
+ }
+ }
+
+ return mimeType;
+ }
}
}
Modified: jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/S3DataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/S3DataStore.java?rev=1091847&r1=1091846&r2=1091847&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/S3DataStore.java (original)
+++ jackrabbit/sandbox/jcrutil/src/main/java/org/jcrutil/S3DataStore.java Wed Apr 13 16:47:27 2011
@@ -38,28 +38,44 @@ import org.jets3t.service.security.AWSCr
import org.jets3t.service.utils.Mimetypes;
public class S3DataStore implements DataStore {
- /** The Log */
+ /**
+ * The Log
+ */
private static Log LOG = LogFactory.getLog(S3DataStore.class);
- /** Cached credentials */
+ /**
+ * Cached credentials
+ */
protected AWSCredentials awsCredentials;
- /** Config parameter awsAccessKey */
+ /**
+ * Config parameter awsAccessKey
+ */
protected String awsAccessKey;
- /** Config parameter awsSecretKey */
+ /**
+ * Config parameter awsSecretKey
+ */
protected String awsSecretKey;
- /** Config parameter bucketName */
+ /**
+ * Config parameter bucketName
+ */
protected String bucketName;
- /** Config parameter minModifiedDate */
+ /**
+ * Config parameter minModifiedDate
+ */
protected long minModifiedDate;
- /** Config parameter minRecordLength */
+ /**
+ * Config parameter minRecordLength
+ */
protected int minRecordLength;
- /** The S3Service */
+ /**
+ * The S3Service
+ */
private S3Service s3Service;
/** S3Object cache */
@@ -92,7 +108,7 @@ public class S3DataStore implements Data
File tmp = File.createTempFile("s3-", ".tmp");
tmp.deleteOnExit();
-
+
InputStream in = new BufferedInputStream(stream, 4096);
OutputStream out = new BufferedOutputStream(new FileOutputStream(tmp), 4096);
int i = 0;
@@ -100,21 +116,21 @@ public class S3DataStore implements Data
while ((i = in.read(buf)) != -1) {
out.write(buf, 0, i);
}
-
+
out.close();
-
+
Cache s3oContentCache = CacheManager.getInstance().getCache("s3oContentCache");
s3oContentCache.put(new Element(uuid, tmp.getAbsolutePath()));
-
+
S3DataTransfer dt = new S3DataTransfer(s3Service, bucketName, uuid, tmp);
new Thread(dt).start();
-
+
S3Bucket s3b = new S3Bucket(bucketName);
s3o = new S3Object(s3b, uuid);
s3o.setContentLength(tmp.length());
s3o.setLastModifiedDate(new Date(tmp.lastModified()));
s3o.setContentType(Mimetypes.getInstance().getMimetype(tmp));
-
+
Cache s3oCache = CacheManager.getInstance().getCache("s3oCache");
s3oCache.put(new Element(uuid, s3o));
@@ -176,28 +192,27 @@ public class S3DataStore implements Data
return minRecordLength;
}
- /**
- * {@inheritDoc}
- */
- public DataRecord getRecord(DataIdentifier identifier) throws DataStoreException {
- LOG.debug("getRecord: " + identifier);
+ private S3DataRecord getS3DataRecord(DataIdentifier dataIdentifier, boolean checkExistence) throws S3ServiceException {
+ S3DataRecord s3DataRecord = null;
- try {
- String ident = identifier.toString();
- Cache s3oCache = CacheManager.getInstance().getCache("s3oCache");
- Element elem = s3oCache.get(ident);
+ String ident = dataIdentifier.toString();
+ Cache s3oCache = CacheManager.getInstance().getCache("s3oCache");
+ Element elem = s3oCache.get(ident);
- S3Object s3o = null;
- if (elem != null) {
- LOG.debug("getRecord cache hit: " + ident);
- s3o = (S3Object) elem.getValue();
- } else {
- LOG.debug("getRecord adding to cache: " + ident);
+ S3Object s3o = null;
+ if (elem != null) {
+ LOG.debug("getS3Object cache hit: " + ident);
+ s3o = (S3Object) elem.getValue();
+ } else {
+ LOG.debug("getS3Object adding to cache: " + ident);
+ if (!checkExistence || s3Service.isObjectInBucket(bucketName, ident)) {
s3o = s3Service.getObjectDetails(new S3Bucket(bucketName), ident);
- s3oCache.put(new Element(ident, s3o));
}
+ s3oCache.put(new Element(ident, s3o));
+ }
- usesIdentifier(identifier);
+ if (s3o != null) {
+ usesIdentifier(dataIdentifier);
if (minModifiedDate > 0) {
Date lmd = s3o.getLastModifiedDate();
@@ -208,15 +223,36 @@ public class S3DataStore implements Data
}
}
- return new S3DataRecord(this, identifier, s3o);
- } catch (S3ServiceException se) {
- throw new DataStoreException(se);
+ s3DataRecord = new S3DataRecord(this, dataIdentifier, s3o);
+ }
+
+ return s3DataRecord;
+ }
+
+ public DataRecord getRecordIfStored(DataIdentifier identifier) throws DataStoreException {
+ LOG.debug("getRecordIfStored: " + identifier);
+ try {
+ return getS3DataRecord(identifier, true);
+ } catch (S3ServiceException e) {
+ throw new DataStoreException(e);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public DataRecord getRecord(DataIdentifier identifier) throws DataStoreException {
+ LOG.debug("getRecord: " + identifier);
+ try {
+ return getS3DataRecord(identifier, false);
+ } catch (S3ServiceException e) {
+ throw new DataStoreException(e);
}
}
/**
* Delete data record
- *
+ *
* @param identifier The DataIdentifier
*/
public void deleteRecord(DataIdentifier identifier) throws DataStoreException {
@@ -262,7 +298,7 @@ public class S3DataStore implements Data
/**
* Add WeakReference to inUse Map
- *
+ *
* @param identifier The DataIdentifier
*/
private void usesIdentifier(DataIdentifier identifier) {
Modified: jackrabbit/sandbox/jcrutil/src/test/java/org/jcrutil/S3DataStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/sandbox/jcrutil/src/test/java/org/jcrutil/S3DataStoreTest.java?rev=1091847&r1=1091846&r2=1091847&view=diff
==============================================================================
--- jackrabbit/sandbox/jcrutil/src/test/java/org/jcrutil/S3DataStoreTest.java (original)
+++ jackrabbit/sandbox/jcrutil/src/test/java/org/jcrutil/S3DataStoreTest.java Wed Apr 13 16:47:27 2011
@@ -25,7 +25,7 @@ public class S3DataStoreTest extends Tes
try {
Node root = session.getRootNode();
-
+
// Store content
Node node1 = root.addNode("node1");
Node node2 = root.addNode("node2");