public Property createProperty(
     String name,
     String value,
     ResourcePropertyMapping mapping,
     Property.Store store,
     Property.Index index)
     throws SearchEngineException {
   Property property;
   if (mapping.getReverse() == ReverseType.NO) {
     property = createProperty(name, value, store, index, mapping.getTermVector());
   } else if (mapping.getReverse() == ReverseType.READER) {
     property = createProperty(name, new ReverseStringReader(value), mapping.getTermVector());
   } else if (mapping.getReverse() == ReverseType.STRING) {
     property =
         createProperty(name, StringUtils.reverse(value), store, index, mapping.getTermVector());
   } else {
     throw new SearchEngineException("Unsupported Reverse type [" + mapping.getReverse() + "]");
   }
   property.setBoost(mapping.getBoost());
   if (mapping.isOmitNorms() != null) {
     property.setOmitNorms(mapping.isOmitNorms());
   }
   if (mapping.isOmitTf() != null) {
     property.setOmitTf(mapping.isOmitTf());
   }
   property.setBoost(mapping.getBoost());
   ((ElasticProperty) property).setPropertyMapping(mapping);
   return property;
 }
 public Property createProperty(
     String value, ResourcePropertyMapping mapping, Property.Store store, Property.Index index)
     throws SearchEngineException {
   return createProperty(mapping.getPath().getPath(), value, mapping, store, index);
 }
 public Property createProperty(String name, String value, ResourcePropertyMapping mapping)
     throws SearchEngineException {
   return createProperty(name, value, mapping, mapping.getStore(), mapping.getIndex());
 }
 public Property createProperty(String value, ResourcePropertyMapping mapping)
     throws SearchEngineException {
   return createProperty(mapping.getPath().getPath(), value, mapping);
 }