mirror of
https://github.com/apache/lucene.git
synced 2025-02-09 11:35:14 +00:00
Merge remote-tracking branch 'origin/branch_6x' into branch_6x
This commit is contained in:
commit
d3fcac779b
@ -7,6 +7,7 @@
|
|||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/resources" type="java-resource" />
|
<sourceFolder url="file://$MODULE_DIR$/src/resources" type="java-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/java" isTestSource="false" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/test" isTestSource="true" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
<specification.version>@spec.version@</specification.version>
|
<specification.version>@spec.version@</specification.version>
|
||||||
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
|
<maven.build.timestamp.format>yyyy-MM-dd HH:mm:ss</maven.build.timestamp.format>
|
||||||
<java.compat.version>8</java.compat.version>
|
<java.compat.version>8</java.compat.version>
|
||||||
<!-- HACK: the enforce and forbiddenapis plugin does not like new versioning: -->
|
<!-- HACK: the enforce plugin does not like new versioning: -->
|
||||||
<java.legacy-compat.version>1.${java.compat.version}</java.legacy-compat.version>
|
<java.legacy-compat.version>1.${java.compat.version}</java.legacy-compat.version>
|
||||||
<jetty.version>9.3.8.v20160314</jetty.version>
|
<jetty.version>9.3.8.v20160314</jetty.version>
|
||||||
|
|
||||||
@ -161,7 +161,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>de.thetaphi</groupId>
|
<groupId>de.thetaphi</groupId>
|
||||||
<artifactId>forbiddenapis</artifactId>
|
<artifactId>forbiddenapis</artifactId>
|
||||||
<version>2.1</version>
|
<version>2.2</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<!--
|
<!--
|
||||||
This is the default setting, we don't support too new Java versions.
|
This is the default setting, we don't support too new Java versions.
|
||||||
|
@ -124,8 +124,7 @@
|
|||||||
<bundledSignature>jdk-deprecated</bundledSignature>
|
<bundledSignature>jdk-deprecated</bundledSignature>
|
||||||
<bundledSignature>jdk-non-portable</bundledSignature>
|
<bundledSignature>jdk-non-portable</bundledSignature>
|
||||||
<bundledSignature>jdk-reflection</bundledSignature>
|
<bundledSignature>jdk-reflection</bundledSignature>
|
||||||
<!--TODO: fix this <bundledSignature>commons-io-unsafe-@commons-io:commons-io.version@</bundledSignature>-->
|
<bundledSignature>commons-io-unsafe-@commons-io:commons-io.version@</bundledSignature>
|
||||||
<bundledSignature>commons-io-unsafe-2.4</bundledSignature>
|
|
||||||
</bundledSignatures>
|
</bundledSignatures>
|
||||||
<signaturesFiles>
|
<signaturesFiles>
|
||||||
<signaturesFile>${top-level}/lucene/tools/forbiddenApis/base.txt</signaturesFile>
|
<signaturesFile>${top-level}/lucene/tools/forbiddenApis/base.txt</signaturesFile>
|
||||||
@ -147,8 +146,7 @@
|
|||||||
<bundledSignature>jdk-deprecated</bundledSignature>
|
<bundledSignature>jdk-deprecated</bundledSignature>
|
||||||
<bundledSignature>jdk-non-portable</bundledSignature>
|
<bundledSignature>jdk-non-portable</bundledSignature>
|
||||||
<bundledSignature>jdk-reflection</bundledSignature>
|
<bundledSignature>jdk-reflection</bundledSignature>
|
||||||
<!--TODO: fix this <bundledSignature>commons-io-unsafe-@commons-io:commons-io.version@</bundledSignature>-->
|
<bundledSignature>commons-io-unsafe-@commons-io:commons-io.version@</bundledSignature>
|
||||||
<bundledSignature>commons-io-unsafe-2.4</bundledSignature>
|
|
||||||
</bundledSignatures>
|
</bundledSignatures>
|
||||||
<signaturesFiles>
|
<signaturesFiles>
|
||||||
<signaturesFile>${top-level}/lucene/tools/forbiddenApis/base.txt</signaturesFile>
|
<signaturesFile>${top-level}/lucene/tools/forbiddenApis/base.txt</signaturesFile>
|
||||||
|
@ -15,6 +15,10 @@ New Features
|
|||||||
long "sequence number" indicating the effective equivalent
|
long "sequence number" indicating the effective equivalent
|
||||||
single-threaded execution order (Mike McCandless)
|
single-threaded execution order (Mike McCandless)
|
||||||
|
|
||||||
|
* LUCENE-7335: IndexWriter's commit data is now late binding,
|
||||||
|
recording key/values from a provided iterable based on when the
|
||||||
|
commit actually takes place (Mike McCandless)
|
||||||
|
|
||||||
Improvements
|
Improvements
|
||||||
|
|
||||||
* LUCENE-7323: Compound file writing now verifies the incoming
|
* LUCENE-7323: Compound file writing now verifies the incoming
|
||||||
@ -50,6 +54,9 @@ Other
|
|||||||
|
|
||||||
* LUCENE-7334: Update ASM dependency to 5.1. (Uwe Schindler)
|
* LUCENE-7334: Update ASM dependency to 5.1. (Uwe Schindler)
|
||||||
|
|
||||||
|
* LUCENE-7346: Update forbiddenapis to version 2.2.
|
||||||
|
(Uwe Schindler)
|
||||||
|
|
||||||
======================= Lucene 6.1.0 =======================
|
======================= Lucene 6.1.0 =======================
|
||||||
|
|
||||||
New Features
|
New Features
|
||||||
|
@ -241,7 +241,9 @@ public class TestBackwardsCompatibility extends LuceneTestCase {
|
|||||||
"6.0.0-cfs",
|
"6.0.0-cfs",
|
||||||
"6.0.0-nocfs",
|
"6.0.0-nocfs",
|
||||||
"6.0.1-cfs",
|
"6.0.1-cfs",
|
||||||
"6.0.1-nocfs"
|
"6.0.1-nocfs",
|
||||||
|
"6.1.0-cfs",
|
||||||
|
"6.1.0-nocfs"
|
||||||
};
|
};
|
||||||
|
|
||||||
final String[] unsupportedNames = {
|
final String[] unsupportedNames = {
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -51,7 +51,7 @@ public class CommitIndexTask extends PerfTask {
|
|||||||
IndexWriter iw = getRunData().getIndexWriter();
|
IndexWriter iw = getRunData().getIndexWriter();
|
||||||
if (iw != null) {
|
if (iw != null) {
|
||||||
if (commitUserData != null) {
|
if (commitUserData != null) {
|
||||||
iw.setCommitData(commitUserData);
|
iw.setLiveCommitData(commitUserData.entrySet());
|
||||||
}
|
}
|
||||||
iw.commit();
|
iw.commit();
|
||||||
}
|
}
|
||||||
|
@ -2330,7 +2330,7 @@ ${ant.project.name}.test.dependencies=${test.classpath.list}
|
|||||||
<property name="forbidden-sysout-excludes" value=""/>
|
<property name="forbidden-sysout-excludes" value=""/>
|
||||||
|
|
||||||
<target name="-install-forbidden-apis" unless="forbidden-apis.loaded" depends="ivy-availability-check,ivy-configure">
|
<target name="-install-forbidden-apis" unless="forbidden-apis.loaded" depends="ivy-availability-check,ivy-configure">
|
||||||
<ivy:cachepath organisation="de.thetaphi" module="forbiddenapis" revision="2.1"
|
<ivy:cachepath organisation="de.thetaphi" module="forbiddenapis" revision="2.2"
|
||||||
inline="true" conf="default" transitive="true" pathid="forbidden-apis.classpath"/>
|
inline="true" conf="default" transitive="true" pathid="forbidden-apis.classpath"/>
|
||||||
<taskdef name="forbidden-apis" classname="de.thetaphi.forbiddenapis.ant.AntTask" classpathref="forbidden-apis.classpath"/>
|
<taskdef name="forbidden-apis" classname="de.thetaphi.forbiddenapis.ant.AntTask" classpathref="forbidden-apis.classpath"/>
|
||||||
<property name="forbidden-apis.loaded" value="true"/>
|
<property name="forbidden-apis.loaded" value="true"/>
|
||||||
|
@ -108,7 +108,7 @@ public abstract class IndexCommit implements Comparable<IndexCommit> {
|
|||||||
public abstract long getGeneration();
|
public abstract long getGeneration();
|
||||||
|
|
||||||
/** Returns userData, previously passed to {@link
|
/** Returns userData, previously passed to {@link
|
||||||
* IndexWriter#setCommitData(Map)} for this commit. Map is
|
* IndexWriter#setLiveCommitData(Iterable)} for this commit. Map is
|
||||||
* {@code String -> String}. */
|
* {@code String -> String}. */
|
||||||
public abstract Map<String,String> getUserData() throws IOException;
|
public abstract Map<String,String> getUserData() throws IOException;
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ public final class IndexUpgrader {
|
|||||||
infoStream.message(LOG_PREFIX, "All segments upgraded to version " + Version.LATEST);
|
infoStream.message(LOG_PREFIX, "All segments upgraded to version " + Version.LATEST);
|
||||||
infoStream.message(LOG_PREFIX, "Enforcing commit to rewrite all index metadata...");
|
infoStream.message(LOG_PREFIX, "Enforcing commit to rewrite all index metadata...");
|
||||||
}
|
}
|
||||||
w.setCommitData(w.getCommitData()); // fake change to enforce a commit (e.g. if index has no segments)
|
w.setLiveCommitData(w.getLiveCommitData()); // fake change to enforce a commit (e.g. if index has no segments)
|
||||||
assert w.hasUncommittedChanges();
|
assert w.hasUncommittedChanges();
|
||||||
w.commit();
|
w.commit();
|
||||||
if (infoStream.isEnabled(LOG_PREFIX)) {
|
if (infoStream.isEnabled(LOG_PREFIX)) {
|
||||||
|
@ -295,6 +295,8 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable {
|
|||||||
private volatile boolean closed;
|
private volatile boolean closed;
|
||||||
private volatile boolean closing;
|
private volatile boolean closing;
|
||||||
|
|
||||||
|
private Iterable<Map.Entry<String,String>> commitUserData;
|
||||||
|
|
||||||
// Holds all SegmentInfo instances currently involved in
|
// Holds all SegmentInfo instances currently involved in
|
||||||
// merges
|
// merges
|
||||||
private HashSet<SegmentCommitInfo> mergingSegments = new HashSet<>();
|
private HashSet<SegmentCommitInfo> mergingSegments = new HashSet<>();
|
||||||
@ -947,6 +949,8 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable {
|
|||||||
rollbackSegments = segmentInfos.createBackupSegmentInfos();
|
rollbackSegments = segmentInfos.createBackupSegmentInfos();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
commitUserData = new HashMap<String,String>(segmentInfos.getUserData()).entrySet();
|
||||||
|
|
||||||
pendingNumDocs.set(segmentInfos.totalMaxDoc());
|
pendingNumDocs.set(segmentInfos.totalMaxDoc());
|
||||||
|
|
||||||
// start with previous field numbers, but new FieldInfos
|
// start with previous field numbers, but new FieldInfos
|
||||||
@ -2997,6 +3001,14 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable {
|
|||||||
segmentInfos.changed();
|
segmentInfos.changed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (commitUserData != null) {
|
||||||
|
Map<String,String> userData = new HashMap<>();
|
||||||
|
for(Map.Entry<String,String> ent : commitUserData) {
|
||||||
|
userData.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
|
segmentInfos.setUserData(userData, false);
|
||||||
|
}
|
||||||
|
|
||||||
// Must clone the segmentInfos while we still
|
// Must clone the segmentInfos while we still
|
||||||
// hold fullFlushLock and while sync'd so that
|
// hold fullFlushLock and while sync'd so that
|
||||||
// no partial changes (eg a delete w/o
|
// no partial changes (eg a delete w/o
|
||||||
@ -3059,36 +3071,63 @@ public class IndexWriter implements Closeable, TwoPhaseCommit, Accountable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the commit user data map. That method is considered a transaction by
|
* Sets the iterator to provide the commit user data map at commit time. Calling this method
|
||||||
* {@link IndexWriter} and will be {@link #commit() committed} even if no other
|
* is considered a committable change and will be {@link #commit() committed} even if
|
||||||
* changes were made to the writer instance. Note that you must call this method
|
* there are no other changes this writer. Note that you must call this method
|
||||||
* before {@link #prepareCommit()}, or otherwise it won't be included in the
|
* before {@link #prepareCommit()}. Otherwise it won't be included in the
|
||||||
* follow-on {@link #commit()}.
|
* follow-on {@link #commit()}.
|
||||||
* <p>
|
* <p>
|
||||||
* <b>NOTE:</b> the map is cloned internally, therefore altering the map's
|
* <b>NOTE:</b> the iterator is late-binding: it is only visited once all documents for the
|
||||||
* contents after calling this method has no effect.
|
* commit have been written to their segments, before the next segments_N file is written
|
||||||
*/
|
*/
|
||||||
public final synchronized void setCommitData(Map<String,String> commitUserData) {
|
public final synchronized void setLiveCommitData(Iterable<Map.Entry<String,String>> commitUserData) {
|
||||||
setCommitData(commitUserData, true);
|
setLiveCommitData(commitUserData, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the commit user data map, controlling whether to advance the {@link SegmentInfos#getVersion}.
|
* Sets the commit user data map.
|
||||||
*
|
*
|
||||||
* @see #setCommitData(Map)
|
* @deprecated Use {@link #setLiveCommitData} instead.
|
||||||
|
*/
|
||||||
|
@Deprecated
|
||||||
|
public final synchronized void setCommitData(Map<String,String> commitUserData) {
|
||||||
|
setLiveCommitData(new HashMap<>(commitUserData).entrySet());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the commit user data iterator, controlling whether to advance the {@link SegmentInfos#getVersion}.
|
||||||
|
*
|
||||||
|
* @see #setLiveCommitData(Iterable)
|
||||||
*
|
*
|
||||||
* @lucene.internal */
|
* @lucene.internal */
|
||||||
public final synchronized void setCommitData(Map<String,String> commitUserData, boolean doIncrementVersion) {
|
public final synchronized void setLiveCommitData(Iterable<Map.Entry<String,String>> commitUserData, boolean doIncrementVersion) {
|
||||||
segmentInfos.setUserData(new HashMap<>(commitUserData), doIncrementVersion);
|
this.commitUserData = commitUserData;
|
||||||
|
if (doIncrementVersion) {
|
||||||
|
segmentInfos.changed();
|
||||||
|
}
|
||||||
changeCount.incrementAndGet();
|
changeCount.incrementAndGet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the commit user data iterable previously set with {@link #setLiveCommitData(Iterable)}, or null if nothing has been set yet.
|
||||||
|
*/
|
||||||
|
public final synchronized Iterable<Map.Entry<String,String>> getLiveCommitData() {
|
||||||
|
return commitUserData;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the commit user data map that was last committed, or the one that
|
* Returns the commit user data map that was last committed, or the one that
|
||||||
* was set on {@link #setCommitData(Map)}.
|
* was set on {@link #setCommitData(Map)}.
|
||||||
|
*
|
||||||
|
* @deprecated Use {@link #getLiveCommitData} instead.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
public final synchronized Map<String,String> getCommitData() {
|
public final synchronized Map<String,String> getCommitData() {
|
||||||
return segmentInfos.getUserData();
|
Map<String,String> data = new HashMap<>();
|
||||||
|
for(Map.Entry<String,String> ent : commitUserData) {
|
||||||
|
data.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Used only by commit and prepareCommit, below; lock
|
// Used only by commit and prepareCommit, below; lock
|
||||||
|
@ -17,6 +17,20 @@
|
|||||||
package org.apache.lucene.index;
|
package org.apache.lucene.index;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.PrintStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.lucene.codecs.Codec;
|
import org.apache.lucene.codecs.Codec;
|
||||||
import org.apache.lucene.codecs.CodecUtil;
|
import org.apache.lucene.codecs.CodecUtil;
|
||||||
import org.apache.lucene.codecs.DocValuesFormat;
|
import org.apache.lucene.codecs.DocValuesFormat;
|
||||||
@ -32,20 +46,6 @@ import org.apache.lucene.util.IOUtils;
|
|||||||
import org.apache.lucene.util.StringHelper;
|
import org.apache.lucene.util.StringHelper;
|
||||||
import org.apache.lucene.util.Version;
|
import org.apache.lucene.util.Version;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A collection of segmentInfo objects with methods for operating on those
|
* A collection of segmentInfo objects with methods for operating on those
|
||||||
* segments in relation to the file system.
|
* segments in relation to the file system.
|
||||||
@ -103,7 +103,7 @@ import java.util.Set;
|
|||||||
* <li>SegID is the identifier of the Codec that encoded this segment. </li>
|
* <li>SegID is the identifier of the Codec that encoded this segment. </li>
|
||||||
* <li>CommitUserData stores an optional user-supplied opaque
|
* <li>CommitUserData stores an optional user-supplied opaque
|
||||||
* Map<String,String> that was passed to
|
* Map<String,String> that was passed to
|
||||||
* {@link IndexWriter#setCommitData(java.util.Map)}.</li>
|
* {@link IndexWriter#setLiveCommitData(Iterable)}.</li>
|
||||||
* <li>FieldInfosGen is the generation count of the fieldInfos file. If this is
|
* <li>FieldInfosGen is the generation count of the fieldInfos file. If this is
|
||||||
* -1, there are no updates to the fieldInfos in that segment. Anything above
|
* -1, there are no updates to the fieldInfos in that segment. Anything above
|
||||||
* zero means there are updates to fieldInfos stored by {@link FieldInfosFormat}
|
* zero means there are updates to fieldInfos stored by {@link FieldInfosFormat}
|
||||||
|
@ -229,7 +229,7 @@ public class TestDeletionPolicy extends LuceneTestCase {
|
|||||||
ExpirationTimeDeletionPolicy policy = (ExpirationTimeDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
|
ExpirationTimeDeletionPolicy policy = (ExpirationTimeDeletionPolicy) writer.getConfig().getIndexDeletionPolicy();
|
||||||
Map<String,String> commitData = new HashMap<>();
|
Map<String,String> commitData = new HashMap<>();
|
||||||
commitData.put("commitTime", String.valueOf(System.currentTimeMillis()));
|
commitData.put("commitTime", String.valueOf(System.currentTimeMillis()));
|
||||||
writer.setCommitData(commitData);
|
writer.setLiveCommitData(commitData.entrySet());
|
||||||
writer.commit();
|
writer.commit();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ public class TestDeletionPolicy extends LuceneTestCase {
|
|||||||
}
|
}
|
||||||
commitData = new HashMap<>();
|
commitData = new HashMap<>();
|
||||||
commitData.put("commitTime", String.valueOf(System.currentTimeMillis()));
|
commitData.put("commitTime", String.valueOf(System.currentTimeMillis()));
|
||||||
writer.setCommitData(commitData);
|
writer.setLiveCommitData(commitData.entrySet());
|
||||||
writer.commit();
|
writer.commit();
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
|
@ -557,14 +557,14 @@ public class TestDirectoryReaderReopen extends LuceneTestCase {
|
|||||||
writer.addDocument(doc);
|
writer.addDocument(doc);
|
||||||
Map<String,String> data = new HashMap<>();
|
Map<String,String> data = new HashMap<>();
|
||||||
data.put("index", i+"");
|
data.put("index", i+"");
|
||||||
writer.setCommitData(data);
|
writer.setLiveCommitData(data.entrySet());
|
||||||
writer.commit();
|
writer.commit();
|
||||||
}
|
}
|
||||||
for(int i=0;i<4;i++) {
|
for(int i=0;i<4;i++) {
|
||||||
writer.deleteDocuments(new Term("id", ""+i));
|
writer.deleteDocuments(new Term("id", ""+i));
|
||||||
Map<String,String> data = new HashMap<>();
|
Map<String,String> data = new HashMap<>();
|
||||||
data.put("index", (4+i)+"");
|
data.put("index", (4+i)+"");
|
||||||
writer.setCommitData(data);
|
writer.setLiveCommitData(data.entrySet());
|
||||||
writer.commit();
|
writer.commit();
|
||||||
}
|
}
|
||||||
writer.close();
|
writer.close();
|
||||||
|
@ -1892,9 +1892,9 @@ public class TestIndexWriter extends LuceneTestCase {
|
|||||||
writer.commit(); // first commit to complete IW create transaction.
|
writer.commit(); // first commit to complete IW create transaction.
|
||||||
|
|
||||||
// this should store the commit data, even though no other changes were made
|
// this should store the commit data, even though no other changes were made
|
||||||
writer.setCommitData(new HashMap<String,String>() {{
|
writer.setLiveCommitData(new HashMap<String,String>() {{
|
||||||
put("key", "value");
|
put("key", "value");
|
||||||
}});
|
}}.entrySet());
|
||||||
writer.commit();
|
writer.commit();
|
||||||
|
|
||||||
DirectoryReader r = DirectoryReader.open(dir);
|
DirectoryReader r = DirectoryReader.open(dir);
|
||||||
@ -1902,13 +1902,13 @@ public class TestIndexWriter extends LuceneTestCase {
|
|||||||
r.close();
|
r.close();
|
||||||
|
|
||||||
// now check setCommitData and prepareCommit/commit sequence
|
// now check setCommitData and prepareCommit/commit sequence
|
||||||
writer.setCommitData(new HashMap<String,String>() {{
|
writer.setLiveCommitData(new HashMap<String,String>() {{
|
||||||
put("key", "value1");
|
put("key", "value1");
|
||||||
}});
|
}}.entrySet());
|
||||||
writer.prepareCommit();
|
writer.prepareCommit();
|
||||||
writer.setCommitData(new HashMap<String,String>() {{
|
writer.setLiveCommitData(new HashMap<String,String>() {{
|
||||||
put("key", "value2");
|
put("key", "value2");
|
||||||
}});
|
}}.entrySet());
|
||||||
writer.commit(); // should commit the first commitData only, per protocol
|
writer.commit(); // should commit the first commitData only, per protocol
|
||||||
|
|
||||||
r = DirectoryReader.open(dir);
|
r = DirectoryReader.open(dir);
|
||||||
@ -1927,20 +1927,31 @@ public class TestIndexWriter extends LuceneTestCase {
|
|||||||
dir.close();
|
dir.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Map<String,String> getLiveCommitData(IndexWriter writer) {
|
||||||
|
Map<String,String> data = new HashMap<>();
|
||||||
|
Iterable<Map.Entry<String,String>> iter = writer.getLiveCommitData();
|
||||||
|
if (iter != null) {
|
||||||
|
for(Map.Entry<String,String> ent : iter) {
|
||||||
|
data.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetCommitData() throws Exception {
|
public void testGetCommitData() throws Exception {
|
||||||
Directory dir = newDirectory();
|
Directory dir = newDirectory();
|
||||||
IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(null));
|
IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(null));
|
||||||
writer.setCommitData(new HashMap<String,String>() {{
|
writer.setLiveCommitData(new HashMap<String,String>() {{
|
||||||
put("key", "value");
|
put("key", "value");
|
||||||
}});
|
}}.entrySet());
|
||||||
assertEquals("value", writer.getCommitData().get("key"));
|
assertEquals("value", getLiveCommitData(writer).get("key"));
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
// validate that it's also visible when opening a new IndexWriter
|
// validate that it's also visible when opening a new IndexWriter
|
||||||
writer = new IndexWriter(dir, newIndexWriterConfig(null)
|
writer = new IndexWriter(dir, newIndexWriterConfig(null)
|
||||||
.setOpenMode(OpenMode.APPEND));
|
.setOpenMode(OpenMode.APPEND));
|
||||||
assertEquals("value", writer.getCommitData().get("key"));
|
assertEquals("value", getLiveCommitData(writer).get("key"));
|
||||||
writer.close();
|
writer.close();
|
||||||
|
|
||||||
dir.close();
|
dir.close();
|
||||||
@ -2650,9 +2661,9 @@ public class TestIndexWriter extends LuceneTestCase {
|
|||||||
DirectoryReader r = DirectoryReader.open(w);
|
DirectoryReader r = DirectoryReader.open(w);
|
||||||
Map<String,String> m = new HashMap<>();
|
Map<String,String> m = new HashMap<>();
|
||||||
m.put("foo", "bar");
|
m.put("foo", "bar");
|
||||||
w.setCommitData(m);
|
w.setLiveCommitData(m.entrySet());
|
||||||
|
|
||||||
// setCommitData with no other changes should count as an NRT change:
|
// setLiveCommitData with no other changes should count as an NRT change:
|
||||||
DirectoryReader r2 = DirectoryReader.openIfChanged(r);
|
DirectoryReader r2 = DirectoryReader.openIfChanged(r);
|
||||||
assertNotNull(r2);
|
assertNotNull(r2);
|
||||||
|
|
||||||
@ -2669,9 +2680,9 @@ public class TestIndexWriter extends LuceneTestCase {
|
|||||||
DirectoryReader r = DirectoryReader.open(w);
|
DirectoryReader r = DirectoryReader.open(w);
|
||||||
Map<String,String> m = new HashMap<>();
|
Map<String,String> m = new HashMap<>();
|
||||||
m.put("foo", "bar");
|
m.put("foo", "bar");
|
||||||
w.setCommitData(m);
|
w.setLiveCommitData(m.entrySet());
|
||||||
w.commit();
|
w.commit();
|
||||||
// setCommitData and also commit, with no other changes, should count as an NRT change:
|
// setLiveCommitData and also commit, with no other changes, should count as an NRT change:
|
||||||
DirectoryReader r2 = DirectoryReader.openIfChanged(r);
|
DirectoryReader r2 = DirectoryReader.openIfChanged(r);
|
||||||
assertNotNull(r2);
|
assertNotNull(r2);
|
||||||
IOUtils.close(r, r2, w, dir);
|
IOUtils.close(r, r2, w, dir);
|
||||||
|
@ -19,6 +19,7 @@ package org.apache.lucene.index;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
@ -421,13 +422,13 @@ public class TestIndexWriterCommit extends LuceneTestCase {
|
|||||||
// commit to "first"
|
// commit to "first"
|
||||||
Map<String,String> commitData = new HashMap<>();
|
Map<String,String> commitData = new HashMap<>();
|
||||||
commitData.put("tag", "first");
|
commitData.put("tag", "first");
|
||||||
w.setCommitData(commitData);
|
w.setLiveCommitData(commitData.entrySet());
|
||||||
w.commit();
|
w.commit();
|
||||||
|
|
||||||
// commit to "second"
|
// commit to "second"
|
||||||
w.addDocument(doc);
|
w.addDocument(doc);
|
||||||
commitData.put("tag", "second");
|
commitData.put("tag", "second");
|
||||||
w.setCommitData(commitData);
|
w.setLiveCommitData(commitData.entrySet());
|
||||||
w.close();
|
w.close();
|
||||||
|
|
||||||
// open "first" with IndexWriter
|
// open "first" with IndexWriter
|
||||||
@ -450,7 +451,7 @@ public class TestIndexWriterCommit extends LuceneTestCase {
|
|||||||
// commit IndexWriter to "third"
|
// commit IndexWriter to "third"
|
||||||
w.addDocument(doc);
|
w.addDocument(doc);
|
||||||
commitData.put("tag", "third");
|
commitData.put("tag", "third");
|
||||||
w.setCommitData(commitData);
|
w.setLiveCommitData(commitData.entrySet());
|
||||||
w.close();
|
w.close();
|
||||||
|
|
||||||
// make sure "second" commit is still there
|
// make sure "second" commit is still there
|
||||||
@ -632,7 +633,7 @@ public class TestIndexWriterCommit extends LuceneTestCase {
|
|||||||
TestIndexWriter.addDoc(w);
|
TestIndexWriter.addDoc(w);
|
||||||
Map<String,String> data = new HashMap<>();
|
Map<String,String> data = new HashMap<>();
|
||||||
data.put("label", "test1");
|
data.put("label", "test1");
|
||||||
w.setCommitData(data);
|
w.setLiveCommitData(data.entrySet());
|
||||||
w.close();
|
w.close();
|
||||||
|
|
||||||
r = DirectoryReader.open(dir);
|
r = DirectoryReader.open(dir);
|
||||||
@ -663,4 +664,32 @@ public class TestIndexWriterCommit extends LuceneTestCase {
|
|||||||
r.close();
|
r.close();
|
||||||
dir.close();
|
dir.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LUCENE-7335: make sure commit data is late binding
|
||||||
|
public void testCommitDataIsLive() throws Exception {
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
IndexWriter w = new IndexWriter(dir, newIndexWriterConfig(new MockAnalyzer(random())));
|
||||||
|
w.addDocument(new Document());
|
||||||
|
|
||||||
|
final Map<String,String> commitData = new HashMap<>();
|
||||||
|
commitData.put("foo", "bar");
|
||||||
|
|
||||||
|
// make sure "foo" / "bar" doesn't take
|
||||||
|
w.setLiveCommitData(commitData.entrySet());
|
||||||
|
|
||||||
|
commitData.clear();
|
||||||
|
commitData.put("boo", "baz");
|
||||||
|
|
||||||
|
// this finally does the commit, and should burn "boo" / "baz"
|
||||||
|
w.close();
|
||||||
|
|
||||||
|
List<IndexCommit> commits = DirectoryReader.listCommits(dir);
|
||||||
|
assertEquals(1, commits.size());
|
||||||
|
|
||||||
|
IndexCommit commit = commits.get(0);
|
||||||
|
Map<String,String> data = commit.getUserData();
|
||||||
|
assertEquals(1, data.size());
|
||||||
|
assertEquals("baz", data.get("boo"));
|
||||||
|
dir.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +71,7 @@ public class TestTransactionRollback extends LuceneTestCase {
|
|||||||
.setIndexCommit(last));
|
.setIndexCommit(last));
|
||||||
Map<String,String> data = new HashMap<>();
|
Map<String,String> data = new HashMap<>();
|
||||||
data.put("index", "Rolled back to 1-"+id);
|
data.put("index", "Rolled back to 1-"+id);
|
||||||
w.setCommitData(data);
|
w.setLiveCommitData(data.entrySet());
|
||||||
w.close();
|
w.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,7 +142,7 @@ public class TestTransactionRollback extends LuceneTestCase {
|
|||||||
if (currentRecordId%10 == 0) {
|
if (currentRecordId%10 == 0) {
|
||||||
Map<String,String> data = new HashMap<>();
|
Map<String,String> data = new HashMap<>();
|
||||||
data.put("index", "records 1-"+currentRecordId);
|
data.put("index", "records 1-"+currentRecordId);
|
||||||
w.setCommitData(data);
|
w.setLiveCommitData(data.entrySet());
|
||||||
w.commit();
|
w.commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@ package org.apache.lucene.search;
|
|||||||
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
import org.apache.lucene.analysis.MockAnalyzer;
|
import org.apache.lucene.analysis.MockAnalyzer;
|
||||||
@ -33,6 +34,7 @@ import org.apache.lucene.index.Term;
|
|||||||
import org.apache.lucene.search.similarities.ClassicSimilarity;
|
import org.apache.lucene.search.similarities.ClassicSimilarity;
|
||||||
import org.apache.lucene.search.similarities.Similarity;
|
import org.apache.lucene.search.similarities.Similarity;
|
||||||
import org.apache.lucene.store.Directory;
|
import org.apache.lucene.store.Directory;
|
||||||
|
import org.apache.lucene.store.IOContext;
|
||||||
import org.apache.lucene.store.MockDirectoryWrapper;
|
import org.apache.lucene.store.MockDirectoryWrapper;
|
||||||
import org.apache.lucene.util.LuceneTestCase;
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
import org.apache.lucene.util.TestUtil;
|
import org.apache.lucene.util.TestUtil;
|
||||||
@ -69,7 +71,12 @@ public class TestBoolean2 extends LuceneTestCase {
|
|||||||
NUM_FILLER_DOCS = random().nextBoolean() ? 0 : BooleanScorer.SIZE;
|
NUM_FILLER_DOCS = random().nextBoolean() ? 0 : BooleanScorer.SIZE;
|
||||||
PRE_FILLER_DOCS = TestUtil.nextInt(random(), 0, (NUM_FILLER_DOCS / 2));
|
PRE_FILLER_DOCS = TestUtil.nextInt(random(), 0, (NUM_FILLER_DOCS / 2));
|
||||||
|
|
||||||
|
if (NUM_FILLER_DOCS * PRE_FILLER_DOCS > 100000) {
|
||||||
|
directory = newFSDirectory(createTempDir());
|
||||||
|
} else {
|
||||||
directory = newDirectory();
|
directory = newDirectory();
|
||||||
|
}
|
||||||
|
|
||||||
RandomIndexWriter writer= new RandomIndexWriter(random(), directory, newIndexWriterConfig(new MockAnalyzer(random())).setMergePolicy(newLogMergePolicy()));
|
RandomIndexWriter writer= new RandomIndexWriter(random(), directory, newIndexWriterConfig(new MockAnalyzer(random())).setMergePolicy(newLogMergePolicy()));
|
||||||
|
|
||||||
Document doc = new Document();
|
Document doc = new Document();
|
||||||
@ -92,7 +99,21 @@ public class TestBoolean2 extends LuceneTestCase {
|
|||||||
searcher.setSimilarity(new ClassicSimilarity());
|
searcher.setSimilarity(new ClassicSimilarity());
|
||||||
|
|
||||||
// make a copy of our index using a single segment
|
// make a copy of our index using a single segment
|
||||||
singleSegmentDirectory = new MockDirectoryWrapper(random(), TestUtil.ramCopyOf(directory));
|
if (NUM_FILLER_DOCS * PRE_FILLER_DOCS > 100000) {
|
||||||
|
singleSegmentDirectory = newFSDirectory(createTempDir());
|
||||||
|
} else {
|
||||||
|
singleSegmentDirectory = newDirectory();
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: this test does not need to be doing this crazy stuff. please improve it!
|
||||||
|
for (String fileName : directory.listAll()) {
|
||||||
|
if (fileName.startsWith("extra")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
singleSegmentDirectory.copyFrom(directory, fileName, fileName, IOContext.DEFAULT);
|
||||||
|
singleSegmentDirectory.sync(Collections.singleton(fileName));
|
||||||
|
}
|
||||||
|
|
||||||
IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random()));
|
IndexWriterConfig iwc = newIndexWriterConfig(new MockAnalyzer(random()));
|
||||||
// we need docID order to be preserved:
|
// we need docID order to be preserved:
|
||||||
iwc.setMergePolicy(newLogMergePolicy());
|
iwc.setMergePolicy(newLogMergePolicy());
|
||||||
@ -165,7 +186,7 @@ public class TestBoolean2 extends LuceneTestCase {
|
|||||||
"w1 w2 w3 w4 w5",
|
"w1 w2 w3 w4 w5",
|
||||||
"w1 w3 w2 w3",
|
"w1 w3 w2 w3",
|
||||||
"w1 xx w2 yy w3",
|
"w1 xx w2 yy w3",
|
||||||
"w1 w3 xx w2 yy w3"
|
"w1 w3 xx w2 yy mm"
|
||||||
};
|
};
|
||||||
|
|
||||||
public void queriesTest(Query query, int[] expDocNrs) throws Exception {
|
public void queriesTest(Query query, int[] expDocNrs) throws Exception {
|
||||||
|
@ -205,7 +205,7 @@ public abstract class TaxonomyReader implements Closeable {
|
|||||||
/**
|
/**
|
||||||
* Retrieve user committed data.
|
* Retrieve user committed data.
|
||||||
*
|
*
|
||||||
* @see TaxonomyWriter#setCommitData(Map)
|
* @see TaxonomyWriter#setLiveCommitData(Iterable)
|
||||||
*/
|
*/
|
||||||
public abstract Map<String, String> getCommitUserData() throws IOException;
|
public abstract Map<String, String> getCommitUserData() throws IOException;
|
||||||
|
|
||||||
|
@ -20,6 +20,7 @@ import java.io.Closeable;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.lucene.index.IndexWriter;
|
||||||
import org.apache.lucene.index.TwoPhaseCommit;
|
import org.apache.lucene.index.TwoPhaseCommit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -105,19 +106,14 @@ public interface TaxonomyWriter extends Closeable, TwoPhaseCommit {
|
|||||||
public int getSize();
|
public int getSize();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the commit user data map. That method is considered a transaction and
|
* Sets the commit user data iterable. See {@link IndexWriter#setLiveCommitData}.
|
||||||
* will be {@link #commit() committed} even if no other changes were made to
|
|
||||||
* the writer instance.
|
|
||||||
* <p>
|
|
||||||
* <b>NOTE:</b> the map is cloned internally, therefore altering the map's
|
|
||||||
* contents after calling this method has no effect.
|
|
||||||
*/
|
*/
|
||||||
public void setCommitData(Map<String,String> commitUserData);
|
public void setLiveCommitData(Iterable<Map.Entry<String,String>> commitUserData);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the commit user data map that was set on
|
* Returns the commit user data iterable that was set on
|
||||||
* {@link #setCommitData(Map)}.
|
* {@link #setLiveCommitData(Iterable)}.
|
||||||
*/
|
*/
|
||||||
public Map<String,String> getCommitData();
|
public Iterable<Map.Entry<String,String>> getLiveCommitData();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -584,31 +584,42 @@ public class DirectoryTaxonomyWriter implements TaxonomyWriter {
|
|||||||
public synchronized long commit() throws IOException {
|
public synchronized long commit() throws IOException {
|
||||||
ensureOpen();
|
ensureOpen();
|
||||||
// LUCENE-4972: if we always call setCommitData, we create empty commits
|
// LUCENE-4972: if we always call setCommitData, we create empty commits
|
||||||
String epochStr = indexWriter.getCommitData().get(INDEX_EPOCH);
|
|
||||||
|
Map<String,String> data = new HashMap<>();
|
||||||
|
Iterable<Map.Entry<String,String>> iter = indexWriter.getLiveCommitData();
|
||||||
|
if (iter != null) {
|
||||||
|
for(Map.Entry<String,String> ent : iter) {
|
||||||
|
data.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String epochStr = data.get(INDEX_EPOCH);
|
||||||
if (epochStr == null || Long.parseLong(epochStr, 16) != indexEpoch) {
|
if (epochStr == null || Long.parseLong(epochStr, 16) != indexEpoch) {
|
||||||
indexWriter.setCommitData(combinedCommitData(indexWriter.getCommitData()));
|
indexWriter.setLiveCommitData(combinedCommitData(indexWriter.getLiveCommitData()));
|
||||||
}
|
}
|
||||||
return indexWriter.commit();
|
return indexWriter.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Combine original user data with the taxonomy epoch. */
|
/** Combine original user data with the taxonomy epoch. */
|
||||||
private Map<String,String> combinedCommitData(Map<String,String> commitData) {
|
private Iterable<Map.Entry<String,String>> combinedCommitData(Iterable<Map.Entry<String,String>> commitData) {
|
||||||
Map<String,String> m = new HashMap<>();
|
Map<String,String> m = new HashMap<>();
|
||||||
if (commitData != null) {
|
if (commitData != null) {
|
||||||
m.putAll(commitData);
|
for(Map.Entry<String,String> ent : commitData) {
|
||||||
|
m.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
m.put(INDEX_EPOCH, Long.toString(indexEpoch, 16));
|
m.put(INDEX_EPOCH, Long.toString(indexEpoch, 16));
|
||||||
return m;
|
return m.entrySet();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setCommitData(Map<String,String> commitUserData) {
|
public void setLiveCommitData(Iterable<Map.Entry<String,String>> commitUserData) {
|
||||||
indexWriter.setCommitData(combinedCommitData(commitUserData));
|
indexWriter.setLiveCommitData(combinedCommitData(commitUserData));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String,String> getCommitData() {
|
public Iterable<Map.Entry<String,String>> getLiveCommitData() {
|
||||||
return combinedCommitData(indexWriter.getCommitData());
|
return combinedCommitData(indexWriter.getLiveCommitData());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -619,9 +630,16 @@ public class DirectoryTaxonomyWriter implements TaxonomyWriter {
|
|||||||
public synchronized long prepareCommit() throws IOException {
|
public synchronized long prepareCommit() throws IOException {
|
||||||
ensureOpen();
|
ensureOpen();
|
||||||
// LUCENE-4972: if we always call setCommitData, we create empty commits
|
// LUCENE-4972: if we always call setCommitData, we create empty commits
|
||||||
String epochStr = indexWriter.getCommitData().get(INDEX_EPOCH);
|
Map<String,String> data = new HashMap<>();
|
||||||
|
Iterable<Map.Entry<String,String>> iter = indexWriter.getLiveCommitData();
|
||||||
|
if (iter != null) {
|
||||||
|
for(Map.Entry<String,String> ent : iter) {
|
||||||
|
data.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
String epochStr = data.get(INDEX_EPOCH);
|
||||||
if (epochStr == null || Long.parseLong(epochStr, 16) != indexEpoch) {
|
if (epochStr == null || Long.parseLong(epochStr, 16) != indexEpoch) {
|
||||||
indexWriter.setCommitData(combinedCommitData(indexWriter.getCommitData()));
|
indexWriter.setLiveCommitData(combinedCommitData(indexWriter.getLiveCommitData()));
|
||||||
}
|
}
|
||||||
return indexWriter.prepareCommit();
|
return indexWriter.prepareCommit();
|
||||||
}
|
}
|
||||||
|
@ -94,7 +94,7 @@ public class TestDirectoryTaxonomyWriter extends FacetTestCase {
|
|||||||
taxoWriter.addCategory(new FacetLabel("b"));
|
taxoWriter.addCategory(new FacetLabel("b"));
|
||||||
Map<String, String> userCommitData = new HashMap<>();
|
Map<String, String> userCommitData = new HashMap<>();
|
||||||
userCommitData.put("testing", "1 2 3");
|
userCommitData.put("testing", "1 2 3");
|
||||||
taxoWriter.setCommitData(userCommitData);
|
taxoWriter.setLiveCommitData(userCommitData.entrySet());
|
||||||
taxoWriter.close();
|
taxoWriter.close();
|
||||||
DirectoryReader r = DirectoryReader.open(dir);
|
DirectoryReader r = DirectoryReader.open(dir);
|
||||||
assertEquals("2 categories plus root should have been committed to the underlying directory", 3, r.numDocs());
|
assertEquals("2 categories plus root should have been committed to the underlying directory", 3, r.numDocs());
|
||||||
@ -109,14 +109,22 @@ public class TestDirectoryTaxonomyWriter extends FacetTestCase {
|
|||||||
// that the taxonomy index has been recreated.
|
// that the taxonomy index has been recreated.
|
||||||
taxoWriter = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE_OR_APPEND, NO_OP_CACHE);
|
taxoWriter = new DirectoryTaxonomyWriter(dir, OpenMode.CREATE_OR_APPEND, NO_OP_CACHE);
|
||||||
taxoWriter.addCategory(new FacetLabel("c")); // add a category so that commit will happen
|
taxoWriter.addCategory(new FacetLabel("c")); // add a category so that commit will happen
|
||||||
taxoWriter.setCommitData(new HashMap<String, String>(){{
|
taxoWriter.setLiveCommitData(new HashMap<String, String>(){{
|
||||||
put("just", "data");
|
put("just", "data");
|
||||||
}});
|
}}.entrySet());
|
||||||
taxoWriter.commit();
|
taxoWriter.commit();
|
||||||
|
|
||||||
// verify taxoWriter.getCommitData()
|
// verify taxoWriter.getCommitData()
|
||||||
|
Map<String,String> data = new HashMap<>();
|
||||||
|
Iterable<Map.Entry<String,String>> iter = taxoWriter.getLiveCommitData();
|
||||||
|
if (iter != null) {
|
||||||
|
for(Map.Entry<String,String> ent : iter) {
|
||||||
|
data.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
assertNotNull(DirectoryTaxonomyWriter.INDEX_EPOCH
|
assertNotNull(DirectoryTaxonomyWriter.INDEX_EPOCH
|
||||||
+ " not found in taoxWriter.commitData", taxoWriter.getCommitData().get(DirectoryTaxonomyWriter.INDEX_EPOCH));
|
+ " not found in taoxWriter.commitData", data.get(DirectoryTaxonomyWriter.INDEX_EPOCH));
|
||||||
taxoWriter.close();
|
taxoWriter.close();
|
||||||
|
|
||||||
r = DirectoryReader.open(dir);
|
r = DirectoryReader.open(dir);
|
||||||
@ -170,9 +178,9 @@ public class TestDirectoryTaxonomyWriter extends FacetTestCase {
|
|||||||
|
|
||||||
private void touchTaxo(DirectoryTaxonomyWriter taxoWriter, FacetLabel cp) throws IOException {
|
private void touchTaxo(DirectoryTaxonomyWriter taxoWriter, FacetLabel cp) throws IOException {
|
||||||
taxoWriter.addCategory(cp);
|
taxoWriter.addCategory(cp);
|
||||||
taxoWriter.setCommitData(new HashMap<String, String>(){{
|
taxoWriter.setLiveCommitData(new HashMap<String, String>(){{
|
||||||
put("just", "data");
|
put("just", "data");
|
||||||
}});
|
}}.entrySet());
|
||||||
taxoWriter.commit();
|
taxoWriter.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ com.codahale.metrics.version = 3.0.1
|
|||||||
/com.codahale.metrics/metrics-healthchecks = ${com.codahale.metrics.version}
|
/com.codahale.metrics/metrics-healthchecks = ${com.codahale.metrics.version}
|
||||||
|
|
||||||
/com.cybozu.labs/langdetect = 1.1-20120112
|
/com.cybozu.labs/langdetect = 1.1-20120112
|
||||||
/com.drewnoakes/metadata-extractor = 2.6.2
|
/com.drewnoakes/metadata-extractor = 2.8.1
|
||||||
|
|
||||||
/com.facebook.presto/presto-parser = 0.122
|
/com.facebook.presto/presto-parser = 0.122
|
||||||
|
|
||||||
@ -38,7 +38,8 @@ com.google.inject.guice.version = 3.0
|
|||||||
|
|
||||||
/com.google.protobuf/protobuf-java = 2.5.0
|
/com.google.protobuf/protobuf-java = 2.5.0
|
||||||
/com.googlecode.juniversalchardet/juniversalchardet = 1.0.3
|
/com.googlecode.juniversalchardet/juniversalchardet = 1.0.3
|
||||||
/com.googlecode.mp4parser/isoparser = 1.0.2
|
/com.googlecode.mp4parser/isoparser = 1.1.18
|
||||||
|
/com.healthmarketscience.jackcess/jackcess = 2.1.3
|
||||||
/com.ibm.icu/icu4j = 56.1
|
/com.ibm.icu/icu4j = 56.1
|
||||||
/com.pff/java-libpst = 0.8.1
|
/com.pff/java-libpst = 0.8.1
|
||||||
|
|
||||||
@ -92,7 +93,7 @@ com.sun.jersey.version = 1.9
|
|||||||
|
|
||||||
/org.apache.ant/ant = 1.8.2
|
/org.apache.ant/ant = 1.8.2
|
||||||
/org.apache.avro/avro = 1.7.5
|
/org.apache.avro/avro = 1.7.5
|
||||||
/org.apache.commons/commons-compress = 1.8.1
|
/org.apache.commons/commons-compress = 1.11
|
||||||
/org.apache.commons/commons-exec = 1.3
|
/org.apache.commons/commons-exec = 1.3
|
||||||
/org.apache.commons/commons-math3 = 3.4.1
|
/org.apache.commons/commons-math3 = 3.4.1
|
||||||
|
|
||||||
@ -173,18 +174,19 @@ org.apache.james.apache.mime4j.version = 0.7.2
|
|||||||
/org.apache.mina/mina-core = 2.0.0-M5
|
/org.apache.mina/mina-core = 2.0.0-M5
|
||||||
/org.apache.mrunit/mrunit = 1.0.0
|
/org.apache.mrunit/mrunit = 1.0.0
|
||||||
|
|
||||||
org.apache.pdfbox.version = 1.8.8
|
org.apache.pdfbox.version = 2.0.1
|
||||||
/org.apache.pdfbox/fontbox = ${org.apache.pdfbox.version}
|
/org.apache.pdfbox/fontbox = ${org.apache.pdfbox.version}
|
||||||
/org.apache.pdfbox/jempbox = ${org.apache.pdfbox.version}
|
/org.apache.pdfbox/jempbox = 1.8.12
|
||||||
/org.apache.pdfbox/pdfbox = ${org.apache.pdfbox.version}
|
/org.apache.pdfbox/pdfbox = ${org.apache.pdfbox.version}
|
||||||
|
/org.apache.pdfbox/pdfbox-tools = ${org.apache.pdfbox.version}
|
||||||
|
|
||||||
org.apache.poi.version = 3.11
|
org.apache.poi.version = 3.15-beta1
|
||||||
/org.apache.poi/poi = ${org.apache.poi.version}
|
/org.apache.poi/poi = ${org.apache.poi.version}
|
||||||
/org.apache.poi/poi-ooxml = ${org.apache.poi.version}
|
/org.apache.poi/poi-ooxml = ${org.apache.poi.version}
|
||||||
/org.apache.poi/poi-ooxml-schemas = ${org.apache.poi.version}
|
/org.apache.poi/poi-ooxml-schemas = ${org.apache.poi.version}
|
||||||
/org.apache.poi/poi-scratchpad = ${org.apache.poi.version}
|
/org.apache.poi/poi-scratchpad = ${org.apache.poi.version}
|
||||||
|
|
||||||
org.apache.tika.version = 1.7
|
org.apache.tika.version = 1.13
|
||||||
/org.apache.tika/tika-core = ${org.apache.tika.version}
|
/org.apache.tika/tika-core = ${org.apache.tika.version}
|
||||||
/org.apache.tika/tika-java7 = ${org.apache.tika.version}
|
/org.apache.tika/tika-java7 = ${org.apache.tika.version}
|
||||||
/org.apache.tika/tika-parsers = ${org.apache.tika.version}
|
/org.apache.tika/tika-parsers = ${org.apache.tika.version}
|
||||||
@ -246,7 +248,7 @@ org.eclipse.jetty.version = 9.3.8.v20160314
|
|||||||
|
|
||||||
/org.fusesource.leveldbjni/leveldbjni = 1.8
|
/org.fusesource.leveldbjni/leveldbjni = 1.8
|
||||||
|
|
||||||
org.gagravarr.vorbis.java.version = 0.6
|
org.gagravarr.vorbis.java.version = 0.8
|
||||||
/org.gagravarr/vorbis-java-core = ${org.gagravarr.vorbis.java.version}
|
/org.gagravarr/vorbis-java-core = ${org.gagravarr.vorbis.java.version}
|
||||||
/org.gagravarr/vorbis-java-tika = ${org.gagravarr.vorbis.java.version}
|
/org.gagravarr/vorbis-java-tika = ${org.gagravarr.vorbis.java.version}
|
||||||
|
|
||||||
|
1
lucene/licenses/commons-compress-1.11.jar.sha1
Normal file
1
lucene/licenses/commons-compress-1.11.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
f43ce4c878078cbcfbb061353aa672a4c8e81443
|
@ -1 +0,0 @@
|
|||||||
a698750c16740fd5b3871425f4cb3bbaa87f529d
|
|
@ -83,10 +83,16 @@ public abstract class PrimaryNode extends Node {
|
|||||||
|
|
||||||
message("IWC:\n" + writer.getConfig());
|
message("IWC:\n" + writer.getConfig());
|
||||||
message("dir:\n" + writer.getDirectory());
|
message("dir:\n" + writer.getDirectory());
|
||||||
message("commitData: " + writer.getCommitData());
|
message("commitData: " + writer.getLiveCommitData());
|
||||||
|
|
||||||
// Record our primaryGen in the userData, and set initial version to 0:
|
// Record our primaryGen in the userData, and set initial version to 0:
|
||||||
Map<String,String> commitData = new HashMap<>(writer.getCommitData());
|
Map<String,String> commitData = new HashMap<>();
|
||||||
|
Iterable<Map.Entry<String,String>> iter = writer.getLiveCommitData();
|
||||||
|
if (iter != null) {
|
||||||
|
for(Map.Entry<String,String> ent : iter) {
|
||||||
|
commitData.put(ent.getKey(), ent.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
commitData.put(PRIMARY_GEN_KEY, Long.toString(primaryGen));
|
commitData.put(PRIMARY_GEN_KEY, Long.toString(primaryGen));
|
||||||
if (commitData.get(VERSION_KEY) == null) {
|
if (commitData.get(VERSION_KEY) == null) {
|
||||||
commitData.put(VERSION_KEY, "0");
|
commitData.put(VERSION_KEY, "0");
|
||||||
@ -94,7 +100,7 @@ public abstract class PrimaryNode extends Node {
|
|||||||
} else {
|
} else {
|
||||||
message("keep current commitData version=" + commitData.get(VERSION_KEY));
|
message("keep current commitData version=" + commitData.get(VERSION_KEY));
|
||||||
}
|
}
|
||||||
writer.setCommitData(commitData, false);
|
writer.setLiveCommitData(commitData.entrySet(), false);
|
||||||
|
|
||||||
// We forcefully advance the SIS version to an unused future version. This is necessary if the previous primary crashed and we are
|
// We forcefully advance the SIS version to an unused future version. This is necessary if the previous primary crashed and we are
|
||||||
// starting up on an "older" index, else versions can be illegally reused but show different results:
|
// starting up on an "older" index, else versions can be illegally reused but show different results:
|
||||||
@ -153,10 +159,16 @@ public abstract class PrimaryNode extends Node {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public synchronized long getLastCommitVersion() {
|
public synchronized long getLastCommitVersion() {
|
||||||
String s = curInfos.getUserData().get(VERSION_KEY);
|
Iterable<Map.Entry<String,String>> iter = writer.getLiveCommitData();
|
||||||
|
assert iter != null;
|
||||||
|
for(Map.Entry<String,String> ent : iter) {
|
||||||
|
if (ent.getKey().equals(VERSION_KEY)) {
|
||||||
|
return Long.parseLong(ent.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// In ctor we always install an initial version:
|
// In ctor we always install an initial version:
|
||||||
assert s != null;
|
throw new AssertionError("missing VERSION_KEY");
|
||||||
return Long.parseLong(s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -167,7 +179,7 @@ public abstract class PrimaryNode extends Node {
|
|||||||
// on xlog replay we are replaying more ops than necessary.
|
// on xlog replay we are replaying more ops than necessary.
|
||||||
commitData.put(VERSION_KEY, Long.toString(copyState.version));
|
commitData.put(VERSION_KEY, Long.toString(copyState.version));
|
||||||
message("top: commit commitData=" + commitData);
|
message("top: commit commitData=" + commitData);
|
||||||
writer.setCommitData(commitData, false);
|
writer.setLiveCommitData(commitData.entrySet(), false);
|
||||||
writer.commit();
|
writer.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -172,9 +172,9 @@ public class IndexAndTaxonomyReplicationClientTest extends ReplicatorTestCase {
|
|||||||
|
|
||||||
private Revision createRevision(final int id) throws IOException {
|
private Revision createRevision(final int id) throws IOException {
|
||||||
publishIndexWriter.addDocument(newDocument(publishTaxoWriter, id));
|
publishIndexWriter.addDocument(newDocument(publishTaxoWriter, id));
|
||||||
publishIndexWriter.setCommitData(new HashMap<String, String>() {{
|
publishIndexWriter.setLiveCommitData(new HashMap<String, String>() {{
|
||||||
put(VERSION_ID, Integer.toString(id, 16));
|
put(VERSION_ID, Integer.toString(id, 16));
|
||||||
}});
|
}}.entrySet());
|
||||||
publishIndexWriter.commit();
|
publishIndexWriter.commit();
|
||||||
publishTaxoWriter.commit();
|
publishTaxoWriter.commit();
|
||||||
return new IndexAndTaxonomyRevision(publishIndexWriter, publishTaxoWriter);
|
return new IndexAndTaxonomyRevision(publishIndexWriter, publishTaxoWriter);
|
||||||
|
@ -122,9 +122,9 @@ public class IndexReplicationClientTest extends ReplicatorTestCase {
|
|||||||
|
|
||||||
private Revision createRevision(final int id) throws IOException {
|
private Revision createRevision(final int id) throws IOException {
|
||||||
publishWriter.addDocument(new Document());
|
publishWriter.addDocument(new Document());
|
||||||
publishWriter.setCommitData(new HashMap<String, String>() {{
|
publishWriter.setLiveCommitData(new HashMap<String, String>() {{
|
||||||
put(VERSION_ID, Integer.toString(id, 16));
|
put(VERSION_ID, Integer.toString(id, 16));
|
||||||
}});
|
}}.entrySet());
|
||||||
publishWriter.commit();
|
publishWriter.commit();
|
||||||
return new IndexRevision(publishWriter);
|
return new IndexRevision(publishWriter);
|
||||||
}
|
}
|
||||||
|
@ -65,9 +65,9 @@ public class LocalReplicatorTest extends ReplicatorTestCase {
|
|||||||
|
|
||||||
private Revision createRevision(final int id) throws IOException {
|
private Revision createRevision(final int id) throws IOException {
|
||||||
sourceWriter.addDocument(new Document());
|
sourceWriter.addDocument(new Document());
|
||||||
sourceWriter.setCommitData(new HashMap<String, String>() {{
|
sourceWriter.setLiveCommitData(new HashMap<String, String>() {{
|
||||||
put(VERSION_ID, Integer.toString(id, 16));
|
put(VERSION_ID, Integer.toString(id, 16));
|
||||||
}});
|
}}.entrySet());
|
||||||
sourceWriter.commit();
|
sourceWriter.commit();
|
||||||
return new IndexRevision(sourceWriter);
|
return new IndexRevision(sourceWriter);
|
||||||
}
|
}
|
||||||
|
@ -93,7 +93,7 @@ public class HttpReplicatorTest extends ReplicatorTestCase {
|
|||||||
private void publishRevision(int id) throws IOException {
|
private void publishRevision(int id) throws IOException {
|
||||||
Document doc = new Document();
|
Document doc = new Document();
|
||||||
writer.addDocument(doc);
|
writer.addDocument(doc);
|
||||||
writer.setCommitData(Collections.singletonMap("ID", Integer.toString(id, 16)));
|
writer.setLiveCommitData(Collections.singletonMap("ID", Integer.toString(id, 16)).entrySet());
|
||||||
writer.commit();
|
writer.commit();
|
||||||
serverReplicator.publish(new IndexRevision(writer));
|
serverReplicator.publish(new IndexRevision(writer));
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,7 @@ See the Quick Start guide at http://lucene.apache.org/solr/quickstart.html
|
|||||||
|
|
||||||
Versions of Major Components
|
Versions of Major Components
|
||||||
---------------------
|
---------------------
|
||||||
Apache Tika 1.7
|
Apache Tika 1.13
|
||||||
Carrot2 3.12.0
|
Carrot2 3.12.0
|
||||||
Velocity 1.7 and Velocity Tools 2.0
|
Velocity 1.7 and Velocity Tools 2.0
|
||||||
Apache UIMA 2.3.1
|
Apache UIMA 2.3.1
|
||||||
@ -47,6 +47,15 @@ Bug Fixes
|
|||||||
* SOLR-9161: Change SolrPluginUtils.invokeSetters implementation to accommodate setter variants.
|
* SOLR-9161: Change SolrPluginUtils.invokeSetters implementation to accommodate setter variants.
|
||||||
(Christine Poerschke, Steve Rowe, Uwe Schindler)
|
(Christine Poerschke, Steve Rowe, Uwe Schindler)
|
||||||
|
|
||||||
|
Other Changes
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
* SOLR-9195: Remove unnecessary allocation and null check in UpdateRequestProcessorChain's
|
||||||
|
getReqProcessors method. (Christine Poerschke)
|
||||||
|
|
||||||
|
* SOLR-8981: Upgraded Extraction module to Apache Tika 1.13.
|
||||||
|
(Tim Allison, Lewis John McGibbney via Uwe Schindler)
|
||||||
|
|
||||||
================== 6.1.0 ==================
|
================== 6.1.0 ==================
|
||||||
|
|
||||||
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
|
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
|
||||||
|
@ -61,6 +61,9 @@ Copyright (C) 2010-2014 James Burke, https://github.com/jrburke/requirejs
|
|||||||
This product includes fugue icons created by Yusuke Kamiyamane
|
This product includes fugue icons created by Yusuke Kamiyamane
|
||||||
Copyright (C) 2013-2014 Yusuke Kamiyamane, https://github.com/yusukekamiyamane/fugue-icons
|
Copyright (C) 2013-2014 Yusuke Kamiyamane, https://github.com/yusukekamiyamane/fugue-icons
|
||||||
|
|
||||||
|
Jackcess: http://jackcess.sourceforge.net/
|
||||||
|
Copyright (C) 2011-2014 James Ahlborn
|
||||||
|
|
||||||
JavaMail API 1.5.1: https://glassfish.dev.java.net/javaee5/mail/
|
JavaMail API 1.5.1: https://glassfish.dev.java.net/javaee5/mail/
|
||||||
License: Common Development and Distribution License (CDDL) v1.1 (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
|
License: Common Development and Distribution License (CDDL) v1.1 (https://glassfish.java.net/public/CDDL+GPL_1_1.html)
|
||||||
|
|
||||||
|
@ -504,8 +504,7 @@
|
|||||||
|
|
||||||
<!-- Forbidden API Task, customizations for Solr -->
|
<!-- Forbidden API Task, customizations for Solr -->
|
||||||
<target name="-check-forbidden-all" depends="-init-forbidden-apis,compile-core,compile-test">
|
<target name="-check-forbidden-all" depends="-init-forbidden-apis,compile-core,compile-test">
|
||||||
<!--<property prefix="ivyversions" file="${common.dir}/ivy-versions.properties"/>--> <!-- for commons-io version -->
|
<property prefix="ivyversions" file="${common.dir}/ivy-versions.properties"/><!-- for commons-io version -->
|
||||||
<!-- HACK: --><property name="ivyversions./commons-io/commons-io" value="2.4"/>
|
|
||||||
<forbidden-apis suppressAnnotation="**.SuppressForbidden" classpathref="forbidden-apis.allclasses.classpath" targetVersion="${javac.release}">
|
<forbidden-apis suppressAnnotation="**.SuppressForbidden" classpathref="forbidden-apis.allclasses.classpath" targetVersion="${javac.release}">
|
||||||
<signatures>
|
<signatures>
|
||||||
<bundled name="jdk-unsafe"/>
|
<bundled name="jdk-unsafe"/>
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.solr.handler.dataimport;
|
package org.apache.solr.handler.dataimport;
|
||||||
|
|
||||||
import org.apache.lucene.util.Constants;
|
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
@ -105,7 +104,6 @@ public class TestTikaEntityProcessor extends AbstractDataImportHandlerTestCase {
|
|||||||
public static void beforeClass() throws Exception {
|
public static void beforeClass() throws Exception {
|
||||||
assumeFalse("This test fails on UNIX with Turkish default locale (https://issues.apache.org/jira/browse/SOLR-6387)",
|
assumeFalse("This test fails on UNIX with Turkish default locale (https://issues.apache.org/jira/browse/SOLR-6387)",
|
||||||
new Locale("tr").getLanguage().equals(Locale.getDefault().getLanguage()));
|
new Locale("tr").getLanguage().equals(Locale.getDefault().getLanguage()));
|
||||||
assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/PDFBOX-3155)", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
||||||
initCore("dataimport-solrconfig.xml", "dataimport-schema-no-unique-key.xml", getFile("dihextras/solr").getAbsolutePath());
|
initCore("dataimport-solrconfig.xml", "dataimport-schema-no-unique-key.xml", getFile("dihextras/solr").getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,13 +32,16 @@
|
|||||||
<!-- When upgrading Tika, upgrade dependencies versions and add any new ones
|
<!-- When upgrading Tika, upgrade dependencies versions and add any new ones
|
||||||
(except slf4j-api, commons-codec, commons-logging, commons-httpclient, geronimo-stax-api_1.0_spec, jcip-annotations, xml-apis, asm)
|
(except slf4j-api, commons-codec, commons-logging, commons-httpclient, geronimo-stax-api_1.0_spec, jcip-annotations, xml-apis, asm)
|
||||||
WARNING: Don't add netcdf / unidataCommon (partially LGPL code) -->
|
WARNING: Don't add netcdf / unidataCommon (partially LGPL code) -->
|
||||||
|
<dependency org="com.healthmarketscience.jackcess" name="jackcess" rev="${/com.healthmarketscience.jackcess/jackcess}" conf="compile"/>
|
||||||
<dependency org="org.gagravarr" name="vorbis-java-tika" rev="${/org.gagravarr/vorbis-java-tika}" conf="compile"/>
|
<dependency org="org.gagravarr" name="vorbis-java-tika" rev="${/org.gagravarr/vorbis-java-tika}" conf="compile"/>
|
||||||
<dependency org="org.gagravarr" name="vorbis-java-core" rev="${/org.gagravarr/vorbis-java-core}" conf="compile"/>
|
<dependency org="org.gagravarr" name="vorbis-java-core" rev="${/org.gagravarr/vorbis-java-core}" conf="compile"/>
|
||||||
<dependency org="org.apache.james" name="apache-mime4j-core" rev="${/org.apache.james/apache-mime4j-core}" conf="compile"/>
|
<dependency org="org.apache.james" name="apache-mime4j-core" rev="${/org.apache.james/apache-mime4j-core}" conf="compile"/>
|
||||||
<dependency org="org.apache.james" name="apache-mime4j-dom" rev="${/org.apache.james/apache-mime4j-dom}" conf="compile"/>
|
<dependency org="org.apache.james" name="apache-mime4j-dom" rev="${/org.apache.james/apache-mime4j-dom}" conf="compile"/>
|
||||||
<dependency org="org.apache.commons" name="commons-compress" rev="${/org.apache.commons/commons-compress}" conf="compile"/>
|
<dependency org="org.apache.commons" name="commons-compress" rev="${/org.apache.commons/commons-compress}" conf="compile"/>
|
||||||
<dependency org="org.apache.pdfbox" name="pdfbox" rev="${/org.apache.pdfbox/pdfbox}" conf="compile"/>
|
<dependency org="org.apache.pdfbox" name="pdfbox" rev="${/org.apache.pdfbox/pdfbox}" conf="compile"/>
|
||||||
|
<dependency org="org.apache.pdfbox" name="pdfbox-tools" rev="${/org.apache.pdfbox/pdfbox-tools}" conf="compile"/>
|
||||||
<dependency org="org.apache.pdfbox" name="fontbox" rev="${/org.apache.pdfbox/fontbox}" conf="compile"/>
|
<dependency org="org.apache.pdfbox" name="fontbox" rev="${/org.apache.pdfbox/fontbox}" conf="compile"/>
|
||||||
|
|
||||||
<dependency org="org.apache.pdfbox" name="jempbox" rev="${/org.apache.pdfbox/jempbox}" conf="compile"/>
|
<dependency org="org.apache.pdfbox" name="jempbox" rev="${/org.apache.pdfbox/jempbox}" conf="compile"/>
|
||||||
<dependency org="org.bouncycastle" name="bcmail-jdk15" rev="${/org.bouncycastle/bcmail-jdk15}" conf="compile"/>
|
<dependency org="org.bouncycastle" name="bcmail-jdk15" rev="${/org.bouncycastle/bcmail-jdk15}" conf="compile"/>
|
||||||
<dependency org="org.bouncycastle" name="bcprov-jdk15" rev="${/org.bouncycastle/bcprov-jdk15}" conf="compile"/>
|
<dependency org="org.bouncycastle" name="bcprov-jdk15" rev="${/org.bouncycastle/bcprov-jdk15}" conf="compile"/>
|
||||||
|
@ -282,11 +282,13 @@ public class ExtractingDocumentLoader extends ContentStreamLoader {
|
|||||||
/**
|
/**
|
||||||
* Lowercases the element name, but returns null for <BR>,
|
* Lowercases the element name, but returns null for <BR>,
|
||||||
* which suppresses the start-element event for lt;BR> tags.
|
* which suppresses the start-element event for lt;BR> tags.
|
||||||
|
* This also suppresses the <BODY> tags because those
|
||||||
|
* are handled internally by Tika's XHTMLContentHandler.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public String mapSafeElement(String name) {
|
public String mapSafeElement(String name) {
|
||||||
String lowerName = name.toLowerCase(Locale.ROOT);
|
String lowerName = name.toLowerCase(Locale.ROOT);
|
||||||
return lowerName.equals("br") ? null : lowerName;
|
return (lowerName.equals("br") || lowerName.equals("body")) ? null : lowerName;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -19,7 +19,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.apache.lucene.util.Constants;
|
|
||||||
import org.apache.solr.SolrTestCaseJ4;
|
import org.apache.solr.SolrTestCaseJ4;
|
||||||
import org.apache.solr.common.SolrException;
|
import org.apache.solr.common.SolrException;
|
||||||
import org.apache.solr.common.util.ContentStream;
|
import org.apache.solr.common.util.ContentStream;
|
||||||
@ -45,7 +44,6 @@ public class ExtractingRequestHandlerTest extends SolrTestCaseJ4 {
|
|||||||
public static void beforeClass() throws Exception {
|
public static void beforeClass() throws Exception {
|
||||||
assumeFalse("This test fails on UNIX with Turkish default locale (https://issues.apache.org/jira/browse/SOLR-6387)",
|
assumeFalse("This test fails on UNIX with Turkish default locale (https://issues.apache.org/jira/browse/SOLR-6387)",
|
||||||
new Locale("tr").getLanguage().equals(Locale.getDefault().getLanguage()));
|
new Locale("tr").getLanguage().equals(Locale.getDefault().getLanguage()));
|
||||||
assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/PDFBOX-3155)", Constants.JRE_IS_MINIMUM_JAVA9);
|
|
||||||
initCore("solrconfig.xml", "schema.xml", getFile("extraction/solr").getAbsolutePath());
|
initCore("solrconfig.xml", "schema.xml", getFile("extraction/solr").getAbsolutePath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,7 @@ public class MorphlineMapperTest extends MRUnitBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/SOLR-9220")
|
||||||
public void testMapper() throws Exception {
|
public void testMapper() throws Exception {
|
||||||
MorphlineMapper mapper = new MorphlineMapper();
|
MorphlineMapper mapper = new MorphlineMapper();
|
||||||
MapDriver<LongWritable, Text, Text, SolrInputDocumentWritable> mapDriver = MapDriver.newMapDriver(mapper);;
|
MapDriver<LongWritable, Text, Text, SolrInputDocumentWritable> mapDriver = MapDriver.newMapDriver(mapper);;
|
||||||
|
@ -42,7 +42,7 @@ public class SolrCellMorphlineTest extends AbstractSolrMorphlineTestBase {
|
|||||||
@BeforeClass
|
@BeforeClass
|
||||||
public static void beforeClass2() {
|
public static void beforeClass2() {
|
||||||
assumeFalse("FIXME: Morphlines currently has issues with Windows paths", Constants.WINDOWS);
|
assumeFalse("FIXME: Morphlines currently has issues with Windows paths", Constants.WINDOWS);
|
||||||
assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/PDFBOX-3155, https://issues.apache.org/jira/browse/SOLR-8876)",
|
assumeFalse("This test fails with Java 9 (https://issues.apache.org/jira/browse/SOLR-8876)",
|
||||||
Constants.JRE_IS_MINIMUM_JAVA9);
|
Constants.JRE_IS_MINIMUM_JAVA9);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -196,6 +196,7 @@ public class SolrCellMorphlineTest extends AbstractSolrMorphlineTestBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@AwaitsFix(bugUrl="https://issues.apache.org/jira/browse/SOLR-9220")
|
||||||
public void testSolrCellDocumentTypes2() throws Exception {
|
public void testSolrCellDocumentTypes2() throws Exception {
|
||||||
|
|
||||||
AbstractSolrMorphlineTestBase.setupMorphline(tempDir, "test-morphlines/solrCellDocumentTypes", false);
|
AbstractSolrMorphlineTestBase.setupMorphline(tempDir, "test-morphlines/solrCellDocumentTypes", false);
|
||||||
|
@ -523,7 +523,7 @@ public class DirectUpdateHandler2 extends UpdateHandler implements SolrCoreState
|
|||||||
final Map<String,String> commitData = new HashMap<>();
|
final Map<String,String> commitData = new HashMap<>();
|
||||||
commitData.put(SolrIndexWriter.COMMIT_TIME_MSEC_KEY,
|
commitData.put(SolrIndexWriter.COMMIT_TIME_MSEC_KEY,
|
||||||
String.valueOf(System.currentTimeMillis()));
|
String.valueOf(System.currentTimeMillis()));
|
||||||
iw.setCommitData(commitData);
|
iw.setLiveCommitData(commitData.entrySet());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void prepareCommit(CommitUpdateCommand cmd) throws IOException {
|
public void prepareCommit(CommitUpdateCommand cmd) throws IOException {
|
||||||
|
@ -265,9 +265,7 @@ public final class UpdateRequestProcessorChain implements PluginInfoInitialized
|
|||||||
static List<UpdateRequestProcessorFactory> getReqProcessors(String processor, SolrCore core) {
|
static List<UpdateRequestProcessorFactory> getReqProcessors(String processor, SolrCore core) {
|
||||||
if (processor == null) return Collections.EMPTY_LIST;
|
if (processor == null) return Collections.EMPTY_LIST;
|
||||||
List<UpdateRequestProcessorFactory> result = new ArrayList<>();
|
List<UpdateRequestProcessorFactory> result = new ArrayList<>();
|
||||||
if (processor != null) {
|
|
||||||
List<String> names = StrUtils.splitSmart(processor, ',');
|
List<String> names = StrUtils.splitSmart(processor, ',');
|
||||||
List<UpdateRequestProcessorFactory> l = new ArrayList<>(names.size());
|
|
||||||
for (String s : names) {
|
for (String s : names) {
|
||||||
s = s.trim();
|
s = s.trim();
|
||||||
if (s.isEmpty()) continue;
|
if (s.isEmpty()) continue;
|
||||||
@ -276,7 +274,6 @@ public final class UpdateRequestProcessorChain implements PluginInfoInitialized
|
|||||||
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No such processor " + s);
|
throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "No such processor " + s);
|
||||||
result.add(p);
|
result.add(p);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ public class TestConfigSetsAPI extends SolrTestCaseJ4 {
|
|||||||
FileUtils.copyDirectory(configDir, tmpConfigDir);
|
FileUtils.copyDirectory(configDir, tmpConfigDir);
|
||||||
if (oldProps != null) {
|
if (oldProps != null) {
|
||||||
FileUtils.write(new File(tmpConfigDir, ConfigSetProperties.DEFAULT_FILENAME),
|
FileUtils.write(new File(tmpConfigDir, ConfigSetProperties.DEFAULT_FILENAME),
|
||||||
getConfigSetProps(oldProps));
|
getConfigSetProps(oldProps), StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
solrCluster.uploadConfigDir(tmpConfigDir, baseConfigSetName);
|
solrCluster.uploadConfigDir(tmpConfigDir, baseConfigSetName);
|
||||||
}
|
}
|
||||||
@ -242,7 +242,7 @@ public class TestConfigSetsAPI extends SolrTestCaseJ4 {
|
|||||||
// Ensure ConfigSet is immutable
|
// Ensure ConfigSet is immutable
|
||||||
FileUtils.copyDirectory(configDir, tmpConfigDir);
|
FileUtils.copyDirectory(configDir, tmpConfigDir);
|
||||||
FileUtils.write(new File(tmpConfigDir, "configsetprops.json"),
|
FileUtils.write(new File(tmpConfigDir, "configsetprops.json"),
|
||||||
getConfigSetProps(ImmutableMap.<String, String>of("immutable", "true")));
|
getConfigSetProps(ImmutableMap.<String, String>of("immutable", "true")), StandardCharsets.UTF_8);
|
||||||
solrCluster.uploadConfigDir(tmpConfigDir, "configSet");
|
solrCluster.uploadConfigDir(tmpConfigDir, "configSet");
|
||||||
|
|
||||||
// no ConfigSet name
|
// no ConfigSet name
|
||||||
|
@ -134,7 +134,7 @@ public class TestConfigSetsAPIZkFailure extends SolrTestCaseJ4 {
|
|||||||
FileUtils.copyDirectory(configDir, tmpConfigDir);
|
FileUtils.copyDirectory(configDir, tmpConfigDir);
|
||||||
if (oldProps != null) {
|
if (oldProps != null) {
|
||||||
FileUtils.write(new File(tmpConfigDir, ConfigSetProperties.DEFAULT_FILENAME),
|
FileUtils.write(new File(tmpConfigDir, ConfigSetProperties.DEFAULT_FILENAME),
|
||||||
getConfigSetProps(oldProps));
|
getConfigSetProps(oldProps), StandardCharsets.UTF_8);
|
||||||
}
|
}
|
||||||
solrCluster.uploadConfigDir(tmpConfigDir, baseConfigSetName);
|
solrCluster.uploadConfigDir(tmpConfigDir, baseConfigSetName);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ package org.apache.solr.cloud;
|
|||||||
|
|
||||||
import javax.security.auth.login.Configuration;
|
import javax.security.auth.login.Configuration;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
|
import com.carrotsearch.randomizedtesting.annotations.ThreadLeakFilters;
|
||||||
@ -113,7 +114,7 @@ public class TestMiniSolrCloudClusterKerberos extends TestMiniSolrCloudCluster {
|
|||||||
javax.security.auth.login.Configuration.setConfiguration(conf);
|
javax.security.auth.login.Configuration.setConfiguration(conf);
|
||||||
|
|
||||||
String jaasFilePath = kdcDir+File.separator + "jaas-client.conf";
|
String jaasFilePath = kdcDir+File.separator + "jaas-client.conf";
|
||||||
FileUtils.write(new File(jaasFilePath), jaas);
|
FileUtils.write(new File(jaasFilePath), jaas, StandardCharsets.UTF_8);
|
||||||
System.setProperty("java.security.auth.login.config", jaasFilePath);
|
System.setProperty("java.security.auth.login.config", jaasFilePath);
|
||||||
System.setProperty("solr.kerberos.cookie.domain", "127.0.0.1");
|
System.setProperty("solr.kerberos.cookie.domain", "127.0.0.1");
|
||||||
System.setProperty("solr.kerberos.principal", principal);
|
System.setProperty("solr.kerberos.principal", principal);
|
||||||
|
@ -19,6 +19,7 @@ package org.apache.solr.cloud;
|
|||||||
import javax.security.auth.login.Configuration;
|
import javax.security.auth.login.Configuration;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
@ -129,7 +130,7 @@ public class TestSolrCloudWithKerberosAlt extends LuceneTestCase {
|
|||||||
Configuration.setConfiguration(conf);
|
Configuration.setConfiguration(conf);
|
||||||
|
|
||||||
String jaasFilePath = kdcDir+File.separator+"jaas-client.conf";
|
String jaasFilePath = kdcDir+File.separator+"jaas-client.conf";
|
||||||
FileUtils.write(new File(jaasFilePath), jaas);
|
FileUtils.write(new File(jaasFilePath), jaas, StandardCharsets.UTF_8);
|
||||||
System.setProperty("java.security.auth.login.config", jaasFilePath);
|
System.setProperty("java.security.auth.login.config", jaasFilePath);
|
||||||
System.setProperty("solr.kerberos.jaas.appname", "SolrClient"); // Get this app name from the jaas file
|
System.setProperty("solr.kerberos.jaas.appname", "SolrClient"); // Get this app name from the jaas file
|
||||||
System.setProperty("solr.kerberos.cookie.domain", "127.0.0.1");
|
System.setProperty("solr.kerberos.cookie.domain", "127.0.0.1");
|
||||||
|
@ -18,6 +18,7 @@ package org.apache.solr.core;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
@ -46,7 +47,7 @@ public class TestConfigSetImmutable extends RestTestBase {
|
|||||||
File tmpConfDir = new File(tmpSolrHome, confDir);
|
File tmpConfDir = new File(tmpSolrHome, confDir);
|
||||||
FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile());
|
FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile());
|
||||||
// make the ConfigSet immutable
|
// make the ConfigSet immutable
|
||||||
FileUtils.write(new File(tmpConfDir, "configsetprops.json"), new StringBuilder("{\"immutable\":\"true\"}"));
|
FileUtils.write(new File(tmpConfDir, "configsetprops.json"), new StringBuilder("{\"immutable\":\"true\"}"), StandardCharsets.UTF_8);
|
||||||
|
|
||||||
System.setProperty("managed.schema.mutable", "true");
|
System.setProperty("managed.schema.mutable", "true");
|
||||||
|
|
||||||
|
1
solr/licenses/commons-compress-1.11.jar.sha1
Normal file
1
solr/licenses/commons-compress-1.11.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
f43ce4c878078cbcfbb061353aa672a4c8e81443
|
@ -1 +0,0 @@
|
|||||||
a698750c16740fd5b3871425f4cb3bbaa87f529d
|
|
@ -1 +0,0 @@
|
|||||||
d65d291533631de29b0ee61a9527d08e24ca579a
|
|
1
solr/licenses/fontbox-2.0.1.jar.sha1
Normal file
1
solr/licenses/fontbox-2.0.1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
b9d4f0993e015f3f1ce0be9e7300cf62dd7a7f15
|
@ -1 +0,0 @@
|
|||||||
6d9a5c5814ec67178dd1d5a25bae874d4697a5b8
|
|
1
solr/licenses/isoparser-1.1.18.jar.sha1
Normal file
1
solr/licenses/isoparser-1.1.18.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
c74bdac64b22f1e245a7657149a43437aae4a9d3
|
1
solr/licenses/jackcess-2.1.3.jar.sha1
Normal file
1
solr/licenses/jackcess-2.1.3.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
fe8553847c6744d61e071ef11a6a64010731d241
|
507
solr/licenses/jackcess-LICENSE-ASL.txt
Normal file
507
solr/licenses/jackcess-LICENSE-ASL.txt
Normal file
@ -0,0 +1,507 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
|
||||||
|
APACHE POI SUBCOMPONENTS:
|
||||||
|
|
||||||
|
Apache POI includes subcomponents with separate copyright notices and
|
||||||
|
license terms. Your use of these subcomponents is subject to the terms
|
||||||
|
and conditions of the following licenses:
|
||||||
|
|
||||||
|
|
||||||
|
Office Open XML schemas (ooxml-schemas-1.0.jar)
|
||||||
|
|
||||||
|
The Office Open XML schema definitions used by Apache POI are
|
||||||
|
a part of the Office Open XML ECMA Specification (ECMA-376, [1]).
|
||||||
|
As defined in section 9.4 of the ECMA bylaws [2], this specification
|
||||||
|
is available to all interested parties without restriction:
|
||||||
|
|
||||||
|
9.4 All documents when approved shall be made available to
|
||||||
|
all interested parties without restriction.
|
||||||
|
|
||||||
|
Furthermore, both Microsoft and Adobe have granted patent licenses
|
||||||
|
to this work [3,4,5].
|
||||||
|
|
||||||
|
[1] http://www.ecma-international.org/publications/standards/Ecma-376.htm
|
||||||
|
[2] http://www.ecma-international.org/memento/Ecmabylaws.htm
|
||||||
|
[3] http://www.microsoft.com/interop/osp/
|
||||||
|
[4] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ECMA-376%20Edition%201%20Microsoft%20Patent%20Declaration.pdf
|
||||||
|
[5] http://www.ecma-international.org/publications/files/ECMA-ST/Ecma%20PATENT/ga-2006-191.pdf
|
||||||
|
|
||||||
|
|
||||||
|
DOM4J library (dom4j-1.6.1.jar)
|
||||||
|
|
||||||
|
Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
|
||||||
|
|
||||||
|
Redistribution and use of this software and associated documentation
|
||||||
|
("Software"), with or without modification, are permitted provided
|
||||||
|
that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain copyright
|
||||||
|
statements and notices. Redistributions must also contain a
|
||||||
|
copy of this document.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the
|
||||||
|
above copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The name "DOM4J" must not be used to endorse or promote
|
||||||
|
products derived from this Software without prior written
|
||||||
|
permission of MetaStuff, Ltd. For written permission,
|
||||||
|
please contact dom4j-info@metastuff.com.
|
||||||
|
|
||||||
|
4. Products derived from this Software may not be called "DOM4J"
|
||||||
|
nor may "DOM4J" appear in their names without prior written
|
||||||
|
permission of MetaStuff, Ltd. DOM4J is a registered
|
||||||
|
trademark of MetaStuff, Ltd.
|
||||||
|
|
||||||
|
5. Due credit should be given to the DOM4J Project -
|
||||||
|
http://www.dom4j.org
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS
|
||||||
|
``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT
|
||||||
|
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
||||||
|
METASTUFF, LTD. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
|
OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
|
||||||
|
JUnit test library (junit-3.8.1.jar)
|
||||||
|
|
||||||
|
Common Public License - v 1.0
|
||||||
|
|
||||||
|
THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS COMMON
|
||||||
|
PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION
|
||||||
|
OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
|
||||||
|
|
||||||
|
1. DEFINITIONS
|
||||||
|
|
||||||
|
"Contribution" means:
|
||||||
|
|
||||||
|
a) in the case of the initial Contributor, the initial code and
|
||||||
|
documentation distributed under this Agreement, and
|
||||||
|
|
||||||
|
b) in the case of each subsequent Contributor:
|
||||||
|
|
||||||
|
i) changes to the Program, and
|
||||||
|
|
||||||
|
ii) additions to the Program;
|
||||||
|
|
||||||
|
where such changes and/or additions to the Program originate from
|
||||||
|
and are distributed by that particular Contributor. A Contribution
|
||||||
|
'originates' from a Contributor if it was added to the Program by
|
||||||
|
such Contributor itself or anyone acting on such Contributor's behalf.
|
||||||
|
Contributions do not include additions to the Program which: (i) are
|
||||||
|
separate modules of software distributed in conjunction with the
|
||||||
|
Program under their own license agreement, and (ii) are not derivative
|
||||||
|
works of the Program.
|
||||||
|
|
||||||
|
"Contributor" means any person or entity that distributes the Program.
|
||||||
|
|
||||||
|
"Licensed Patents " mean patent claims licensable by a Contributor which
|
||||||
|
are necessarily infringed by the use or sale of its Contribution alone
|
||||||
|
or when combined with the Program.
|
||||||
|
|
||||||
|
"Program" means the Contributions distributed in accordance with this
|
||||||
|
Agreement.
|
||||||
|
|
||||||
|
"Recipient" means anyone who receives the Program under this Agreement,
|
||||||
|
including all Contributors.
|
||||||
|
|
||||||
|
2. GRANT OF RIGHTS
|
||||||
|
|
||||||
|
a) Subject to the terms of this Agreement, each Contributor hereby grants
|
||||||
|
Recipient a non-exclusive, worldwide, royalty-free copyright license
|
||||||
|
to reproduce, prepare derivative works of, publicly display, publicly
|
||||||
|
perform, distribute and sublicense the Contribution of such
|
||||||
|
Contributor, if any, and such derivative works, in source code and
|
||||||
|
object code form.
|
||||||
|
|
||||||
|
b) Subject to the terms of this Agreement, each Contributor hereby grants
|
||||||
|
Recipient a non-exclusive, worldwide, royalty-free patent license under
|
||||||
|
Licensed Patents to make, use, sell, offer to sell, import and
|
||||||
|
otherwise transfer the Contribution of such Contributor, if any, in
|
||||||
|
source code and object code form. This patent license shall apply to
|
||||||
|
the combination of the Contribution and the Program if, at the time
|
||||||
|
the Contribution is added by the Contributor, such addition of the
|
||||||
|
Contribution causes such combination to be covered by the Licensed
|
||||||
|
Patents. The patent license shall not apply to any other combinations
|
||||||
|
which include the Contribution. No hardware per se is licensed
|
||||||
|
hereunder.
|
||||||
|
|
||||||
|
c) Recipient understands that although each Contributor grants the
|
||||||
|
licenses to its Contributions set forth herein, no assurances are
|
||||||
|
provided by any Contributor that the Program does not infringe the
|
||||||
|
patent or other intellectual property rights of any other entity.
|
||||||
|
Each Contributor disclaims any liability to Recipient for claims
|
||||||
|
brought by any other entity based on infringement of intellectual
|
||||||
|
property rights or otherwise. As a condition to exercising the rights
|
||||||
|
and licenses granted hereunder, each Recipient hereby assumes sole
|
||||||
|
responsibility to secure any other intellectual property rights
|
||||||
|
needed, if any. For example, if a third party patent license is
|
||||||
|
required to allow Recipient to distribute the Program, it is
|
||||||
|
Recipient's responsibility to acquire that license before
|
||||||
|
distributing the Program.
|
||||||
|
|
||||||
|
d) Each Contributor represents that to its knowledge it has sufficient
|
||||||
|
copyright rights in its Contribution, if any, to grant the copyright
|
||||||
|
license set forth in this Agreement.
|
||||||
|
|
||||||
|
3. REQUIREMENTS
|
||||||
|
|
||||||
|
A Contributor may choose to distribute the Program in object code form
|
||||||
|
under its own license agreement, provided that:
|
||||||
|
|
||||||
|
a) it complies with the terms and conditions of this Agreement; and
|
||||||
|
|
||||||
|
b) its license agreement:
|
||||||
|
|
||||||
|
i) effectively disclaims on behalf of all Contributors all warranties
|
||||||
|
and conditions, express and implied, including warranties or
|
||||||
|
conditions of title and non-infringement, and implied warranties
|
||||||
|
or conditions of merchantability and fitness for a particular
|
||||||
|
purpose;
|
||||||
|
|
||||||
|
ii) effectively excludes on behalf of all Contributors all liability
|
||||||
|
for damages, including direct, indirect, special, incidental and
|
||||||
|
consequential damages, such as lost profits;
|
||||||
|
|
||||||
|
iii) states that any provisions which differ from this Agreement are
|
||||||
|
offered by that Contributor alone and not by any other party; and
|
||||||
|
|
||||||
|
iv) states that source code for the Program is available from such
|
||||||
|
Contributor, and informs licensees how to obtain it in a
|
||||||
|
reasonable manner on or through a medium customarily used for
|
||||||
|
software exchange.
|
||||||
|
|
||||||
|
When the Program is made available in source code form:
|
||||||
|
|
||||||
|
a) it must be made available under this Agreement; and
|
||||||
|
|
||||||
|
b) a copy of this Agreement must be included with each copy of
|
||||||
|
the Program.
|
||||||
|
|
||||||
|
Contributors may not remove or alter any copyright notices contained
|
||||||
|
within the Program.
|
||||||
|
|
||||||
|
Each Contributor must identify itself as the originator of its
|
||||||
|
Contribution, if any, in a manner that reasonably allows subsequent
|
||||||
|
Recipients to identify the originator of the Contribution.
|
||||||
|
|
||||||
|
4. COMMERCIAL DISTRIBUTION
|
||||||
|
|
||||||
|
Commercial distributors of software may accept certain responsibilities
|
||||||
|
with respect to end users, business partners and the like. While this
|
||||||
|
license is intended to facilitate the commercial use of the Program,
|
||||||
|
the Contributor who includes the Program in a commercial product offering
|
||||||
|
should do so in a manner which does not create potential liability for
|
||||||
|
other Contributors. Therefore, if a Contributor includes the Program
|
||||||
|
in a commercial product offering, such Contributor ("Commercial
|
||||||
|
Contributor") hereby agrees to defend and indemnify every other
|
||||||
|
Contributor ("Indemnified Contributor") against any losses, damages
|
||||||
|
and costs (collectively "Losses") arising from claims, lawsuits and
|
||||||
|
other legal actions brought by a third party against the Indemnified
|
||||||
|
Contributor to the extent caused by the acts or omissions of such
|
||||||
|
Commercial Contributor in connection with its distribution of the
|
||||||
|
Program in a commercial product offering. The obligations in this
|
||||||
|
section do not apply to any claims or Losses relating to any actual
|
||||||
|
or alleged intellectual property infringement. In order to qualify,
|
||||||
|
an Indemnified Contributor must: a) promptly notify the Commercial
|
||||||
|
Contributor in writing of such claim, and b) allow the Commercial
|
||||||
|
Contributor to control, and cooperate with the Commercial Contributor
|
||||||
|
in, the defense and any related settlement negotiations. The Indemnified
|
||||||
|
Contributor may participate in any such claim at its own expense.
|
||||||
|
|
||||||
|
For example, a Contributor might include the Program in a commercial
|
||||||
|
product offering, Product X. That Contributor is then a Commercial
|
||||||
|
Contributor. If that Commercial Contributor then makes performance
|
||||||
|
claims, or offers warranties related to Product X, those performance
|
||||||
|
claims and warranties are such Commercial Contributor's responsibility
|
||||||
|
alone. Under this section, the Commercial Contributor would have to
|
||||||
|
defend claims against the other Contributors related to those
|
||||||
|
performance claims and warranties, and if a court requires any other
|
||||||
|
Contributor to pay any damages as a result, the Commercial Contributor
|
||||||
|
must pay those damages.
|
||||||
|
|
||||||
|
5. NO WARRANTY
|
||||||
|
|
||||||
|
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED
|
||||||
|
ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER
|
||||||
|
EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR
|
||||||
|
CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE. Each Recipient is solely responsible for
|
||||||
|
determining the appropriateness of using and distributing the Program
|
||||||
|
and assumes all risks associated with its exercise of rights under this
|
||||||
|
Agreement, including but not limited to the risks and costs of program
|
||||||
|
errors, compliance with applicable laws, damage to or loss of data,
|
||||||
|
programs or equipment, and unavailability or interruption of operations.
|
||||||
|
|
||||||
|
6. DISCLAIMER OF LIABILITY
|
||||||
|
|
||||||
|
EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR
|
||||||
|
ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
|
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
|
||||||
|
WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
|
||||||
|
DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
|
||||||
|
HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||||
|
|
||||||
|
7. GENERAL
|
||||||
|
|
||||||
|
If any provision of this Agreement is invalid or unenforceable under
|
||||||
|
applicable law, it shall not affect the validity or enforceability of
|
||||||
|
the remainder of the terms of this Agreement, and without further
|
||||||
|
action by the parties hereto, such provision shall be reformed to the
|
||||||
|
minimum extent necessary to make such provision valid and enforceable.
|
||||||
|
|
||||||
|
If Recipient institutes patent litigation against a Contributor with
|
||||||
|
respect to a patent applicable to software (including a cross-claim or
|
||||||
|
counterclaim in a lawsuit), then any patent licenses granted by that
|
||||||
|
Contributor to such Recipient under this Agreement shall terminate as of
|
||||||
|
the date such litigation is filed. In addition, if Recipient institutes
|
||||||
|
patent litigation against any entity (including a cross-claim or
|
||||||
|
counterclaim in a lawsuit) alleging that the Program itself (excluding
|
||||||
|
combinations of the Program with other software or hardware) infringes
|
||||||
|
such Recipient's patent(s), then such Recipient's rights granted under
|
||||||
|
Section 2(b) shall terminate as of the date such litigation is filed.
|
||||||
|
|
||||||
|
All Recipient's rights under this Agreement shall terminate if it fails
|
||||||
|
to comply with any of the material terms or conditions of this Agreement
|
||||||
|
and does not cure such failure in a reasonable period of time after
|
||||||
|
becoming aware of such noncompliance. If all Recipient's rights under
|
||||||
|
this Agreement terminate, Recipient agrees to cease use and distribution
|
||||||
|
of the Program as soon as reasonably practicable. However, Recipient's
|
||||||
|
obligations under this Agreement and any licenses granted by Recipient
|
||||||
|
relating to the Program shall continue and survive.
|
||||||
|
|
||||||
|
Everyone is permitted to copy and distribute copies of this Agreement,
|
||||||
|
but in order to avoid inconsistency the Agreement is copyrighted and may
|
||||||
|
only be modified in the following manner. The Agreement Steward reserves
|
||||||
|
the right to publish new versions (including revisions) of this Agreement
|
||||||
|
from time to time. No one other than the Agreement Steward has the right
|
||||||
|
to modify this Agreement. IBM is the initial Agreement Steward. IBM may
|
||||||
|
assign the responsibility to serve as the Agreement Steward to a suitable
|
||||||
|
separate entity. Each new version of the Agreement will be given a
|
||||||
|
distinguishing version number. The Program (including Contributions) may
|
||||||
|
always be distributed subject to the version of the Agreement under which
|
||||||
|
it was received. In addition, after a new version of the Agreement is
|
||||||
|
published, Contributor may elect to distribute the Program (including
|
||||||
|
its Contributions) under the new version. Except as expressly stated in
|
||||||
|
Sections 2(a) and 2(b) above, Recipient receives no rights or licenses
|
||||||
|
to the intellectual property of any Contributor under this Agreement,
|
||||||
|
whether expressly, by implication, estoppel or otherwise. All rights in
|
||||||
|
the Program not expressly granted under this Agreement are reserved.
|
||||||
|
|
||||||
|
This Agreement is governed by the laws of the State of New York and the
|
||||||
|
intellectual property laws of the United States of America. No party to
|
||||||
|
this Agreement will bring a legal action under this Agreement more than
|
||||||
|
one year after the cause of action arose. Each party waives its rights
|
||||||
|
to a jury trial in any resulting litigation.
|
1
solr/licenses/jackcess-NOTICE.txt
Normal file
1
solr/licenses/jackcess-NOTICE.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
1
solr/licenses/jempbox-1.8.12.jar.sha1
Normal file
1
solr/licenses/jempbox-1.8.12.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
426450c573c19f6f2c751a7a52c11931b712c9f6
|
@ -1 +0,0 @@
|
|||||||
5a6cd3d3bf9464a8d7f06127a4847d6b0e840fe6
|
|
@ -1 +0,0 @@
|
|||||||
13930ff22d3f152bd969a63e88537d2f2adc2cd5
|
|
1
solr/licenses/metadata-extractor-2.8.1.jar.sha1
Normal file
1
solr/licenses/metadata-extractor-2.8.1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
120630f96316e0f173aedf0c88bb06c5e146ad96
|
@ -1 +0,0 @@
|
|||||||
520d4255b392f56124d693d72f2df61ba1172061
|
|
1
solr/licenses/pdfbox-2.0.1.jar.sha1
Normal file
1
solr/licenses/pdfbox-2.0.1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
dbc69649118b7eff278f228c070a40ee559e1f62
|
1
solr/licenses/pdfbox-tools-2.0.1.jar.sha1
Normal file
1
solr/licenses/pdfbox-tools-2.0.1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
a585a59c58f822884b1c5e56b670efa9241b699d
|
314
solr/licenses/pdfbox-tools-LICENSE-ASL.txt
Normal file
314
solr/licenses/pdfbox-tools-LICENSE-ASL.txt
Normal file
@ -0,0 +1,314 @@
|
|||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright [yyyy] [name of copyright owner]
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
EXTERNAL COMPONENTS
|
||||||
|
|
||||||
|
Apache PDFBox includes a number of components with separate copyright notices
|
||||||
|
and license terms. Your use of these components is subject to the terms and
|
||||||
|
conditions of the following licenses.
|
||||||
|
|
||||||
|
Contributions made to the original PDFBox project:
|
||||||
|
|
||||||
|
Copyright (c) 2002-2007, www.pdfbox.org
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of pdfbox; nor the names of its contributors may be
|
||||||
|
used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
SUCH DAMAGE.
|
||||||
|
|
||||||
|
Adobe Font Metrics (AFM) for PDF Core 14 Fonts
|
||||||
|
|
||||||
|
This file and the 14 PostScript(R) AFM files it accompanies may be used,
|
||||||
|
copied, and distributed for any purpose and without charge, with or without
|
||||||
|
modification, provided that all copyright notices are retained; that the
|
||||||
|
AFM files are not distributed without this file; that all modifications
|
||||||
|
to this file or any of the AFM files are prominently noted in the modified
|
||||||
|
file(s); and that this paragraph is not modified. Adobe Systems has no
|
||||||
|
responsibility or obligation to support the use of the AFM files.
|
||||||
|
|
||||||
|
CMaps for PDF Fonts (http://opensource.adobe.com/wiki/display/cmap/Downloads)
|
||||||
|
|
||||||
|
Copyright 1990-2009 Adobe Systems Incorporated.
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
Neither the name of Adobe Systems Incorporated nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from this
|
||||||
|
software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
||||||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||||
|
THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
Glyphlist (http://www.adobe.com/devnet/opentype/archives/glyph.html)
|
||||||
|
|
||||||
|
Copyright (c) 1997,1998,2002,2007 Adobe Systems Incorporated
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this documentation file to use, copy, publish, distribute,
|
||||||
|
sublicense, and/or sell copies of the documentation, and to permit
|
||||||
|
others to do the same, provided that:
|
||||||
|
- No modification, editing or other alteration of this document is
|
||||||
|
allowed; and
|
||||||
|
- The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies of the documentation.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
copy of this documentation file, to create their own derivative works
|
||||||
|
from the content of this document to use, copy, publish, distribute,
|
||||||
|
sublicense, and/or sell the derivative works, and to permit others to do
|
||||||
|
the same, provided that the derived work is not represented as being a
|
||||||
|
copy or version of this document.
|
||||||
|
|
||||||
|
Adobe shall not be liable to any party for any loss of revenue or profit
|
||||||
|
or for indirect, incidental, special, consequential, or other similar
|
||||||
|
damages, whether based on tort (including without limitation negligence
|
||||||
|
or strict liability), contract or other legal or equitable grounds even
|
||||||
|
if Adobe has been advised or had reason to know of the possibility of
|
||||||
|
such damages. The Adobe materials are provided on an "AS IS" basis.
|
||||||
|
Adobe specifically disclaims all express, statutory, or implied
|
||||||
|
warranties relating to the Adobe materials, including but not limited to
|
||||||
|
those concerning merchantability or fitness for a particular purpose or
|
||||||
|
non-infringement of any third party rights regarding the Adobe
|
||||||
|
materials.
|
||||||
|
|
14
solr/licenses/pdfbox-tools-NOTICE.txt
Normal file
14
solr/licenses/pdfbox-tools-NOTICE.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Apache PDFBox
|
||||||
|
Copyright 2011 The Apache Software Foundation
|
||||||
|
|
||||||
|
This product includes software developed at
|
||||||
|
The Apache Software Foundation (http://www.apache.org/).
|
||||||
|
|
||||||
|
Based on source code originally developed in the PDFBox, JempBox and
|
||||||
|
FontBox projects.
|
||||||
|
Copyright (c) 2002-2007, www.pdfbox.org
|
||||||
|
Copyright (c) 2006-2007, www.jempbox.org
|
||||||
|
|
||||||
|
Based on source code originally developed in the PaDaF project.
|
||||||
|
Copyright (c) 2010 Atos Worldline SAS
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
51058d9db469437a5ed0aa508e7de8937019e1d9
|
|
1
solr/licenses/poi-3.15-beta1.jar.sha1
Normal file
1
solr/licenses/poi-3.15-beta1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
048bb8326b81323631d9ceb4236cfbd382e56da2
|
@ -1 +0,0 @@
|
|||||||
e87975291fbb65888468b09fda2cf00e2996c2a0
|
|
1
solr/licenses/poi-ooxml-3.15-beta1.jar.sha1
Normal file
1
solr/licenses/poi-ooxml-3.15-beta1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
81085a47fdf0d74d473d605c6b3784e26731842e
|
@ -1 +0,0 @@
|
|||||||
4f015e9125a65351a2e1d27c1f8c6af0ff4a34c8
|
|
1
solr/licenses/poi-ooxml-schemas-3.15-beta1.jar.sha1
Normal file
1
solr/licenses/poi-ooxml-schemas-3.15-beta1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
f8bc979ad79908a99483337f1ca2edf78558ac20
|
@ -1 +0,0 @@
|
|||||||
c5f7987f03d92bb6d01895f043915e897f7bb50a
|
|
1
solr/licenses/poi-scratchpad-3.15-beta1.jar.sha1
Normal file
1
solr/licenses/poi-scratchpad-3.15-beta1.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
f4e276aaf97a60a1156388c9e38069122b7ea914
|
1
solr/licenses/tika-core-1.13.jar.sha1
Normal file
1
solr/licenses/tika-core-1.13.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
1305c798d41d1d7bbf12cb7c0ca184c98eed25ad
|
@ -1 +0,0 @@
|
|||||||
ee92c1d9deb07e85198fe2ff69926a7a1ce068d6
|
|
1
solr/licenses/tika-java7-1.13.jar.sha1
Normal file
1
solr/licenses/tika-java7-1.13.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
d6ffea1f1f76faa01509598b8a31f54b3da124cd
|
@ -1 +0,0 @@
|
|||||||
f3f7f9c82fbf5ce1c3948e1f77f1469393d5eb38
|
|
1
solr/licenses/tika-parsers-1.13.jar.sha1
Normal file
1
solr/licenses/tika-parsers-1.13.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
374fde67b9d35f785534b0e6c4953533c31bab5f
|
@ -1 +0,0 @@
|
|||||||
ae2a0cdac649cf9baab01156c75a655cf50ca936
|
|
1
solr/licenses/tika-xmp-1.13.jar.sha1
Normal file
1
solr/licenses/tika-xmp-1.13.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
1d73457bcc68ba7df72833baa40b29c39ce4a67e
|
@ -1 +0,0 @@
|
|||||||
ac7b48998ffbafa98467ed075ab5f8efb688bebc
|
|
@ -1 +0,0 @@
|
|||||||
71deedbdfe6a1b0dcadd6c5ae335e3e9b427524c
|
|
1
solr/licenses/vorbis-java-core-0.8.jar.sha1
Normal file
1
solr/licenses/vorbis-java-core-0.8.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
7e9937c2575cda2e3fc116415117c74f23e43fa6
|
@ -1 +0,0 @@
|
|||||||
be5b08ff4c45632975646f286a1d13e325bec59a
|
|
1
solr/licenses/vorbis-java-tika-0.8.jar.sha1
Normal file
1
solr/licenses/vorbis-java-tika-0.8.jar.sha1
Normal file
@ -0,0 +1 @@
|
|||||||
|
4ddbb27ac5884a0f0398a63d46a89d3bc87dc457
|
Loading…
x
Reference in New Issue
Block a user