annotate src/luan/modules/lucene/SupplementingConfig.java @ 1578:c922446f53aa

immutable threading
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 08 Feb 2021 14:16:19 -0700
parents 8fbcc4747091
children 46cf5137cb6b
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;
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
16 import luan.LuanMutable;
1528
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 {
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
22 private final Luan luan;
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
23 private final LuanFunction supplementer;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
24
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
25 SupplementingConfig(Version luceneVersion,MultiFieldParser mfp,Luan luan,LuanFunction supplementer) throws LuanException {
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
26 super(luceneVersion,mfp);
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
27 this.luan = new Luan(luan);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
28 LuanMutable.makeImmutable(supplementer);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
29 this.supplementer = supplementer;
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
30 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
31
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
32 @Override public IndexWriterConfig newLuceneConfig() {
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
33 IndexWriterConfig luceneConfig = super.newLuceneConfig();
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
34 SnapshotDeletionPolicy snapshotDeletionPolicy = new SnapshotDeletionPolicy(luceneConfig.getIndexDeletionPolicy());
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
35 luceneConfig.setIndexDeletionPolicy(snapshotDeletionPolicy);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
36 return luceneConfig;
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
37 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
38
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
39 @Override public MoreFieldInfo getMoreFieldInfo(Map<String,Object> storedFields) {
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
40 if( supplementer == null )
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
41 return super.getMoreFieldInfo(storedFields);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
42 try {
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1529
diff changeset
43 LuanTable tbl = toTable(storedFields);
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
44 synchronized(luan) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
45 tbl = (LuanTable)supplementer.call(luan,tbl);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
46 }
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
47 if( tbl == null ) {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
48 return super.getMoreFieldInfo(storedFields);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
49 } else {
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
50 return new MoreFieldInfo(toLucene(tbl),Collections.emptyMap());
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
51 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
52 } catch(LuanException e) {
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
53 throw new LuanRuntimeException(e);
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
54 }
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
55 }
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
56
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1529
diff changeset
57 static LuanTable toTable(Map map) throws LuanException {
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1529
diff changeset
58 LuanTable table = new LuanTable();
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
59 for( Object obj : map.entrySet() ) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
60 Map.Entry entry = (Map.Entry)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
61 Object value = entry.getValue();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
62 if( value instanceof List )
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1529
diff changeset
63 value = new LuanTable((List)value);
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
64 table.rawPut( entry.getKey(), value );
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
65 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
66 return table;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
67 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
68
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
69 static Map<String,Object> toLucene(LuanTable table) throws LuanException {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
70 Map<String,Object> map = new LinkedHashMap<String,Object>();
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
71 for( Map.Entry<Object,Object> entry : table.rawIterable() ) {
1529
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
72 String name = (String)entry.getKey();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
73 Object value = entry.getValue();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
74 if( value instanceof LuanTable ) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
75 LuanTable list = (LuanTable)value;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
76 if( !list.isList() )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
77 throw new LuanException("table value for '"+name+"' must be a list");
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
78 value = list.asList();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
79 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
80 map.put(name,value);
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
81 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
82 return map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
83 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1528
diff changeset
84
1528
3bd4d7963456 use goodjava/lucene/api
Franklin Schmidt <fschmidt@gmail.com>
parents:
diff changeset
85 }