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 2010/09/09 17:11:55 UTC

svn commit: r995454 - /jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefReader.java

Author: stefan
Date: Thu Sep  9 15:11:55 2010
New Revision: 995454

URL: http://svn.apache.org/viewvc?rev=995454&view=rev
Log:
JCR-2723: Exception when missing namespace in CND file should have clearer message

Modified:
    jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefReader.java

Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefReader.java?rev=995454&r1=995453&r2=995454&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefReader.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/cnd/CompactNodeTypeDefReader.java Thu Sep  9 15:11:55 2010
@@ -16,30 +16,29 @@
  */
 package org.apache.jackrabbit.commons.cnd;
 
-import java.io.Reader;
-import java.util.LinkedList;
-import java.util.List;
+import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeDefinitionBuilder;
+import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeTypeDefinitionBuilder;
+import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractPropertyDefinitionBuilder;
 
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.query.qom.QueryObjectModelConstants;
 import javax.jcr.version.OnParentVersionAction;
-
-import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeDefinitionBuilder;
-import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractNodeTypeDefinitionBuilder;
-import org.apache.jackrabbit.commons.cnd.DefinitionBuilderFactory.AbstractPropertyDefinitionBuilder;
+import java.io.Reader;
+import java.util.LinkedList;
+import java.util.List;
 
 /**
  * CompactNodeTypeDefReader. Parses node type definitions written in the compact
  * node type definition format and provides a list of type definition
  * objects that can then be used to register node types.
- *
+ * <p/>
  * The CompactNodeTypeDefReader is parameterizable in the type of the node type
  * definition <code>T</code> and the type of the namespace mapping <code>N</code>
  * which the parser should build. For types <code>T</code> and <code>N</code> the
  * parser's constructor takes a {@link DefinitionBuilderFactory} for
  * <code>T</code> and <code>N</code>.
- *
+ * <p/>
  * <p/>
  * The EBNF grammar of the compact node type definition:<br>
  * <pre>
@@ -129,13 +128,13 @@ public class CompactNodeTypeDefReader<T,
     /**
      * Creates a new CND reader and parses the given stream.
      *
-     * @param r a reader to the CND
+     * @param r        a reader to the CND
      * @param systemId a informative id of the given stream
-     * @param factory builder for creating new definitions and handling namespaces
+     * @param factory  builder for creating new definitions and handling namespaces
      * @throws ParseException if an error occurs
      */
     public CompactNodeTypeDefReader(Reader r, String systemId,
-            DefinitionBuilderFactory<T, N> factory) throws ParseException {
+                                    DefinitionBuilderFactory<T, N> factory) throws ParseException {
 
         this(r, systemId, null, factory);
     }
@@ -143,14 +142,14 @@ public class CompactNodeTypeDefReader<T,
     /**
      * Creates a new CND reader and parses the given stream.
      *
-     * @param r a reader to the CND
-     * @param systemId a informative id of the given stream
+     * @param r         a reader to the CND
+     * @param systemId  a informative id of the given stream
      * @param nsMapping default namespace mapping to use
-     * @param factory builder for creating new definitions and handling namespaces
+     * @param factory   builder for creating new definitions and handling namespaces
      * @throws ParseException if an error occurs
      */
     public CompactNodeTypeDefReader(Reader r, String systemId, N nsMapping,
-            DefinitionBuilderFactory<T, N> factory) throws ParseException {
+                                    DefinitionBuilderFactory<T, N> factory) throws ParseException {
 
         super();
 
@@ -166,6 +165,7 @@ public class CompactNodeTypeDefReader<T,
 
     /**
      * Returns the previously assigned system id
+     *
      * @return the system id
      */
     public String getSystemId() {
@@ -214,16 +214,15 @@ public class CompactNodeTypeDefReader<T,
                 doItemDefs(ntd);
                 nodeTypeDefs.add(ntd.build());
             }
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail(e);
         }
     }
 
 
-
     /**
      * processes the namespace declaration
+     *
      * @return <code>true</code> if a namespace was parsed
      * @throws ParseException if an error during parsing occurs
      */
@@ -245,8 +244,7 @@ public class CompactNodeTypeDefReader<T,
         }
         try {
             factory.setNamespace(prefix, uri);
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail("Error setting namespace mapping " + currentToken, e);
         }
         nextToken();
