Author: dennisl
Date: Sun Oct 29 12:11:39 2006
New Revision: 468971

URL: http://svn.apache.org/viewvc?view=rev&rev=468971
Log:
[SCM-139] Create a utility class for scm url checking/parsing.

Added:
    
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmUrlUtils.java
   (with props)
    maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/provider/
    
maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/provider/ScmUrlUtilsTest.java
   (with props)

Added: 
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmUrlUtils.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmUrlUtils.java?view=auto&rev=468971
==============================================================================
--- 
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmUrlUtils.java
 (added)
+++ 
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmUrlUtils.java
 Sun Oct 29 12:11:39 2006
@@ -0,0 +1,160 @@
+package org.apache.maven.scm.provider;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A utility class that validates and parses scm url:s. The code here is
+ * <strong>not</strong> scm provider specific.
+ * <p>
+ * If you need methods that work for a specific scm provider, please create a
+ * similar class for that provider. E.g. create the class CvsScmUrlUtils if
+ * you need cvs specific checking/parsing.
+ * </p>
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Dennis Lundberg</a>
+ * @version $Id: ScmUrlUtils.java 372209 2006-01-25 14:30:01 +0100 (on, 25 jan 
2006) evenisse $
+ */
+public abstract class ScmUrlUtils
+{
+    private final static String ILLEGAL_SCM_URL = "The scm url must be on the 
form " +
+        "'scm:<scm provider><delimiter><provider specific part>' " +
+        "where <delimiter> can be either ':' or '|'.";
+
+    /**
+     * Get the delimiter used in the scm url.
+     *
+     * @param scmUrl A valid scm url to parse
+     * @return The delimiter used in the scm url
+     */
+    public static String getDelimiter( String scmUrl )
+    {
+        scmUrl = scmUrl.substring( 4 );
+
+        int index = scmUrl.indexOf( '|' );
+
+        if ( index == -1 )
+        {
+            index = scmUrl.indexOf( ':' );
+
+            if ( index == -1 )
+            {
+                throw new IllegalArgumentException( "The scm url does not 
contain a valid delimiter." );
+            }
+        }
+
+        return scmUrl.substring( index, index + 1 );
+    }
+
+    /**
+     * Get the scm provider from the scm url.
+     *
+     * @param scmUrl A valid scm url to parse
+     * @return The scm provider from the scm url
+     */
+    public static String getProvider( String scmUrl )
+    {
+        String delimiter = getDelimiter( scmUrl );
+
+        scmUrl = scmUrl.substring( 4 );
+
+        int firstDelimiterIndex = scmUrl.indexOf( delimiter );
+
+        return scmUrl.substring( 0, firstDelimiterIndex );
+    }
+
+    /**
+     * Get the provider specific part of the scm url.
+     *
+     * @param scmUrl A valid scm url to parse
+     * @return The provider specific part of the scm url
+     */
+    public static String getProviderSpecificPart( String scmUrl )
+    {
+        String delimiter = getDelimiter( scmUrl );
+
+        scmUrl = scmUrl.substring( 4 );
+
+        int firstDelimiterIndex = scmUrl.indexOf( delimiter );
+
+        return scmUrl.substring( firstDelimiterIndex + 1 );
+    }
+
+    /**
+     * Validate that the scm url is in the correct format.
+     * <p>
+     * <strong>Note</strong>: does not validate scm provider specific format.
+     * </p>
+     *
+     * @param scmUrl The scm url to validate
+     * @return <code>true</code> if the scm url is in the correct format,
+     * otherwise <code>false</code>
+     */
+    public static boolean isValid( String scmUrl )
+    {
+        List messages = validate( scmUrl );
+
+        return messages.isEmpty();
+    }
+
+    /**
+     * Validate that the scm url is in the correct format.
+     * <p>
+     * <strong>Note</strong>: does not validate scm provider specific format.
+     * </p>
+     *
+     * @param scmUrl The scm url to validate
+     * @return A <code>List</code> that contains the errors that occured
+     */
+    public static List validate( String scmUrl ) {
+        List messages = new ArrayList();
+
+        if ( scmUrl == null )
+        {
+            messages.add( "The scm url cannot be null." );
+
+            return messages;
+        }
+
+        if ( !scmUrl.startsWith( "scm:" ) )
+        {
+            messages.add( "The scm url must start with 'scm:'." );
+
+            return messages;
+        }
+
+        if ( scmUrl.length() < 6 )
+        {
+            messages.add( ILLEGAL_SCM_URL );
+
+            return messages;
+        }
+
+        try
+        {
+            String delimiter = getDelimiter( scmUrl );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            messages.add( e.getMessage() );
+        }
+
+        return messages;
+    }
+}

Propchange: 
maven/scm/trunk/maven-scm-api/src/main/java/org/apache/maven/scm/provider/ScmUrlUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/provider/ScmUrlUtilsTest.java
URL: 
http://svn.apache.org/viewvc/maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/provider/ScmUrlUtilsTest.java?view=auto&rev=468971
==============================================================================
--- 
maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/provider/ScmUrlUtilsTest.java
 (added)
+++ 
maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/provider/ScmUrlUtilsTest.java
 Sun Oct 29 12:11:39 2006
@@ -0,0 +1,89 @@
+package org.apache.maven.scm.provider;
+
+/*
+ * Copyright 2001-2006 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import junit.framework.TestCase;
+
+/**
+ * @author <a href="mailto:[EMAIL PROTECTED]">Dennis Lundberg</a>
+ * @version $Id: ScmUrlUtilsTest.java 372209 2006-01-25 14:30:01 +0100 (on, 25 
jan 2006) evenisse $
+ */
+public class ScmUrlUtilsTest
+    extends TestCase
+{
+    private static final String SCM_URL_CVS_COLON = 
"scm:cvs:local:repository:module";
+    private static final String SCM_URL_CVS_PIPE = 
"scm:cvs|local|repository|module";
+    private static final String SCM_URL_CVS_INVALID = 
"scm|cvs|local|repository|module";
+    private static final String SCM_URL_INVALID_1 = null;
+    private static final String SCM_URL_INVALID_2 = "scm";
+    private static final String SCM_URL_INVALID_3 = "scm:a";
+    private static final String SCM_URL_INVALID_4 = "scm:a-";
+    private static final String SCM_URL_VALID_1 = "scm:a:";
+    private static final String SCM_URL_VALID_2 = "scm:a|";
+    private static final String SCM_URL_VALID_3 = 
"scm:a:provider-specific-part";
+    private static final String SCM_URL_VALID_4 = 
"scm:a|provider-specific-part";
+
+    public void testGetDelimiter()
+        throws Exception
+    {
+        assertEquals( ":", ScmUrlUtils.getDelimiter( SCM_URL_CVS_COLON ) );
+        assertEquals( "|", ScmUrlUtils.getDelimiter( SCM_URL_CVS_PIPE ) );
+        assertEquals( "|", ScmUrlUtils.getDelimiter( SCM_URL_CVS_INVALID ) );
+    }
+
+    public void testGetProvider()
+        throws Exception
+    {
+        assertEquals( "cvs", ScmUrlUtils.getProvider( SCM_URL_CVS_COLON ) );
+        assertEquals( "cvs", ScmUrlUtils.getProvider( SCM_URL_CVS_PIPE ) );
+        assertEquals( "cvs", ScmUrlUtils.getProvider( SCM_URL_CVS_INVALID ) );
+        
+        assertEquals( "a", ScmUrlUtils.getProvider( SCM_URL_VALID_1 ) );
+        assertEquals( "a", ScmUrlUtils.getProvider( SCM_URL_VALID_2 ) );
+        assertEquals( "a", ScmUrlUtils.getProvider( SCM_URL_VALID_3 ) );
+        assertEquals( "a", ScmUrlUtils.getProvider( SCM_URL_VALID_4 ) );
+    }
+
+    public void testGetProviderSpecificPart()
+        throws Exception
+    {
+        assertEquals( "local:repository:module", 
ScmUrlUtils.getProviderSpecificPart( SCM_URL_CVS_COLON ) );
+        assertEquals( "local|repository|module", 
ScmUrlUtils.getProviderSpecificPart( SCM_URL_CVS_PIPE ) );
+        assertEquals( "local|repository|module", 
ScmUrlUtils.getProviderSpecificPart( SCM_URL_CVS_INVALID ) );
+
+        assertEquals( "", ScmUrlUtils.getProviderSpecificPart( SCM_URL_VALID_1 
) );
+        assertEquals( "", ScmUrlUtils.getProviderSpecificPart( SCM_URL_VALID_2 
) );
+        assertEquals( "provider-specific-part", 
ScmUrlUtils.getProviderSpecificPart( SCM_URL_VALID_3 ) );
+        assertEquals( "provider-specific-part", 
ScmUrlUtils.getProviderSpecificPart( SCM_URL_VALID_4 ) );
+    }
+
+    public void testIsValid()
+        throws Exception
+    {
+        assertTrue( ScmUrlUtils.isValid( SCM_URL_CVS_COLON ) );
+        assertTrue( ScmUrlUtils.isValid( SCM_URL_CVS_PIPE ) );
+        assertFalse( ScmUrlUtils.isValid( SCM_URL_CVS_INVALID ) );
+
+        assertTrue( ScmUrlUtils.isValid( SCM_URL_VALID_1 ) );
+        assertTrue( ScmUrlUtils.isValid( SCM_URL_VALID_2 ) );
+        assertTrue( ScmUrlUtils.isValid( SCM_URL_VALID_3 ) );
+        assertFalse( ScmUrlUtils.isValid( SCM_URL_INVALID_1 ) );
+        assertFalse( ScmUrlUtils.isValid( SCM_URL_INVALID_2 ) );
+        assertFalse( ScmUrlUtils.isValid( SCM_URL_INVALID_3 ) );
+        assertFalse( ScmUrlUtils.isValid( SCM_URL_INVALID_4 ) );
+    }
+}

Propchange: 
maven/scm/trunk/maven-scm-api/src/test/java/org/apache/maven/scm/provider/ScmUrlUtilsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to