annotate src/luan/modules/lucene/SupplementingConfig.java @ 1529:e6d808f40bbc

minor
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 27 Jul 2020 12:54:31 -0600
parents 3bd4d7963456
children b89212fd04b5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
1 package luan.modules.lucene;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
2
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
3 import java.util.Map;
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
4 import java.util.LinkedHashMap;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
5 import java.util.List;
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
6 import java.util.Collections;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
7 import org.apache.lucene.index.IndexWriterConfig;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
8 import org.apache.lucene.index.SnapshotDeletionPolicy;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
9 import org.apache.lucene.util.Version;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
10 import goodjava.lucene.queryparser.MultiFieldParser;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
11 import goodjava.lucene.api.MultiFieldParserConfig;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
12 import goodjava.lucene.api.MoreFieldInfo;
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
13 import luan.Luan;
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
14 import luan.LuanFunction;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
15 import luan.LuanTable;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
16 import luan.LuanCloner;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
17 import luan.LuanException;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
18 import luan.LuanRuntimeException;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
19
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
20
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
21 final class SupplementingConfig extends MultiFieldParserConfig {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
22 private final LuanFunction supplementer;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24 SupplementingConfig(Version luceneVersion,MultiFieldParser mfp,LuanFunction supplementer) {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
25 super(luceneVersion,mfp);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 LuanCloner cloner = new LuanCloner(LuanCloner.Type.COMPLETE);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
27 this.supplementer = (LuanFunction)cloner.get(supplementer);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
28 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
29
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 public IndexWriterConfig newLuceneConfig() {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31 IndexWriterConfig luceneConfig = super.newLuceneConfig();
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
32 SnapshotDeletionPolicy snapshotDeletionPolicy = new SnapshotDeletionPolicy(luceneConfig.getIndexDeletionPolicy());
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 luceneConfig.setIndexDeletionPolicy(snapshotDeletionPolicy);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 return luceneConfig;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 public MoreFieldInfo getMoreFieldInfo(Map<String,Object> storedFields) {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38 if( supplementer == null )
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
39 return super.getMoreFieldInfo(storedFields);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 try {
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
41 LuanTable tbl = toTable(supplementer.luan(),storedFields);
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 tbl = (LuanTable)supplementer.call(tbl);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
43 if( tbl == null ) {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
44 return super.getMoreFieldInfo(storedFields);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
45 } else {
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
46 return new MoreFieldInfo(toLucene(tbl),Collections.emptyMap());
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 } catch(LuanException e) {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 throw new LuanRuntimeException(e);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
50 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 }
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
52
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
53 static LuanTable toTable(Luan luan,Map map) throws LuanException {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
54 LuanTable table = new LuanTable(luan);
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
55 for( Object obj : map.entrySet() ) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
56 Map.Entry entry = (Map.Entry)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
57 Object value = entry.getValue();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
58 if( value instanceof List )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
59 value = new LuanTable(luan,(List)value);
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
60 table.rawPut( entry.getKey(), value );
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
61 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
62 return table;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
63 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
64
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
65 static Map<String,Object> toLucene(LuanTable table) throws LuanException {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
66 Map<String,Object> map = new LinkedHashMap<String,Object>();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
67 for( Map.Entry<Object,Object> entry : table.iterable() ) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
68 String name = (String)entry.getKey();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
69 Object value = entry.getValue();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
70 if( value instanceof LuanTable ) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
71 LuanTable list = (LuanTable)value;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
72 if( !list.isList() )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
73 throw new LuanException("table value for '"+name+"' must be a list");
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
74 value = list.asList();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
75 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
76 map.put(name,value);
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
77 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
78 return map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
79 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
80
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
81 }