You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by el...@apache.org on 2009/05/19 01:09:56 UTC

svn commit: r776130 - in /directory: apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ shared/trunk/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/ shared/trunk/ldap/src/main/java/org/a...

Author: elecharny
Date: Mon May 18 23:09:56 2009
New Revision: 776130

URL: http://svn.apache.org/viewvc?rev=776130&view=rev
Log:
Added the CSN and UUID SyntaxChecker into the registries. Added a isValid() static method in the CSN class

Added:
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxes/CsnSyntaxChecker.java
Modified:
    directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java
    directory/shared/trunk/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java
    directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/csn/CSN.java

Modified: directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java
URL: http://svn.apache.org/viewvc/directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java?rev=776130&r1=776129&r2=776130&view=diff
==============================================================================
--- directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java (original)
+++ directory/apacheds/trunk/schema-bootstrap/src/main/java/org/apache/directory/server/schema/bootstrap/ApacheSyntaxProducer.java Mon May 18 23:09:56 2009
@@ -26,10 +26,12 @@
 import org.apache.directory.shared.ldap.constants.SchemaConstants;
 import org.apache.directory.shared.ldap.schema.AbstractSyntax;
 import org.apache.directory.shared.ldap.schema.SyntaxChecker;
+import org.apache.directory.shared.ldap.schema.syntaxes.CsnSyntaxChecker;
 import org.apache.directory.shared.ldap.schema.syntaxes.JavaByteSyntaxChecker;
 import org.apache.directory.shared.ldap.schema.syntaxes.JavaIntegerSyntaxChecker;
 import org.apache.directory.shared.ldap.schema.syntaxes.JavaLongSyntaxChecker;
 import org.apache.directory.shared.ldap.schema.syntaxes.JavaShortSyntaxChecker;
+import org.apache.directory.shared.ldap.schema.syntaxes.UuidSyntaxChecker;
 
 
 
@@ -63,6 +65,7 @@
     {
         AbstractSyntax syntax = null;
         
+        // A Syntax for Java byte, OID = 1.3.6.1.4.1.18060.0.4.1.0.0
         syntax = new AbstractSyntax( SchemaConstants.JAVA_BYTE_SYNTAX, "a syntax for java byte values", true )
         {
             private static final long serialVersionUID = 1L;
@@ -83,9 +86,39 @@
                 return JAVA_BYTE_SYNTAX_CHECKER;
             }
         };
+        
         syntax.setSchema( "apache" );
         cb.schemaObjectProduced( this, syntax.getOid(), syntax );
 
+        // A Syntax for Java char, OID = 1.3.6.1.4.1.18060.0.4.1.0.1
+        // TODO : Define the JavaCharSyntaxChecker
+        /*
+        syntax = new AbstractSyntax( SchemaConstants.JAVA_CHAR_SYNTAX, "a syntax for java char values", true )
+        {
+            private static final long serialVersionUID = 1L;
+            private final JavaByteSyntaxChecker JAVA_CHAR_SYNTAX_CHECKER = new JavaCharSyntaxChecker();
+
+            public String getName()
+            {
+                return "JAVA_CHAR";
+            }
+            
+            public String[] getNames()
+            {
+                return new String[] { "JAVA_CHAR" };
+            }
+            
+            public SyntaxChecker getSyntaxChecker() throws NamingException
+            {
+                return JAVA_CHAR_SYNTAX_CHECKER;
+            }
+        };
+
+        syntax.setSchema( "apache" );
+        cb.schemaObjectProduced( this, syntax.getOid(), syntax );
+        */
+        
+        // A Syntax for Java short, OID = 1.3.6.1.4.1.18060.0.4.1.0.2
         syntax = new AbstractSyntax( SchemaConstants.JAVA_SHORT_SYNTAX, "a syntax for java short values", true )
         {
             private static final long serialVersionUID = 1L;
@@ -106,9 +139,36 @@
                 return JAVA_SHORT_SYNTAX_CHECKER;
             }
         };
+        
         syntax.setSchema( "apache" );
         cb.schemaObjectProduced( this, syntax.getOid(), syntax );
 
+        // A Syntax for Java long, OID = 1.3.6.1.4.1.18060.0.4.1.0.3
+        syntax = new AbstractSyntax( SchemaConstants.JAVA_LONG_SYNTAX, "a syntax for java long values", true )
+        {
+            private static final long serialVersionUID = 1L;
+            private final JavaLongSyntaxChecker JAVA_LONG_SYNTAX_CHECKER = new JavaLongSyntaxChecker();
+
+            public String getName()
+            {
+                return "JAVA_LONG";
+            }
+            
+            public String[] getNames()
+            {
+                return new String[] { "JAVA_LONG" };
+            }
+            
+            public SyntaxChecker getSyntaxChecker() throws NamingException
+            {
+                return JAVA_LONG_SYNTAX_CHECKER;
+            }
+        };
+        
+        syntax.setSchema( "apache" );
+        cb.schemaObjectProduced( this, syntax.getOid(), syntax );
+
+        // A Syntax for Java int, OID = 1.3.6.1.4.1.18060.0.4.1.0.4
         syntax = new AbstractSyntax( SchemaConstants.JAVA_INT_SYNTAX, "a syntax for java int values", true )
         {
             private static final long serialVersionUID = 1L;
@@ -129,29 +189,57 @@
                 return JAVA_INT_SYNTAX_CHECKER;
             }
         };
