
org.modeshape.jcr.index.elasticsearch.EsIndexColumn Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of modeshape-elasticsearch-index-provider
Show all versions of modeshape-elasticsearch-index-provider
ModeShape index provider that uses Elasticsearch engine
The newest version!
/*
* ModeShape (http://www.modeshape.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.modeshape.jcr.index.elasticsearch;
import java.util.Collection;
import org.modeshape.jcr.ExecutionContext;
import org.modeshape.jcr.api.value.DateTime;
import org.modeshape.jcr.value.PropertyType;
import static org.modeshape.jcr.value.PropertyType.BOOLEAN;
import static org.modeshape.jcr.value.PropertyType.DATE;
import static org.modeshape.jcr.value.PropertyType.LONG;
import static org.modeshape.jcr.value.PropertyType.NAME;
import static org.modeshape.jcr.value.PropertyType.REFERENCE;
import static org.modeshape.jcr.value.PropertyType.SIMPLEREFERENCE;
import static org.modeshape.jcr.value.PropertyType.URI;
import static org.modeshape.jcr.value.PropertyType.WEAKREFERENCE;
import org.modeshape.jcr.value.ValueFactories;
/**
* Elasticsearch field definition.
*
* Provides definition for elasticsearch field and implements value
* conversations with accordance of the column type.
*
* @author kulikov
*/
public class EsIndexColumn {
public final static String LENGTH_PREFIX = "length_";
public final static String LOWERCASE_PREFIX = "lowercase_";
public final static String UPPERCASE_PREFIX = "uppercase_";
private final String name;
private final PropertyType type;
private final ValueFactories valueFactories;
/**
* Creates new field definition.
*
* @param context ModeShape execution context
* @param name name of this column.
* @param type JCR type of this column.
*/
public EsIndexColumn(ExecutionContext context, String name, int type ) {
this.valueFactories = context.getValueFactories();
this.name = name;
this.type = PropertyType.valueFor(type);
}
/**
* Gets the name of this column.
*
* @return the name of the column.
*/
public String getName() {
return name;
}
/**
* Gets the name of the field to store length.
*
* @return
*/
public String getLengthFieldName() {
return LENGTH_PREFIX + name;
}
/**
* Gets the name of the field used for store lowered case value.
*
* @return field name.
*/
public String getLowerCaseFieldName() {
return LOWERCASE_PREFIX + name;
}
/**
* Gets the name of the field used for store upper case value.
*
* @return field name.
*/
public String getUpperCaseFieldName() {
return UPPERCASE_PREFIX + name;
}
/**
* Gets type of this column.
*
* @return Jcr type of this column.
*/
public PropertyType getType() {
return type;
}
/**
* Converts representation of the given value using type conversation rules
* between JCR type of this column and Elasticsearch core type of this column.
*
* @param value value to be converted.
* @return converted value.
*/
protected Object columnValue(Object value) {
switch (type) {
case PATH:
case NAME:
case STRING:
case REFERENCE:
case SIMPLEREFERENCE:
case WEAKREFERENCE:
case URI:
return valueFactories.getStringFactory().create(value);
case DATE :
return ((DateTime) value).getMilliseconds();
default :
return value;
}
}
protected String stringValue(Object value) {
return valueFactories.getStringFactory().create(value);
}
/**
* Converts array of values.
* @param value
* @return
*/
protected Object[] columnValues(Object[] value) {
Object[] res = new Object[value.length];
for (int i = 0; i < value.length; i++) {
res[i] = columnValue(value[i]);
}
return res;
}
/**
* Converts given value to the value of JCR type of this column.
*
* @param value value to be converted.
* @return converted value.
*/
protected Object cast(Object value) {
switch (type) {
case STRING :
return valueFactories.getStringFactory().create(value);
case LONG :
return valueFactories.getLongFactory().create(value);
case NAME :
return valueFactories.getNameFactory().create(value);
case PATH :
return valueFactories.getPathFactory().create(value);
case DATE :
return valueFactories.getDateFactory().create(value);
case BOOLEAN :
return valueFactories.getBooleanFactory().create(value);
case URI :
return valueFactories.getUriFactory().create(value);
case REFERENCE :
return valueFactories.getReferenceFactory().create(value);
case SIMPLEREFERENCE :
return valueFactories.getSimpleReferenceFactory().create(value);
case WEAKREFERENCE :
return valueFactories.getWeakReferenceFactory().create(value);
default :
return value;
}
}
/**
* Converts array of values.
*/
protected Object[] cast(Object[] values) {
Object[] res = new Object[values.length];
for (int i = 0; i < res.length; i++) {
res[i] = cast(values[i]);
}
return res;
}
/**
* Converts array of values.
*/
protected Object[] cast(Collection values) {
Object[] res = new Object[values.size()];
int i = 0;
for (Object value : values) {
res[i++] = cast(value);
}
return res;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy