You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ju...@apache.org on 2012/04/26 12:24:46 UTC

svn commit: r1330757 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype: ./ ItemDefinitionImpl.java NodeDefinitionImpl.java NodeTypeImpl.java NodeTypeManagerImpl.java PropertyDefinitionImpl.java

Author: jukka
Date: Thu Apr 26 10:24:45 2012
New Revision: 1330757

URL: http://svn.apache.org/viewvc?rev=1330757&view=rev
Log:
OAK-66: JCR Node Type Management

First draft of type implementation classes

Added:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/ItemDefinitionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeDefinitionImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/PropertyDefinitionImpl.java

Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/ItemDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/ItemDefinitionImpl.java?rev=1330757&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/ItemDefinitionImpl.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/ItemDefinitionImpl.java Thu Apr 26 10:24:45 2012
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.jackrabbit.oak.jcr.nodetype;
+
+import javax.jcr.nodetype.ItemDefinition;
+import javax.jcr.nodetype.NodeType;
+
+import org.apache.jackrabbit.oak.namepath.NameMapper;
+
+class ItemDefinitionImpl implements ItemDefinition {
+
+    private final NodeType type;
+
+    protected final NameMapper mapper;
+
+    private final String name;
+
+    private final boolean autoCreated;
+
+    private final boolean mandatory;
+
+    private final int onParentRevision;
+
+    private final boolean isProtected;
+
+    protected ItemDefinitionImpl(
+            NodeType type, NameMapper mapper, String name, boolean autoCreated,
+            boolean mandatory, int onParentRevision, boolean isProtected) {
+        this.type = type;
+        this.mapper = mapper;
+        this.name = name;
+        this.autoCreated = autoCreated;
+        this.mandatory = mandatory;
+        this.onParentRevision = onParentRevision;
+        this.isProtected = isProtected;
+    }
+
+    @Override
+    public NodeType getDeclaringNodeType() {
+        return type;
+    }
+
+    @Override
+    public String getName() {
+        return mapper.getJcrName(name);
+    }
+
+    @Override
+    public boolean isAutoCreated() {
+        return autoCreated;
+    }
+
+    @Override
+    public boolean isMandatory() {
+        return mandatory;
+    }
+
+    @Override
+    public int getOnParentVersion() {
+        return onParentRevision;
+    }
+
+    @Override
+    public boolean isProtected() {
+        return isProtected;
+    }
+
+
+}

Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeDefinitionImpl.java?rev=1330757&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeDefinitionImpl.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeDefinitionImpl.java Thu Apr 26 10:24:45 2012
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.jackrabbit.oak.jcr.nodetype;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeManager;
+
+import org.apache.jackrabbit.oak.namepath.NameMapper;
+
+class NodeDefinitionImpl extends ItemDefinitionImpl implements NodeDefinition {
+
+    private final NodeTypeManager manager;
+
+    private final String[] requiredPrimaryTypeNames;
+
+    private final String defaultPrimaryTypeName;
+
+    private final boolean allowsSameNameSiblings;
+
+    protected NodeDefinitionImpl(
+            NodeType type, NameMapper mapper, String name, boolean autoCreated,
+            boolean mandatory, int onParentRevision, boolean isProtected,
+            NodeTypeManager manager, String[] requiredPrimaryTypeNames,
+            String defaultPrimaryTypeName, boolean allowsSameNameSiblings) {
+        super(type, mapper, name, autoCreated,
+                mandatory, onParentRevision, isProtected);
+        this.manager = manager;
+        this.requiredPrimaryTypeNames = requiredPrimaryTypeNames;
+        this.defaultPrimaryTypeName = defaultPrimaryTypeName;
+        this.allowsSameNameSiblings = allowsSameNameSiblings;
+    }
+
+    @Override
+    public NodeType[] getRequiredPrimaryTypes() {
+        String[] names = getRequiredPrimaryTypeNames();
+        NodeType[] types = new NodeType[names.length];
+        for (int i = 0; i < names.length; i++) {
+            try {
+                types[i] = manager.getNodeType(names[i]);
+            } catch (RepositoryException e) {
+                throw new IllegalStateException(
+                        "Inconsistent node definition: " + this, e);
+            }
+        }
+        return types;
+    }
+
+    @Override
+    public String[] getRequiredPrimaryTypeNames() {
+        String[] names = new String[requiredPrimaryTypeNames.length];
+        for (int i = 0; i < names.length; i++) {
+            names[i] = mapper.getJcrName(requiredPrimaryTypeNames[i]);
+        }
+        return names;
+    }
+
+    @Override
+    public NodeType getDefaultPrimaryType() {
+        try {
+            return manager.getNodeType(getDefaultPrimaryTypeName());
+        } catch (RepositoryException e) {
+            throw new IllegalStateException(
+                    "Inconsistent node definition: " + this, e);
+        }
+    }
+
+    @Override
+    public String getDefaultPrimaryTypeName() {
+        return mapper.getJcrName(defaultPrimaryTypeName);
+    }
+
+    @Override
+    public boolean allowsSameNameSiblings() {
+        return allowsSameNameSiblings;
+    }
+
+}

Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeImpl.java?rev=1330757&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeImpl.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeImpl.java Thu Apr 26 10:24:45 2012
@@ -0,0 +1,245 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.jackrabbit.oak.jcr.nodetype;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Value;
+import javax.jcr.nodetype.NodeDefinition;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.nodetype.PropertyDefinition;
+
+import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter;
+import org.apache.jackrabbit.oak.namepath.NameMapper;
+
+class NodeTypeImpl implements NodeType {
+
+    private final NodeTypeManager manager;
+
+    private final NameMapper mapper;
+
+    private final String name;
+
+    private final String[] declaredSuperTypeNames;
+
+    private boolean isAbstract;
+
+    private final boolean isMixin;
+
+    private final boolean hasOrderableChildNodes;
+
+    private final String primaryItemName;
+
+    private final List<PropertyDefinition> declaredPropertyDefinitions;
+
+    private final List<NodeDefinition> declaredChildNodeDefinitions;
+
+    
+
+    public NodeTypeImpl(
+            NodeTypeManager manager, NameMapper mapper, String name,
+            String[] declaredSuperTypeNames, boolean isAbstract,
+            boolean isMixin, boolean hasOrderableChildNodes,
+            String primaryItemName,
+            List<PropertyDefinition> declaredPropertyDefinitions,
+            List<NodeDefinition> declaredChildNodeDefinitions) {
+        this.manager = manager;
+        this.mapper = mapper;
+        this.name = name;
+        this.declaredSuperTypeNames = declaredSuperTypeNames;
+        this.isAbstract = isAbstract;
+        this.isMixin = isMixin;
+        this.hasOrderableChildNodes = hasOrderableChildNodes;
+        this.primaryItemName = primaryItemName;
+        this.declaredPropertyDefinitions = declaredPropertyDefinitions;
+        this.declaredChildNodeDefinitions = declaredChildNodeDefinitions;
+    }
+
+    @Override
+    public String getName() {
+        return mapper.getJcrName(name);
+    }
+
+    @Override
+    public String[] getDeclaredSupertypeNames() {
+        String[] names = new String[declaredSuperTypeNames.length];
+        for (int i = 0; i < names.length; i++) {
+            names[i] = mapper.getJcrName(declaredSuperTypeNames[i]);
+        }
+        return names;
+    }
+
+    @Override
+    public boolean isAbstract() {
+        return isAbstract;
+    }
+
+    @Override
+    public boolean isMixin() {
+        return isMixin;
+    }
+
+    @Override
+    public boolean hasOrderableChildNodes() {
+        return hasOrderableChildNodes;
+    }
+
+    @Override
+    public boolean isQueryable() {
+        return true;
+    }
+
+    @Override
+    public String getPrimaryItemName() {
+        return mapper.getJcrName(primaryItemName);
+    }
+
+    @Override
+    public PropertyDefinition[] getDeclaredPropertyDefinitions() {
+        return declaredPropertyDefinitions.toArray(
+                new PropertyDefinition[declaredPropertyDefinitions.size()]);
+    }
+
+    @Override
+    public NodeDefinition[] getDeclaredChildNodeDefinitions() {
+        return declaredChildNodeDefinitions.toArray(
+                new NodeDefinition[declaredChildNodeDefinitions.size()]);
+    }
+
+    @Override
+    public NodeType[] getSupertypes() {
+        return null;
+    }
+
+    @Override
+    public NodeType[] getDeclaredSupertypes() {
+        return null;
+    }
+
+    @Override
+    public NodeTypeIterator getSubtypes() {
+        try {
+            Collection<NodeType> types = new ArrayList<NodeType>();
+            NodeTypeIterator iterator = manager.getAllNodeTypes();
+            while (iterator.hasNext()) {
+                NodeType type = iterator.nextNodeType();
+                if (type.isNodeType(getName()) && !isNodeType(type.getName())) {
+                    types.add(type);
+                }
+            }
+            return new NodeTypeIteratorAdapter(types);
+        } catch (RepositoryException e) {
+            throw new IllegalStateException(
+                    "Inconsistent node type: " + this, e);
+        }
+    }
+
+    @Override
+    public NodeTypeIterator getDeclaredSubtypes() {
+        try {
+            Collection<NodeType> types =
+                    new ArrayList<NodeType>(declaredSuperTypeNames.length);
+            for (int i = 0; i < declaredSuperTypeNames.length; i++) {
+                types.add(manager.getNodeType(
+                        mapper.getJcrName(declaredSuperTypeNames[i])));
+            }
+            return new NodeTypeIteratorAdapter(types);
+        } catch (RepositoryException e) {
+            throw new IllegalStateException(
+                    "Inconsistent node type: " + this, e);
+        }
+    }
+
+    @Override
+    public boolean isNodeType(String nodeTypeName) {
+        if (nodeTypeName.equals(getName())) {
+            return true;
+        }
+        for (NodeType type : getSupertypes()) {
+            if (nodeTypeName.equals(type.getName())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public PropertyDefinition[] getPropertyDefinitions() {
+        Collection<PropertyDefinition> definitions =
+                new ArrayList<PropertyDefinition>();
+        for (NodeType type : getSupertypes()) {
+            definitions.addAll(Arrays.asList(
+                    type.getDeclaredPropertyDefinitions()));
+        }
+        definitions.addAll(Arrays.asList(getDeclaredPropertyDefinitions()));
+        return definitions.toArray(new PropertyDefinition[definitions.size()]);
+    }
+
+    @Override
+    public NodeDefinition[] getChildNodeDefinitions() {
+        Collection<NodeDefinition> definitions =
+                new ArrayList<NodeDefinition>();
+        for (NodeType type : getSupertypes()) {
+            definitions.addAll(Arrays.asList(
+                    type.getDeclaredChildNodeDefinitions()));
+        }
+        definitions.addAll(Arrays.asList(getDeclaredChildNodeDefinitions()));
+        return definitions.toArray(new NodeDefinition[definitions.size()]);
+    }
+
+    @Override
+    public boolean canSetProperty(String propertyName, Value value) {
+        return true; // TODO
+    }
+
+    @Override
+    public boolean canSetProperty(String propertyName, Value[] values) {
+        return true; // TODO
+    }
+
+    @Override
+    public boolean canAddChildNode(String childNodeName) {
+        return true; // TODO
+    }
+
+    @Override
+    public boolean canAddChildNode(String childNodeName, String nodeTypeName) {
+        return true; // TODO
+    }
+
+    @Override
+    public boolean canRemoveItem(String itemName) {
+        return true; // TODO
+    }
+
+    @Override
+    public boolean canRemoveNode(String nodeName) {
+        return true; // TODO
+    }
+
+    @Override
+    public boolean canRemoveProperty(String propertyName) {
+        return true; // TODO
+    }
+
+}

Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java?rev=1330757&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java Thu Apr 26 10:24:45 2012
@@ -0,0 +1,145 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.jackrabbit.oak.jcr.nodetype;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.nodetype.InvalidNodeTypeDefinitionException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeDefinition;
+import javax.jcr.nodetype.NodeTypeExistsException;
+import javax.jcr.nodetype.NodeTypeIterator;
+import javax.jcr.nodetype.NodeTypeManager;
+import javax.jcr.nodetype.NodeTypeTemplate;
+import javax.jcr.nodetype.PropertyDefinitionTemplate;
+
+import org.apache.jackrabbit.commons.iterator.NodeTypeIteratorAdapter;
+import org.apache.jackrabbit.oak.namepath.NameMapper;
+
+public class NodeTypeManagerImpl implements NodeTypeManager {
+
+    private final NameMapper mapper;
+
+    private final Map<String, NodeType> types = new HashMap<String, NodeType>();
+
+    public NodeTypeManagerImpl(NameMapper mapper) {
+        this.mapper = mapper;
+    }
+
+    @Override
+    public boolean hasNodeType(String name) throws RepositoryException {
+        return types.containsKey(mapper.getOakName(name));
+    }
+
+    @Override
+    public NodeType getNodeType(String name)
+            throws NoSuchNodeTypeException, RepositoryException {
+        NodeType type = types.get(mapper.getOakName(name));
+        if (type == null) {
+            throw new NoSuchNodeTypeException("Unknown node type: " + name);
+        }
+        return type;
+    }
+
+    @Override
+    public NodeTypeIterator getAllNodeTypes() throws RepositoryException {
+        return new NodeTypeIteratorAdapter(types.values());
+    }
+
+    @Override
+    public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException {
+        Collection<NodeType> primary = new ArrayList<NodeType>();
+        for (NodeType type : types.values()) {
+            if (!type.isMixin()) {
+                primary.add(type);
+            }
+        }
+        return new NodeTypeIteratorAdapter(primary);
+    }
+
+    @Override
+    public NodeTypeIterator getMixinNodeTypes() throws RepositoryException {
+        Collection<NodeType> mixin = new ArrayList<NodeType>();
+        for (NodeType type : types.values()) {
+            if (type.isMixin()) {
+                mixin.add(type);
+            }
+        }
+        return new NodeTypeIteratorAdapter(mixin);
+    }
+
+    @Override
+    public NodeTypeTemplate createNodeTypeTemplate()
+            throws UnsupportedRepositoryOperationException, RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public NodeTypeTemplate createNodeTypeTemplate(NodeTypeDefinition ntd)
+            throws UnsupportedRepositoryOperationException, RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public NodeDefinitionTemplate createNodeDefinitionTemplate()
+            throws UnsupportedRepositoryOperationException, RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public PropertyDefinitionTemplate createPropertyDefinitionTemplate()
+            throws UnsupportedRepositoryOperationException, RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public NodeType registerNodeType(NodeTypeDefinition ntd, boolean allowUpdate)
+            throws InvalidNodeTypeDefinitionException, NodeTypeExistsException,
+            UnsupportedRepositoryOperationException, RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public NodeTypeIterator registerNodeTypes(NodeTypeDefinition[] ntds,
+            boolean allowUpdate) throws InvalidNodeTypeDefinitionException,
+            NodeTypeExistsException, UnsupportedRepositoryOperationException,
+            RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public void unregisterNodeType(String name)
+            throws UnsupportedRepositoryOperationException,
+            NoSuchNodeTypeException, RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+    @Override
+    public void unregisterNodeTypes(String[] names)
+            throws UnsupportedRepositoryOperationException,
+            NoSuchNodeTypeException, RepositoryException {
+        throw new UnsupportedRepositoryOperationException();
+    }
+
+}

Added: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/PropertyDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/PropertyDefinitionImpl.java?rev=1330757&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/PropertyDefinitionImpl.java (added)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/PropertyDefinitionImpl.java Thu Apr 26 10:24:45 2012
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.apache.jackrabbit.oak.jcr.nodetype;
+
+import javax.jcr.Value;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.PropertyDefinition;
+
+import org.apache.jackrabbit.oak.namepath.NameMapper;
+
+class PropertyDefinitionImpl
+        extends ItemDefinitionImpl implements PropertyDefinition {
+
+    private final int requiredType;
+
+    private final boolean multiple;
+
+    public PropertyDefinitionImpl(
+            NodeType type, NameMapper mapper, String name, boolean autoCreated,
+            boolean mandatory, int onParentRevision, boolean isProtected,
+            int requiredType, boolean multiple) {
+        super(type, mapper, name, autoCreated,
+                mandatory, onParentRevision, isProtected);
+        this.requiredType = requiredType;
+        this.multiple = multiple;
+    }
+
+    @Override
+    public int getRequiredType() {
+        return requiredType;
+    }
+
+    @Override
+    public String[] getValueConstraints() {
+        return new String[0];
+    }
+
+    @Override
+    public Value[] getDefaultValues() {
+        return new Value[0];
+    }
+
+    @Override
+    public boolean isMultiple() {
+        return multiple;
+    }
+
+    @Override
+    public String[] getAvailableQueryOperators() {
+        return new String[0];
+    }
+
+    @Override
+    public boolean isFullTextSearchable() {
+        return false;
+    }
+
+    @Override
+    public boolean isQueryOrderable() {
+        return false;
+    }
+
+}