+        
         syntax.setSchema( "apache" );
         cb.schemaObjectProduced( this, syntax.getOid(), syntax );
 
-        syntax = new AbstractSyntax( SchemaConstants.JAVA_LONG_SYNTAX, "a syntax for java long values", true )
+        // A Syntax for UUID, OID = 1.3.6.1.1.16.1
+        syntax = new AbstractSyntax( SchemaConstants.UUID_SYNTAX, "a syntax for UUID values", false )
         {
             private static final long serialVersionUID = 1L;
-            private final JavaLongSyntaxChecker JAVA_LONG_SYNTAX_CHECKER = new JavaLongSyntaxChecker();
+            private final UuidSyntaxChecker UUID_SYNTAX_CHECKER = new UuidSyntaxChecker();
 
             public String getName()
             {
-                return "JAVA_LONG";
+                return "UUID";
             }
             
             public String[] getNames()
             {
-                return new String[] { "JAVA_LONG" };
+                return new String[] { "UUID" };
             }
             
             public SyntaxChecker getSyntaxChecker() throws NamingException
             {
-                return JAVA_LONG_SYNTAX_CHECKER;
+                return UUID_SYNTAX_CHECKER;
             }
         };
+        
+        syntax.setSchema( "apache" );
+        cb.schemaObjectProduced( this, syntax.getOid(), syntax );
+
+        // A Syntax for CSN, OID = 1.3.6.1.4.1.4203.666.11.2.1
+        syntax = new AbstractSyntax( SchemaConstants.CSN_SYNTAX, "a syntax for CSN values", false )
+        {
+            private static final long serialVersionUID = 1L;
+            private final CsnSyntaxChecker CSN_SYNTAX_CHECKER = new CsnSyntaxChecker();
+
+            public String getName()
+            {
+                return "CSN";
+            }
+            
+            public String[] getNames()
+            {
+                return new String[] { "CSN" };
+            }
+            
+            public SyntaxChecker getSyntaxChecker() throws NamingException
+            {
+                return CSN_SYNTAX_CHECKER;
+            }
+        };
+        
         syntax.setSchema( "apache" );
         cb.schemaObjectProduced( this, syntax.getOid(), syntax );
     }

Modified: directory/shared/trunk/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java?rev=776130&r1=776129&r2=776130&view=diff
==============================================================================
--- directory/shared/trunk/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java (original)
+++ directory/shared/trunk/ldap-constants/src/main/java/org/apache/directory/shared/ldap/constants/SchemaConstants.java Mon May 18 23:09:56 2009
@@ -435,6 +435,7 @@
     String UTC_TIME_SYNTAX = "1.3.6.1.4.1.1466.115.121.1.53";
     String DIRECTORY_STRING_SYNTAX = "1.3.6.1.4.1.1466.115.121.1.15";
     String UUID_SYNTAX = "1.3.6.1.1.16.1";
+    String CSN_SYNTAX = "1.3.6.1.4.1.4203.666.11.2.1";
 
     String JAVA_BYTE_SYNTAX = "1.3.6.1.4.1.18060.0.4.1.0.0";
     String JAVA_CHAR_SYNTAX = "1.3.6.1.4.1.18060.0.4.1.0.1";

Modified: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/csn/CSN.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/csn/CSN.java?rev=776130&r1=776129&r2=776130&view=diff
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/csn/CSN.java (original)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/csn/CSN.java Mon May 18 23:09:56 2009
@@ -173,8 +173,19 @@
             }
         }
         
+        int millis = 0;
+        
         // And add the milliseconds and microseconds now
-        int millis = Integer.valueOf( timestampStr.substring( 15, 21 ) );
+        try
+        {
+            millis = Integer.valueOf( timestampStr.substring( 15, 21 ) );
+        }
+        catch ( NumberFormatException nfe )
+        {
+            String message = "The microseconds part is invalid";
+            LOG.error( message );
+            throw new InvalidCSNException( message );
+        }
         
         tempTimestamp += (millis/1000);
         timestamp = tempTimestamp;