@@ -266,8 +264,7 @@ public class CompactNodeTypeDefReader<T,
         nextToken();
         try {
             ntd.setName(currentToken);
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail("Error setting node type name " + currentToken, e);
         }
 
@@ -284,15 +281,14 @@ public class CompactNodeTypeDefReader<T,
      * @param ntd nodetype definition builder
      * @throws ParseException if an error during parsing occurs
      */
-    private void doSuperTypes(AbstractNodeTypeDefinitionBuilder<T> ntd) throws ParseException  {
+    private void doSuperTypes(AbstractNodeTypeDefinitionBuilder<T> ntd) throws ParseException {
 
         if (currentTokenEquals(Lexer.EXTENDS))
             do {
                 nextToken();
                 try {
                     ntd.addSupertype(currentToken);
-                }
-                catch (RepositoryException e) {
+                } catch (RepositoryException e) {
                     lexer.fail("Error setting super type of " + ntd.getName() + " to " + currentToken, e);
                 }
                 nextToken();
@@ -333,8 +329,7 @@ public class CompactNodeTypeDefReader<T,
                     hasOption = false;
                 }
             }
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail("Error setting option of " + ntd.getName() + " to " + currentToken, e);
         }
     }
@@ -360,15 +355,13 @@ public class CompactNodeTypeDefReader<T,
                         pd.setRequiredType(PropertyType.STRING);
                         pd.setFullTextSearchable(true);
                         pd.setQueryOrderable(true);
-                    }
-                    catch (RepositoryException e) {
+                    } catch (RepositoryException e) {
                         lexer.fail("Error setting property definitions of " + pd.getName() + " to " + currentToken, e);
                     }
                     nextToken();
                     doPropertyDefinition(pd, ntd);
                     pd.build();
-                }
-                catch (RepositoryException e) {
+                } catch (RepositoryException e) {
                     lexer.fail("Error building property definition for " + ntd.getName(), e);
                 }
 
@@ -382,16 +375,14 @@ public class CompactNodeTypeDefReader<T,
                         nd.setMandatory(false);
                         nd.setOnParentVersion(OnParentVersionAction.COPY);
                         nd.setProtected(false);
-                    }
-                    catch (RepositoryException e) {
+                    } catch (RepositoryException e) {
                         lexer.fail("Error setting node definitions of " + nd.getName() + " to " + currentToken, e);
                     }
 
                     nextToken();
                     doChildNodeDefinition(nd, ntd);
                     nd.build();
-                }
-                catch (RepositoryException e) {
+                } catch (RepositoryException e) {
                     lexer.fail("Error building node definition for " + ntd.getName(), e);
                 }
             }
@@ -401,7 +392,7 @@ public class CompactNodeTypeDefReader<T,
     /**
      * processes the property definition
      *
-     * @param pd property definition builder
+     * @param pd  property definition builder
      * @param ntd declaring nodetype definition builder
      * @throws ParseException if an error during parsing occur
      */
@@ -410,9 +401,8 @@ public class CompactNodeTypeDefReader<T,
 
         try {
             pd.setName(currentToken);
-        }
-        catch (RepositoryException e) {
-            lexer.fail("Error setting name of " + pd.getName() + " to " + currentToken);
+        } catch (RepositoryException e) {
+            lexer.fail("Invalid property name '" + currentToken + "': " + e.getMessage());
         }
         nextToken();
         doPropertyType(pd);
@@ -463,8 +453,7 @@ public class CompactNodeTypeDefReader<T,
             } else {
                 lexer.fail("Unkown property type '" + currentToken + "' specified");
             }
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail("Error setting property type of " + pd.getName() + " to " + currentToken);
         }
         nextToken();
@@ -477,12 +466,12 @@ public class CompactNodeTypeDefReader<T,
     /**
      * processes the property attributes
      *
-     * @param pd property definition builder
+     * @param pd  property definition builder
      * @param ntd declaring nodetype definition builder
      * @throws ParseException if an error during parsing occurs
      */
     private void doPropertyAttributes(AbstractPropertyDefinitionBuilder<T> pd,
-            AbstractNodeTypeDefinitionBuilder<T> ntd) throws ParseException {
+                                      AbstractNodeTypeDefinitionBuilder<T> ntd) throws ParseException {
 
         try {
             while (currentTokenEquals(Lexer.PROP_ATTRIBUTE)) {
@@ -517,8 +506,7 @@ public class CompactNodeTypeDefReader<T,
                 }
                 nextToken();
             }
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail("Error setting property attribute of " + pd.getName() + " to " + currentToken);
         }
     }
