You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by st...@apache.org on 2009/05/13 17:22:52 UTC

svn commit: r774397 - in /jackrabbit/trunk: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/compact/Lexer.java

Author: stefan
Date: Wed May 13 15:22:50 2009
New Revision: 774397

URL: http://svn.apache.org/viewvc?rev=774397&view=rev
Log:
JCR-1591: JSR 283: NodeType Management (WIP...)
JCR-2091: Searchability settings in PropertyDefinition (WIP...)

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java
    jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/compact/Lexer.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java?rev=774397&r1=774396&r2=774397&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/nodetype/compact/CompactNodeTypeDefReader.java Wed May 13 15:22:50 2009
@@ -45,6 +45,7 @@
 import javax.jcr.ValueFormatException;
 import javax.jcr.Value;
 import javax.jcr.ValueFactory;
+import javax.jcr.query.qom.QueryObjectModelConstants;
 import javax.jcr.version.OnParentVersionAction;
 import java.io.Reader;
 import java.util.ArrayList;
@@ -231,6 +232,8 @@
             NodeTypeDef ntd = new NodeTypeDef();
             ntd.setOrderableChildNodes(false);
             ntd.setMixin(false);
+            ntd.setAbstract(false);
+            ntd.setQueryable(true);
             ntd.setPrimaryItemName(null);
             doNodeTypeName(ntd);
             doSuperTypes(ntd);
@@ -333,7 +336,7 @@
                 ntd.setAbstract(true);
             } else if (currentTokenEquals(Lexer.NOQUERY)) {
                 nextToken();
-                // ntd.setNoQuery(true);
+                ntd.setQueryable(false);
             } else if (currentTokenEquals(Lexer.PRIMARYITEM)) {
                 nextToken();
                 ntd.setPrimaryItemName(toQName(currentToken));
@@ -367,6 +370,18 @@
                 pdi.setRequiredType(PropertyType.STRING);
                 pdi.setValueConstraints(null);
 
+                pdi.setFullTextSearchable(true);
+                pdi.setQueryOrderable(true);
+                pdi.setAvailableQueryOperators(new String[]{
+                        QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO,
+                        QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN,
+                        QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO,
+                        QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN,
+                        QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO,
+                        QueryObjectModelConstants.JCR_OPERATOR_LIKE,
+                        QueryObjectModelConstants.JCR_OPERATOR_NOT_EQUAL_TO
+                });
+
                 nextToken();
                 doPropertyDefinition(pdi, ntd);
                 propertyDefinitions.add(pdi);
@@ -448,6 +463,12 @@
             pdi.setRequiredType(PropertyType.PATH);
         } else if (currentTokenEquals(Lexer.REFERENCE)) {
             pdi.setRequiredType(PropertyType.REFERENCE);
+        } else if (currentTokenEquals(Lexer.WEAKREFERENCE)) {
+            pdi.setRequiredType(PropertyType.WEAKREFERENCE);
+        } else if (currentTokenEquals(Lexer.URI)) {
+            pdi.setRequiredType(PropertyType.URI);
+        } else if (currentTokenEquals(Lexer.DECIMAL)) {
+            pdi.setRequiredType(PropertyType.DECIMAL);
         } else if (currentTokenEquals(Lexer.UNDEFINED)) {
             pdi.setRequiredType(PropertyType.UNDEFINED);
         } else {
@@ -500,12 +521,60 @@
                 pdi.setOnParentVersion(OnParentVersionAction.IGNORE);
             } else if (currentTokenEquals(Lexer.ABORT)) {
                 pdi.setOnParentVersion(OnParentVersionAction.ABORT);
+            } else if (currentTokenEquals(Lexer.NOFULLTEXT)) {
+                pdi.setFullTextSearchable(false);
+            } else if (currentTokenEquals(Lexer.NOQUERYORDER)) {
+                pdi.setQueryOrderable(false);
+            } else if (currentTokenEquals(Lexer.QUERYOPS)) {
+                doPropertyQueryOperators(pdi);
             }
             nextToken();
         }
     }
 
     /**
+     * processes the property value constraints
+     *
+     * @param pdi
+     * @throws ParseException
+     */
+    private void doPropertyQueryOperators(PropDefImpl pdi) throws ParseException {
+        if (!currentTokenEquals(Lexer.QUERYOPS)) {
+            return;
+        }
+        nextToken();
+        if (!currentTokenEquals(Lexer.SINGLE_QUOTE)) {
+            lexer.fail("Missing \' delimiter for beginning of query operators list");
+        }
+        List queryOps = new ArrayList();
+        do {
+            nextToken();
+            if (currentTokenEquals(Lexer.QUEROPS_EQUAL)) {
+                queryOps.add(QueryObjectModelConstants.JCR_OPERATOR_EQUAL_TO);
+            } else if (currentTokenEquals(Lexer.QUEROPS_NOTEQUAL)) {
+                queryOps.add(QueryObjectModelConstants.JCR_OPERATOR_NOT_EQUAL_TO);
+            } else if (currentTokenEquals(Lexer.QUEROPS_LESSTHAN)) {
+                queryOps.add(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN);
+            } else if (currentTokenEquals(Lexer.QUEROPS_LESSTHANOREQUAL)) {
+                queryOps.add(QueryObjectModelConstants.JCR_OPERATOR_LESS_THAN_OR_EQUAL_TO);
+            } else if (currentTokenEquals(Lexer.QUEROPS_GREATERTHAN)) {
+                queryOps.add(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN);
+            } else if (currentTokenEquals(Lexer.QUEROPS_GREATERTHANOREQUAL)) {
+                queryOps.add(QueryObjectModelConstants.JCR_OPERATOR_GREATER_THAN_OR_EQUAL_TO);
+            } else if (currentTokenEquals(Lexer.QUEROPS_LIKE)) {
+                queryOps.add(QueryObjectModelConstants.JCR_OPERATOR_LIKE);
+            } else if (currentTokenEquals(Lexer.SINGLE_QUOTE)) {
+                nextToken();
+                break;
+            } else {
+                lexer.fail("'" + currentToken + "' is not a valid query operator");
+            }
+            nextToken();
+        } while (currentTokenEquals(Lexer.LIST_DELIMITER));
+        pdi.setAvailableQueryOperators((String[]) queryOps.toArray(new String[queryOps.size()]));
+    }
+
+    /**
      * processes the property default values
      *
      * @param pdi

Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/compact/Lexer.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/compact/Lexer.java?rev=774397&r1=774396&r2=774397&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/compact/Lexer.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/nodetype/compact/Lexer.java Wed May 13 15:22:50 2009
@@ -16,9 +16,12 @@
  */
 package org.apache.jackrabbit.spi.commons.nodetype.compact;
 
