-
Notifications
You must be signed in to change notification settings - Fork 242
/
ClassBridgeMapping.java
183 lines (151 loc) · 5.73 KB
/
ClassBridgeMapping.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.cfg;
import java.lang.annotation.ElementType;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.analysis.util.TokenizerFactory;
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Norms;
import org.hibernate.search.annotations.Store;
import org.hibernate.search.annotations.TermVector;
import org.hibernate.search.bridge.FieldBridge;
public class ClassBridgeMapping {
private final SearchMapping mapping;
private final EntityDescriptor entity;
private final Map<String, Object> classBridge;
public ClassBridgeMapping(SearchMapping mapping, EntityDescriptor entity, Class<?> impl) {
this( mapping, entity );
entity.addClassBridgeDef( classBridge );
if ( impl != null ) {
this.classBridge.put( "impl", impl );
}
}
public ClassBridgeMapping(SearchMapping mapping, EntityDescriptor entity, FieldBridge instance) {
this( mapping, entity );
entity.addClassBridgeInstanceDef( instance, classBridge );
// the given bridge instance is actually used, a class object is still required to instantiate the annotation
this.classBridge.put( "impl", void.class );
}
private ClassBridgeMapping(SearchMapping mapping, EntityDescriptor entity) {
this.mapping = mapping;
this.entity = entity;
this.classBridge = new HashMap<String, Object>();
}
public ClassBridgeMapping name(String name) {
this.classBridge.put( "name", name );
return this;
}
public ClassBridgeMapping store(Store store) {
this.classBridge.put( "store", store );
return this;
}
public ClassBridgeMapping index(Index index) {
this.classBridge.put( "index", index );
return this;
}
public ClassBridgeMapping analyze(Analyze analyze) {
this.classBridge.put( "analyze", analyze );
return this;
}
public ClassBridgeMapping norms(Norms norms) {
this.classBridge.put( "norms", norms );
return this;
}
public ClassBridgeMapping termVector(TermVector termVector) {
this.classBridge.put( "termVector", termVector );
return this;
}
/**
* @deprecated Index-time boosting will not be possible anymore starting from Lucene 7.
* You should use query-time boosting instead, for instance by calling
* {@link org.hibernate.search.query.dsl.FieldCustomization#boostedTo(float) boostedTo(float)}
* when building queries with the Hibernate Search query DSL.
*/
@Deprecated
public ClassBridgeMapping boost(float boost) {
final Map<String, Object> boostAnn = new HashMap<String, Object>();
boostAnn.put( "value", boost );
classBridge.put( "boost", boostAnn );
return this;
}
/**
* @deprecated See {@link FieldMapping#analyzer(Class)}
*/
@Deprecated
public ClassBridgeMapping analyzer(Class<?> analyzerClass) {
final Map<String, Object> analyzer = new HashMap<String, Object>();
analyzer.put( "impl", analyzerClass );
classBridge.put( "analyzer", analyzer );
return this;
}
public ClassBridgeMapping analyzer(String analyzerDef) {
final Map<String, Object> analyzer = new HashMap<String, Object>();
analyzer.put( "definition", analyzerDef );
classBridge.put( "analyzer", analyzer );
return this;
}
public ClassBridgeMapping param(String name, String value) {
Map<String, Object> param = SearchMapping.addElementToAnnotationArray( classBridge, "params" );
param.put( "name", name );
param.put( "value", value );
return this;
}
public ClassBridgeMapping classBridge(Class<?> impl) {
return new ClassBridgeMapping( mapping, entity, impl );
}
/**
* Registers the given class bridge for the currently configured entity type. Any subsequent analyzer, parameter
* etc. configurations apply to this class bridge.
*
* @param instance a class bridge instance
* @return a new {@link ClassBridgeMapping} following the method chaining pattern
* @hsearch.experimental This method is considered experimental and it may be altered or removed in future releases
* @throws org.hibernate.search.exception.SearchException in case the same bridge instance is passed more than once for the
* currently configured entity type
*/
public ClassBridgeMapping classBridgeInstance(FieldBridge instance) {
return new ClassBridgeMapping( mapping, entity, instance );
}
public FullTextFilterDefMapping fullTextFilterDef(String name, Class<?> impl) {
return new FullTextFilterDefMapping( mapping, name, impl );
}
public PropertyMapping property(String name, ElementType type) {
return new PropertyMapping( name, type, entity, mapping );
}
/**
* @deprecated See {@link org.hibernate.search.annotations.AnalyzerDef}
*/
@Deprecated
public AnalyzerDefMapping analyzerDef(String name, Class<? extends TokenizerFactory> tokenizerFactory) {
return analyzerDef( name, "", tokenizerFactory );
}
/**
* @deprecated See {@link org.hibernate.search.annotations.AnalyzerDef}
*/
@Deprecated
public AnalyzerDefMapping analyzerDef(String name, String tokenizerName, Class<? extends TokenizerFactory> tokenizerFactory) {
return new AnalyzerDefMapping( name, tokenizerName, tokenizerFactory, mapping );
}
/**
* @deprecated See {@link org.hibernate.search.annotations.AnalyzerDef}
*/
@Deprecated
public NormalizerDefMapping normalizerDef(String name) {
return new NormalizerDefMapping( name, mapping );
}
public EntityMapping entity(Class<?> entityType) {
return new EntityMapping( entityType, mapping );
}
public ProvidedIdMapping providedId() {
return new ProvidedIdMapping( mapping, entity );
}
public IndexedMapping indexed() {
return new IndexedMapping( mapping, entity );
}
}