@@ -560,8 +548,7 @@ public class CompactNodeTypeDefReader<T,
         }
         try {
             pd.setAvailableQueryOperators(queryOps.toArray(new String[queryOps.size()]));
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail("Error query operators for " + pd.getName() + " to " + currentToken);
         }
     }
@@ -583,9 +570,8 @@ public class CompactNodeTypeDefReader<T,
             nextToken();
             try {
                 pd.addDefaultValues(currentToken);
-            }
-            catch (RepositoryException e) {
-                lexer.fail("Error adding default value for " + pd.getName() + " to " + currentToken);
+            } catch (RepositoryException e) {
+                lexer.fail("Error adding default value for " + pd.getName() + " to " + currentToken + ": " + e.getMessage());
             }
             nextToken();
         } while (currentTokenEquals(Lexer.LIST_DELIMITER));
@@ -608,9 +594,8 @@ public class CompactNodeTypeDefReader<T,
             nextToken();
             try {
                 pd.addValueConstraint(currentToken);
-            }
-            catch (RepositoryException e) {
-                lexer.fail("Error adding value constraint for " + pd.getName() + " to " + currentToken);
+            } catch (RepositoryException e) {
+                lexer.fail("Error adding value constraint for " + pd.getName() + " to " + currentToken + ": " + e.getMessage());
             }
             nextToken();
         } while (currentTokenEquals(Lexer.LIST_DELIMITER));
@@ -619,7 +604,7 @@ public class CompactNodeTypeDefReader<T,
     /**
      * processes the childnode definition
      *
-     * @param nd node definition builder
+     * @param nd  node definition builder
      * @param ntd declaring nodetype definition builder
      * @throws ParseException if an error during parsing occurs
      */
@@ -629,9 +614,8 @@ public class CompactNodeTypeDefReader<T,
 
         try {
             nd.setName(currentToken);
-        }
-        catch (RepositoryException e) {
-            lexer.fail("Error setting child name of " + nd.getName() + " to " + currentToken);
+        } catch (RepositoryException e) {
+            lexer.fail("Invalid child node name '" + currentToken + "': " + e.getMessage());
         }
         nextToken();
         doChildNodeRequiredTypes(nd);
@@ -656,9 +640,8 @@ public class CompactNodeTypeDefReader<T,
             nextToken();
             try {
                 nd.addRequiredPrimaryType(currentToken);
-            }
-            catch (RepositoryException e) {
-                lexer.fail("Error setting required primary type of " + nd.getName() + " to " + currentToken);
+            } catch (RepositoryException e) {
+                lexer.fail("Error setting required primary type of " + nd.getName() + " to " + currentToken + ": " + e.getMessage());
             }
             nextToken();
         } while (currentTokenEquals(Lexer.LIST_DELIMITER));
@@ -680,9 +663,8 @@ public class CompactNodeTypeDefReader<T,
         nextToken();
         try {
             nd.setDefaultPrimaryType(currentToken);
-        }
-        catch (RepositoryException e) {
-            lexer.fail("Error setting default primary type of " + nd.getName() + " to " + currentToken);
+        } catch (RepositoryException e) {
+            lexer.fail("Error setting default primary type of " + nd.getName() + " to " + currentToken + ": " + e.getMessage());
         }
         nextToken();
     }
@@ -690,7 +672,7 @@ public class CompactNodeTypeDefReader<T,
     /**
      * processes the childnode attributes
      *
-     * @param nd node definition builder
+     * @param nd  node definition builder
      * @param ntd declaring nodetype definition builder
      * @throws ParseException if an error during parsing occurs
      */
@@ -725,8 +707,7 @@ public class CompactNodeTypeDefReader<T,
                 }
                 nextToken();
             }
-        }
-        catch (RepositoryException e) {
+        } catch (RepositoryException e) {
             lexer.fail("Error setting child node attribute of " + nd.getName() + " to " + currentToken);
         }
     }
@@ -734,8 +715,8 @@ public class CompactNodeTypeDefReader<T,
     /**
      * Gets the next token from the underlying lexer.
      *
-     * @see Lexer#getNextToken()
      * @throws ParseException if the lexer fails to get the next token.
+     * @see Lexer#getNextToken()
      */
     private void nextToken() throws ParseException {
         currentToken = lexer.getNextToken();