+import javax.jcr.query.qom.QueryObjectModelConstants;
 import java.io.StreamTokenizer;
 import java.io.Reader;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
 
 /**
  * Lexer
@@ -48,6 +51,9 @@
     public static final String[] MANDATORY = new String[]{"mandatory", "man", "m"};
     public static final String[] PROTECTED = new String[]{"protected", "pro", "p"};
     public static final String[] MULTIPLE = new String[]{"multiple", "mul", "*"};
+    public static final String[] QUERYOPS = new String[]{"queryops", "qop"};
+    public static final String[] NOFULLTEXT = new String[]{"nofulltext", "nof"};
+    public static final String[] NOQUERYORDER = new String[]{"noqueryorder", "nqord"};
 
     public static final String[] COPY = new String[]{"copy", "Copy", "COPY"};
     public static final String[] VERSION = new String[]{"version", "Version", "VERSION"};
@@ -56,17 +62,33 @@
     public static final String[] IGNORE = new String[]{"ignore", "Ignore", "IGNORE"};
     public static final String[] ABORT = new String[]{"abort", "Abort", "ABORT"};
 
-    public static final String[] ATTRIBUTE = new String[]{"primary", "pri", "!",
-                                                          "autocreated", "aut", "a",
-                                                          "mandatory", "man", "m",
-                                                          "protected", "pro", "p",
-                                                          "multiple", "mul", "*",
-                                                          "copy", "Copy", "COPY",
-                                                          "version", "Version", "VERSION",
-                                                          "initialize", "Initialize", "INITIALIZE",
-                                                          "compute", "Compute", "COMPUTE",
-                                                          "ignore", "Ignore", "IGNORE",
-                                                          "abort", "Abort", "ABORT"};
+    public static final String[] ATTRIBUTE;
+    static {
+        ArrayList<String> attr = new ArrayList<String>();
+        attr.addAll(Arrays.asList(PRIMARY));
+        attr.addAll(Arrays.asList(AUTOCREATED));
+        attr.addAll(Arrays.asList(MANDATORY));
+        attr.addAll(Arrays.asList(PROTECTED));
+        attr.addAll(Arrays.asList(MULTIPLE));
+        attr.addAll(Arrays.asList(QUERYOPS));
+        attr.addAll(Arrays.asList(NOFULLTEXT));
+        attr.addAll(Arrays.asList(NOQUERYORDER));
+        attr.addAll(Arrays.asList(COPY));
+        attr.addAll(Arrays.asList(VERSION));
+        attr.addAll(Arrays.asList(INITIALIZE));
+        attr.addAll(Arrays.asList(COMPUTE));
+        attr.addAll(Arrays.asList(IGNORE));
+        attr.addAll(Arrays.asList(ABORT));
+        ATTRIBUTE = attr.toArray(new String[attr.size()]);
+    }
+
+    public static final String QUEROPS_EQUAL = "=";
+    public static final String QUEROPS_NOTEQUAL = "<>";
+    public static final String QUEROPS_LESSTHAN = "<";
+    public static final String QUEROPS_LESSTHANOREQUAL = "<=";
+    public static final String QUEROPS_GREATERTHAN = ">";
+    public static final String QUEROPS_GREATERTHANOREQUAL = ">=";
+    public static final String QUEROPS_LIKE = "LIKE";
 
     public static final String[] STRING = {"string", "String", "STRING"};
     public static final String[] BINARY = {"binary", "Binary", "BINARY"};
@@ -77,6 +99,9 @@
     public static final String[] NAME = {"name", "Name", "NAME"};
     public static final String[] PATH = {"path", "Path", "PATH"};
     public static final String[] REFERENCE = {"reference", "Reference", "REFERENCE"};
+    public static final String[] WEAKREFERENCE = {"weakreference", "WeakReference", "WEAKREFERENCE"};
+    public static final String[] URI = {"uri", "Uri", "URI"};
+    public static final String[] DECIMAL = {"decimal", "Decimal", "DECIMAL"};
 
     public static final String[] UNDEFINED = new String[]{"undefined", "Undefined", "UNDEFINED", "*"};