diff --git a/src/main/java/org/vufind/solr/indexing/PrintBrowseHeadings.java b/src/main/java/org/vufind/solr/indexing/PrintBrowseHeadings.java index da59bc7..02eaeef 100644 --- a/src/main/java/org/vufind/solr/indexing/PrintBrowseHeadings.java +++ b/src/main/java/org/vufind/solr/indexing/PrintBrowseHeadings.java @@ -135,7 +135,7 @@ private boolean isLinkedFromBibData(String heading) } - private SolrFieldIterator getBibIterator(String bibPath, String luceneField) + private SolrFieldIterator getBibIterator(String bibPath, String luceneField, String filter) throws Exception { String fieldIteratorClass = "org.vufind.solr.indexing.SolrFieldIterator"; @@ -170,18 +170,19 @@ private SolrFieldIterator getBibIterator(String bibPath, String luceneField) } return (SolrFieldIterator)(Class.forName(fieldIteratorClass) - .getConstructor(String.class, String.class) - .newInstance(bibPath, luceneField)); + .getConstructor(String.class, String.class, String.class) + .newInstance(bibPath, luceneField, filter)); } public void create(String bibPath, String luceneField, String authPath, - String outFile) + String outFile, + String filter) throws Exception { - try (SolrFieldIterator bibFieldIterator = getBibIterator(bibPath, luceneField)) { + try (SolrFieldIterator bibFieldIterator = getBibIterator(bibPath, luceneField, filter)) { this.luceneField = luceneField; IndexReader bibReader = DirectoryReader.open(FSDirectory.open(new File(bibPath).toPath())); @@ -192,7 +193,8 @@ public void create(String bibPath, try { nonprefAuthFieldIterator = new SolrFieldIterator(authPath, System.getProperty("field.insteadof", - "insteadOf")); + "insteadOf"), + filter); } catch (IndexNotFoundException e) { // If no data has been written to the index yet, this exception // might get thrown; in that case, we should skip loading authority @@ -215,8 +217,7 @@ public boolean isSatisfiedBy(Object obj) { return true; } } - } - ); + }); nonprefAuthFieldIterator.close(); } @@ -231,7 +232,7 @@ public boolean isSatisfiedBy(Object obj) { public static void main(String args[]) throws Exception { - if (args.length != 3 && args.length != 4) { + if (args.length != 3 && args.length != 4 && args.length != 5) { System.err.println ("Usage: PrintBrowseHeadings " + " "); @@ -239,16 +240,24 @@ public static void main(String args[]) System.err.println ("Usage: PrintBrowseHeadings " + " "); + System.err.println("\nor:\n"); + System.err.println + ("Usage: PrintBrowseHeadings " + + " "); System.exit(0); } PrintBrowseHeadings self = new PrintBrowseHeadings(); - if (args.length == 4) { - self.create(args[0], args[1], args[2], args[3]); + if (args.length == 5) { + String authPath = (args[2] == null || args[2].isEmpty()) ? null : args[2]; + String filter = (args[4] == null || args[4].isEmpty()) ? null : args[4]; + self.create (args[0], args[1], authPath, args[3], filter); + } else if (args.length == 4) { + self.create(args[0], args[1], args[2], args[3], null); } else { - self.create(args[0], args[1], null, args[2]); + self.create(args[0], args[1], null, args[2], null); } } } diff --git a/src/main/java/org/vufind/solr/indexing/SolrFieldIterator.java b/src/main/java/org/vufind/solr/indexing/SolrFieldIterator.java index c0889c7..898d8ae 100644 --- a/src/main/java/org/vufind/solr/indexing/SolrFieldIterator.java +++ b/src/main/java/org/vufind/solr/indexing/SolrFieldIterator.java @@ -32,6 +32,7 @@ public class SolrFieldIterator implements AutoCloseable, Iterator, protected List leafReaders; private String field; + private String filter; private Normalizer normalizer; TermsEnum tenum = null; @@ -39,7 +40,7 @@ public class SolrFieldIterator implements AutoCloseable, Iterator, private BrowseEntry nextEntry = null; private boolean exhausted = false; - public SolrFieldIterator(String indexPath, String field) throws Exception + public SolrFieldIterator(String indexPath, String field, String filter) throws Exception { // Open our composite reader (a top-level DirectoryReader that // contains one reader per segment in our index). @@ -54,6 +55,7 @@ public SolrFieldIterator(String indexPath, String field) throws Exception leafReaders = new ArrayList<>(reader.getContext().leaves()); this.field = field; + this.filter = filter; String normalizerClass = System.getProperty("browse.normalizer"); normalizer = NormalizerFactory.getNormalizer(normalizerClass); diff --git a/src/main/java/org/vufind/solr/indexing/StoredFieldIterator.java b/src/main/java/org/vufind/solr/indexing/StoredFieldIterator.java index 7c03efc..21ca5c5 100644 --- a/src/main/java/org/vufind/solr/indexing/StoredFieldIterator.java +++ b/src/main/java/org/vufind/solr/indexing/StoredFieldIterator.java @@ -33,7 +33,7 @@ public class StoredFieldIterator extends SolrFieldIterator public StoredFieldIterator(String indexPath, String field, String filter) throws Exception { - super (indexPath, field); + super (indexPath, field, filter); this.filter = filter; sortField = Utils.getEnvironment("SORTFIELD");