Author: rwesten
Date: Thu Aug 29 10:00:31 2013
New Revision: 1518562
URL: http://svn.apache.org/r1518562
Log:
fixes STANBOL-1150
Modified:
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/util/ManagementUtils.java
Modified:
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/util/ManagementUtils.java
URL:
http://svn.apache.org/viewvc/stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/util/ManagementUtils.java?rev=1518562&r1=1518561&r2=1518562&view=diff
==============================================================================
---
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/util/ManagementUtils.java
(original)
+++
stanbol/trunk/commons/solr/managed/src/main/java/org/apache/stanbol/commons/solr/managed/util/ManagementUtils.java
Thu Aug 29 10:00:31 2013
@@ -23,6 +23,10 @@ import java.io.InputStream;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
+import org.apache.commons.compress.compressors.CompressorException;
+import org.apache.commons.compress.compressors.CompressorStreamFactory;
+import org.apache.commons.compress.compressors.FileNameUtil;
+import org.apache.commons.io.FilenameUtils;
import org.apache.solr.core.SolrCore;
import org.apache.stanbol.commons.solr.SolrConstants;
import org.apache.stanbol.commons.solr.managed.IndexMetadata;
@@ -90,6 +94,10 @@ public class ManagementUtils {
*/
public static final ArchiveStreamFactory archiveStreamFactory = new
ArchiveStreamFactory();
/**
+ * An instance of the compressor stream factory
+ */
+ public static final CompressorStreamFactory compressorStreamFactory = new
CompressorStreamFactory();
+ /**
* Tries to create an {@link ArchiveInputStream} based on the parsed
{@link InputStream}.
* First the provided resource name is used to detect the type of the
archive.
* if that does not work, or the parsed resource name is <code>null</code>
the
@@ -104,14 +112,38 @@ public class ManagementUtils {
if(is == null){
return null;
}
- if(resourceName != null){
+ String extension = resourceName == null ? null :
+ FilenameUtils.getExtension(resourceName);
+ if(!is.markSupported()){
+ is = new BufferedInputStream(is);
+ }
+ InputStream as;
+ if(!"zip".equalsIgnoreCase(extension)){ //if not a zip file (the
default)
+ //we need to first check if this is a compressed stream
+ try {
+ as =
compressorStreamFactory.createCompressorInputStream(extension,is);
+ extension = "tar"; // assume tar archives
+ } catch (CompressorException e) {
+ try {
+ as =
compressorStreamFactory.createCompressorInputStream(is);
+ extension = "tar"; // assume tar archives
+ } catch (CompressorException e1) {
+ //not a compression stream?
+ as = is;
+ }
+ }
+ } else { //zip ... this is already an archive stream
+ as = is;
+ }
+ if(extension != null){
try {
- return
archiveStreamFactory.createArchiveInputStream(resourceName, is);
+ return
archiveStreamFactory.createArchiveInputStream(extension, as);
} catch (ArchiveException e) {
//ignore
}
}
- return archiveStreamFactory.createArchiveInputStream(new
BufferedInputStream(is));
+ //try to detect
+ return archiveStreamFactory.createArchiveInputStream(is);
}
/**
* Getter for the name of the index within the current