@@ -259,6 +270,128 @@
 
 
     /**
+     * Check if the given String is a valid CSN.
+     * 
+     * @param value The String to check
+     * @return <code>true</code> if the String is a valid CSN
+     */
+    public static boolean isValid( String value )
+    {
+        if ( StringTools.isEmpty( value ) )
+        {
+            return false;
+        }
+        
+        if ( value.length() != 40 )
+        {
+            return false;
+        }
+    
+        // Get the Timestamp
+        int sepTS = value.indexOf( '#' );
+        
+        if ( sepTS < 0 )
+        {
+            return false;
+        }
+        
+        String timestampStr = value.substring( 0, sepTS ).trim();
+        
+        if ( timestampStr.length() != 22 )
+        {
+            return false;
+        }
+        
+        // Let's transform the Timestamp by removing the mulliseconds and microseconds
+        String realTimestamp = timestampStr.substring( 0, 14 );
+        
+        synchronized ( sdf )
+        {
+            try
+            {
+                sdf.parse( realTimestamp ).getTime();
+            }
+            catch ( ParseException pe )
+            {
+                return false;
+            }
+        }
+        
+        // And add the milliseconds and microseconds now
+        try
+        {
+            Integer.valueOf( timestampStr.substring( 15, 21 ) );
+        }
+        catch ( NumberFormatException nfe )
+        {
+            return false;
+        }
+    
+        // Get the changeCount. It should be an hex number prefixed with '0x'
+        int sepCC = value.indexOf( '#', sepTS + 1 );
+        
+        if ( sepCC < 0 )
+        {
+            return false;
+        }
+    
+        String changeCountStr = value.substring( sepTS + 1, sepCC ).trim();
+        
+        try
+        {
+            Integer.parseInt( changeCountStr, 16 ); 
+        }
+        catch ( NumberFormatException nfe )
+        {
+            return false;
+        }
+        
+        // Get the replicaIDfalse
+        int sepRI = value.indexOf( '#', sepCC + 1 );
+        
+        if ( sepRI < 0 )
+        {
+            return false;
+        }
+    
+        String replicaIdStr = value.substring( sepCC + 1, sepRI ).trim();
+        
+        if ( StringTools.isEmpty( replicaIdStr ) )
+        {
+            return false;
+        }
+        
+        try
+        {
+            Integer.parseInt( replicaIdStr, 16 ); 
+        }
+        catch ( NumberFormatException nfe )
+        {
+            return false;
+        }
+        
+        // Get the modification number
+        if ( sepCC == value.length() )
+        {
+            return false;
+        }
+        
+        String operationNumberStr = value.substring( sepRI + 1 ).trim();
+        
+        try
+        {
+            Integer.parseInt( operationNumberStr, 16 ); 
+        }
+        catch ( NumberFormatException nfe )
+        {
+            return false;
+        }
+        
+        return true;
+    }
+
+
+    /**
      * Creates a new instance of SimpleCSN from the serialized data
      *
      * @param value The byte array which contains the serialized CSN

Added: directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxes/CsnSyntaxChecker.java
URL: http://svn.apache.org/viewvc/directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxes/CsnSyntaxChecker.java?rev=776130&view=auto
==============================================================================
--- directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxes/CsnSyntaxChecker.java (added)
+++ directory/shared/trunk/ldap/src/main/java/org/apache/directory/shared/ldap/schema/syntaxes/CsnSyntaxChecker.java Mon May 18 23:09:56 2009
@@ -0,0 +1,95 @@
+/*
+ *  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, eCopyOfUuidSyntaxCheckerither express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License. 
+ *  
+ */
+package org.apache.directory.shared.ldap.schema.syntaxes;
+
+import org.apache.directory.shared.ldap.constants.SchemaConstants;
+import org.apache.directory.shared.ldap.csn.CSN;
+import org.apache.directory.shared.ldap.csn.InvalidCSNException;
+import org.apache.directory.shared.ldap.schema.AbstractSyntaxChecker;
+import org.apache.directory.shared.ldap.schema.SyntaxChecker;
+
+
+/**
+ * An CSN syntax checker.
+ * 
+ * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+ * @version $Rev: 736240 $
+ */
+public class CsnSyntaxChecker extends AbstractSyntaxChecker
+{
+    /** the Apache assigned internal OID for this syntax checker */
+    public static final SyntaxChecker INSTANCE = new CsnSyntaxChecker();
+
+
+    /**
+     * Creates a new instance of CsnSyntaxChecker.
+     */
+    public CsnSyntaxChecker()
+    {
+        super( SchemaConstants.CSN_SYNTAX );
+    }
+
+
+    /**
+     * 
+     * Creates a new instance of CsnSyntaxChecker.
+     * 
+     * @param oid the oid to associate with this new SyntaxChecker
+     *
+     */
+    protected CsnSyntaxChecker( String oid )
+    {
+        super( oid );
+    }
+
+    
+    /**
+     * @see org.apache.directory.shared.ldap.schema.SyntaxChecker#isValidSyntax(Object)
+     * 
+     * The value is stored as a String internally.
+     * 
+     * @param value the value of some attribute with the syntax
+     * @return true if the value is in the valid syntax, false otherwise
+     */
+    public boolean isValidSyntax( Object value )
+    {
+        if ( value == null )
+        {
+            return false;
+        }
+        
+        if ( ! ( value instanceof String ) )
+        {
+            return false;
+        }
+        
+        String csnStr = (String)value;
+        
+        // It must be a valid CSN : try to create a new one.
+        try
+        {
+            return CSN.isValid( csnStr );
+        }
+        catch ( InvalidCSNException icsne )
+        {
+            return false;
+        }
+    }
+}