Index: modeshape-integration-tests/src/test/java/org/modeshape/test/integration/ClusteringTest.java =================================================================== --- modeshape-integration-tests/src/test/java/org/modeshape/test/integration/ClusteringTest.java (revision 2611) +++ modeshape-integration-tests/src/test/java/org/modeshape/test/integration/ClusteringTest.java (working copy) @@ -49,6 +49,7 @@ import javax.jcr.nodetype.PropertyDefinitionTemplate; import javax.jcr.observation.Event; import javax.jcr.observation.EventIterator; import javax.jcr.observation.EventListener; +import javax.jcr.query.qom.QueryObjectModelConstants; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; @@ -357,7 +358,7 @@ public class ClusteringTest { PropertyDefinitionTemplate prop = typeManager1.createPropertyDefinitionTemplate(); prop.setName("prop"); - prop.setAvailableQueryOperators(new String[] {"="}); + prop.setAvailableQueryOperators(new String[] {QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO}); prop.setMultiple(true); prop.setRequiredType(PropertyType.STRING); nodeType.getPropertyDefinitionTemplates().add(prop); Index: modeshape-jcr/src/main/java/org/modeshape/jcr/JcrPropertyDefinition.java =================================================================== --- modeshape-jcr/src/main/java/org/modeshape/jcr/JcrPropertyDefinition.java (revision 2611) +++ modeshape-jcr/src/main/java/org/modeshape/jcr/JcrPropertyDefinition.java (working copy) @@ -24,6 +24,9 @@ package org.modeshape.jcr; import java.math.BigDecimal; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import java.util.UUID; import java.util.regex.Pattern; import javax.jcr.Node; @@ -45,6 +48,7 @@ import org.modeshape.graph.property.ValueFactories; import org.modeshape.graph.property.ValueFactory; import org.modeshape.graph.property.ValueFormatException; import org.modeshape.graph.property.basic.JodaDateTime; +import org.modeshape.graph.query.model.Operator; import org.modeshape.jcr.api.query.qom.QueryObjectModelConstants; /** @@ -54,6 +58,27 @@ import org.modeshape.jcr.api.query.qom.QueryObjectModelConstants; @Immutable class JcrPropertyDefinition extends JcrItemDefinition implements PropertyDefinition { + protected static final Map OPERATORS_BY_JCR_NAME; + + static { + Map map = new HashMap(); + map.put(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, Operator.EQUAL_TO); + map.put(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN, Operator.GREATER_THAN); + map.put(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO, Operator.GREATER_THAN_OR_EQUAL_TO); + map.put(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN, Operator.LESS_THAN); + map.put(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO, Operator.LESS_THAN_OR_EQUAL_TO); + map.put(QueryObjectModelConstants.JCR_OPERATOR_LIKE, Operator.LIKE); + map.put(QueryObjectModelConstants.JCR_OPERATOR_NOT_EQUAL_TO, Operator.NOT_EQUAL_TO); + OPERATORS_BY_JCR_NAME = Collections.unmodifiableMap(map); + } + + static Operator operatorFromSymbol( String jcrConstantValue ) { + Operator op = OPERATORS_BY_JCR_NAME.get(jcrConstantValue); + if (op == null) op = Operator.forSymbol(jcrConstantValue); + assert op != null; + return op; + } + private final Value[] defaultValues; private final int requiredType; private final String[] valueConstraints; @@ -183,6 +208,11 @@ class JcrPropertyDefinition extends JcrItemDefinition implements PropertyDefinit return queryOperators; } + /** + * {@inheritDoc} + * + * @see javax.jcr.nodetype.PropertyDefinition#getAvailableQueryOperators() + */ @Override public String[] getAvailableQueryOperators() { return queryOperators; Index: modeshape-jcr/src/main/java/org/modeshape/jcr/NodeTypeSchemata.java =================================================================== --- modeshape-jcr/src/main/java/org/modeshape/jcr/NodeTypeSchemata.java (revision 2611) +++ modeshape-jcr/src/main/java/org/modeshape/jcr/NodeTypeSchemata.java (working copy) @@ -25,7 +25,6 @@ package org.modeshape.jcr; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.EnumSet; import java.util.HashMap; import java.util.HashSet; @@ -54,7 +53,6 @@ import org.modeshape.graph.query.model.SelectorName; import org.modeshape.graph.query.model.TypeSystem; import org.modeshape.graph.query.validate.ImmutableSchemata; import org.modeshape.graph.query.validate.Schemata; -import org.modeshape.jcr.api.query.qom.QueryObjectModelConstants; import org.modeshape.search.lucene.IndexRules; import org.modeshape.search.lucene.LuceneSearchEngine; import com.google.common.collect.LinkedHashMultimap; @@ -70,19 +68,6 @@ class NodeTypeSchemata implements Schemata { protected static final boolean DEFAULT_CAN_CONTAIN_REFERENCES = true; protected static final boolean DEFAULT_FULL_TEXT_SEARCHABLE = true; - protected static final Map OPERATORS_BY_JCR_NAME; - - static { - Map map = new HashMap(); - map.put(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO, Operator.EQUAL_TO); - map.put(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN, Operator.GREATER_THAN); - map.put(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO, Operator.GREATER_THAN_OR_EQUAL_TO); - map.put(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN, Operator.LESS_THAN); - map.put(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO, Operator.LESS_THAN_OR_EQUAL_TO); - map.put(QueryObjectModelConstants.JCR_OPERATOR_LIKE, Operator.LIKE); - map.put(QueryObjectModelConstants.JCR_OPERATOR_NOT_EQUAL_TO, Operator.NOT_EQUAL_TO); - OPERATORS_BY_JCR_NAME = Collections.unmodifiableMap(map); - } private final Schemata schemata; private final Map types; @@ -291,8 +276,7 @@ class NodeTypeSchemata implements Schemata { if (ops == null || ops.length == 0) return EnumSet.allOf(Operator.class); Set result = new HashSet(); for (String symbol : ops) { - Operator op = OPERATORS_BY_JCR_NAME.get(symbol); - if (op == null) op = Operator.forSymbol(symbol); + Operator op = JcrPropertyDefinition.operatorFromSymbol(symbol); assert op != null; result.add(op); } Index: modeshape-jcr/src/main/java/org/modeshape/jcr/RepositoryNodeTypeManager.java =================================================================== --- modeshape-jcr/src/main/java/org/modeshape/jcr/RepositoryNodeTypeManager.java (revision 2611) +++ modeshape-jcr/src/main/java/org/modeshape/jcr/RepositoryNodeTypeManager.java (working copy) @@ -1170,7 +1170,6 @@ class RepositoryNodeTypeManager implements JcrSystemObserver { for (int i = 0; i < childNodeDefs.length; i++) { projectChildNodeDefinitionOnto(childNodeDefs[i], nodeTypePath, batch); } - } /** @@ -1215,6 +1214,12 @@ class RepositoryNodeTypeManager implements JcrSystemObserver { propsList.add(propertyFactory.create(JcrLexicon.REQUIRED_TYPE, PropertyType.nameFromValue(jcrPropDef.getRequiredType()) .toUpperCase())); + List symbols = new ArrayList(); + for (String value : jcrPropDef.getAvailableQueryOperators()) { + if (value != null) symbols.add(value); + } + propsList.add(propertyFactory.create(JcrLexicon.QUERY_OPERATORS, symbols)); + Value[] defaultValues = jcrPropDef.getDefaultValues(); if (defaultValues.length > 0) { String[] defaultsAsString = new String[defaultValues.length];