View Javadoc
1   package ca.uhn.fhir.jpa.util;
2   
3   /*
4    * #%L
5    * HAPI FHIR JPA Server
6    * %%
7    * Copyright (C) 2014 - 2018 University Health Network
8    * %%
9    * Licensed under the Apache License, Version 2.0 (the "License");
10   * you may not use this file except in compliance with the License.
11   * You may obtain a copy of the License at
12   * 
13   *      http://www.apache.org/licenses/LICENSE-2.0
14   * 
15   * Unless required by applicable law or agreed to in writing, software
16   * distributed under the License is distributed on an "AS IS" BASIS,
17   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18   * See the License for the specific language governing permissions and
19   * limitations under the License.
20   * #L%
21   */
22  
23  import java.math.BigDecimal;
24  
25  import org.apache.lucene.document.Document;
26  import org.apache.lucene.index.IndexableField;
27  import org.hibernate.search.bridge.LuceneOptions;
28  import org.hibernate.search.bridge.TwoWayFieldBridge;
29  
30  public class BigDecimalNumericFieldBridge implements TwoWayFieldBridge {
31  	@Override
32  	public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
33  		if (value == null) {
34  			if (luceneOptions.indexNullAs() != null) {
35  				luceneOptions.addFieldToDocument(name, luceneOptions.indexNullAs(), document);
36  			}
37  		} else {
38  			BigDecimal bdValue = (BigDecimal)value;
39  			applyToLuceneOptions(luceneOptions, name, bdValue.doubleValue(), document);
40  		}
41  	}
42  
43  	@Override
44  	public final String objectToString(final Object object) {
45  		return object == null ? null : object.toString();
46  	}
47  
48  	@Override
49  	public Object get(final String name, final Document document) {
50  		final IndexableField field = document.getField(name);
51  		if (field != null) {
52  			Double doubleVal = (Double)field.numericValue();
53  			return new BigDecimal(doubleVal);
54  		} else {
55  			return null;
56  		}
57  	}
58  
59  	protected void applyToLuceneOptions(LuceneOptions luceneOptions, String name, Number value, Document document) {
60  		luceneOptions.addNumericFieldToDocument(name, value, document);
61  	}
62  }