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 15:52:12 UTC
svn commit: r1330853 - in /jackrabbit/oak/trunk/oak-jcr/src/main:
java/org/apache/jackrabbit/oak/jcr/nodetype/
resources/org/apache/jackrabbit/oak/jcr/nodetype/
Author: jukka
Date: Thu Apr 26 13:52:12 2012
New Revision: 1330853
URL: http://svn.apache.org/viewvc?rev=1330853&view=rev
Log:
OAK-66: JCR Node Type Management
Fix more CND parsing problems
Modified:
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/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd
Modified: 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=1330853&r1=1330852&r2=1330853&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeImpl.java Thu Apr 26 13:52:12 2012
@@ -43,13 +43,14 @@ import org.apache.jackrabbit.oak.namepat
class NodeTypeImpl implements NodeType {
private static final Pattern CND_PATTERN = Pattern.compile(
- "( > (\\S+(, \\S+)*))?(\n mixin)?(\n abstract)?"
- + "(\n orderable)?(\n primaryitem (\\S+))?(\n.*)*");
+ "( > (([\\S, ]+)))?(\n mixin)?(\n abstract)?"
+ + "(\n orderable)?(\n primaryitem (\\S+))?\n?(.*)",
+ Pattern.DOTALL);
private static final Pattern DEF_PATTERN = Pattern.compile(
- " ([\\+\\-]) (\\S+) \\((.+?)\\)( = (\\S+))"
+ " ([\\+\\-]) (\\S+) \\((\\S+?)\\)( = (\\S+))?"
+ "(( (mandatory|autocreated|protected|multiple))*)"
- + "( ([A-Z])+)?.*");
+ + "( ([A-Z]+))?(.*)");
private final NodeTypeManager manager;
@@ -98,11 +99,12 @@ class NodeTypeImpl implements NodeType {
}
String defs = matcher.group(9);
- if (defs != null) {
- defs = defs.trim();
+ if (defs != null && defs.length() > 0) {
for (String line : defs.split("\n")) {
matcher = DEF_PATTERN.matcher(line);
- matcher.matches();
+ if (!matcher.matches()) {
+ continue;
+ }
String defName = matcher.group(2);
String defType = matcher.group(3);
@@ -113,9 +115,9 @@ class NodeTypeImpl implements NodeType {
boolean multiple = matcher.group(6).contains(" multiple");
int onParentVersionAction = OnParentVersionAction.COPY;
- if (matcher.group(9) != null) {
+ if (matcher.group(10) != null) {
onParentVersionAction =
- OnParentVersionAction.valueFromName(matcher.group(9));
+ OnParentVersionAction.valueFromName(matcher.group(10));
}
if ("+".equals(matcher.group(1))) {
@@ -123,16 +125,48 @@ class NodeTypeImpl implements NodeType {
this, mapper, defName, autoCreated, mandatory,
onParentVersionAction, isProtected, manager,
defType.split(", "), matcher.group(5), false));
- } else {
+ } else if ("+".equals(matcher.group(1))) {
declaredPropertyDefinitions.add(new PropertyDefinitionImpl(
this, mapper, defName, autoCreated, mandatory,
onParentVersionAction, isProtected,
- PropertyType.valueFromName(defType), multiple));
+ valueFromName(defType), multiple));
}
}
}
}
+ private static int valueFromName(String name) {
+ if (name.equalsIgnoreCase(PropertyType.TYPENAME_STRING)) {
+ return PropertyType.STRING;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_BINARY)) {
+ return PropertyType.BINARY;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_BOOLEAN)) {
+ return PropertyType.BOOLEAN;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_LONG)) {
+ return PropertyType.LONG;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_DOUBLE)) {
+ return PropertyType.DOUBLE;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_DECIMAL)) {
+ return PropertyType.DECIMAL;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_DATE)) {
+ return PropertyType.DATE;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_NAME)) {
+ return PropertyType.NAME;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_PATH)) {
+ return PropertyType.PATH;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_REFERENCE)) {
+ return PropertyType.REFERENCE;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_WEAKREFERENCE)) {
+ return PropertyType.WEAKREFERENCE;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_URI)) {
+ return PropertyType.URI;
+ } else if (name.equalsIgnoreCase(PropertyType.TYPENAME_UNDEFINED)) {
+ return PropertyType.UNDEFINED;
+ } else {
+ throw new IllegalArgumentException("unknown type: " + name);
+ }
+ }
+
@Override
public String getName() {
return mapper.getJcrName(name);
Modified: 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=1330853&r1=1330852&r2=1330853&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/nodetype/NodeTypeManagerImpl.java Thu Apr 26 13:52:12 2012
@@ -45,7 +45,7 @@ import org.apache.jackrabbit.oak.namepat
public class NodeTypeManagerImpl implements NodeTypeManager {
private static final Pattern CND_PATTERN =
- Pattern.compile("\\[(\\S*)?\\]([.\n]*?)\n\n");
+ Pattern.compile("\\[(\\S*)?\\](.*?)\n\n", Pattern.DOTALL);
private final NameMapper mapper;
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd?rev=1330853&r1=1330852&r2=1330853&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/resources/org/apache/jackrabbit/oak/jcr/nodetype/builtin_nodetypes.cnd Thu Apr 26 13:52:12 2012
@@ -95,7 +95,7 @@
[nt:resource] > mix:mimeType, mix:lastModified, mix:referenceable
primaryitem jcr:data
- jcr:data (BINARY) mandatory
-
+
/**
* This mixin node type can be used to add standardized title and description
* properties to a node.
@@ -618,7 +618,7 @@
orderable
+ * (rep:Members) = rep:Members protected multiple
- * (WEAKREFERENCE) protected < 'rep:Authorizable'
-
+
// -----------------------------------------------------------------------------
// J A C K R A B B I T R E T E N T I O N M A N A G E M E N T
// -----------------------------------------------------------------------------
@@ -627,3 +627,4 @@
mixin
- rep:hold (UNDEFINED) protected multiple IGNORE
- rep:retentionPolicy (UNDEFINED) protected IGNORE
+