Author: bentmann
Date: Tue Mar 30 11:20:29 2010
New Revision: 929083

URL: http://svn.apache.org/viewvc?rev=929083&view=rev
Log:
[MNG-3616] Null Pointer Exception when mirrorOf missing from mirror in 
settings.xml

Modified:
    
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
    
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java

Modified: 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java?rev=929083&r1=929082&r2=929083&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/main/java/org/apache/maven/settings/validation/DefaultSettingsValidator.java
 Tue Mar 30 11:20:29 2010
@@ -21,12 +21,15 @@ package org.apache.maven.settings.valida
 
 import java.util.List;
 
+import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Profile;
 import org.apache.maven.settings.Repository;
+import org.apache.maven.settings.Server;
 import org.apache.maven.settings.Settings;
 import org.apache.maven.settings.building.SettingsProblem;
 import org.apache.maven.settings.building.SettingsProblemCollector;
 import org.codehaus.plexus.component.annotations.Component;
+import org.codehaus.plexus.util.StringUtils;
 
 /**
  * @author Milos Kleint
@@ -36,16 +39,69 @@ public class DefaultSettingsValidator
     implements SettingsValidator
 {
 
+    private static final String ID_REGEX = "[A-Za-z0-9_\\-.]+";
+
     public void validate( Settings settings, SettingsProblemCollector problems 
)
     {
+        if ( settings.isUsePluginRegistry() )
+        {
+            addWarn( problems, "'usePluginRegistry' is deprecated and has no 
effect." );
+        }
+
+        List<String> pluginGroups = settings.getPluginGroups();
+
+        if ( pluginGroups != null )
+        {
+            for ( int i = 0; i < pluginGroups.size(); i++ )
+            {
+                String pluginGroup = pluginGroups.get( i ).trim();
+
+                if ( StringUtils.isBlank( pluginGroup ) )
+                {
+                    addError( problems, "'pluginGroups.pluginGroup[" + i + "]' 
must not be empty." );
+                }
+                else if ( !pluginGroup.matches( ID_REGEX ) )
+                {
+                    addError( problems, "'pluginGroups.pluginGroup[" + i
+                        + "]' must denote a valid group id and match the 
pattern " + ID_REGEX );
+                }
+            }
+        }
+
+        List<Server> servers = settings.getServers();
+
+        if ( servers != null )
+        {
+            for ( int i = 0; i < servers.size(); i++ )
+            {
+                Server server = servers.get( i );
+
+                validateStringNotEmpty( problems, "servers.server[" + i + 
"].id", server.getId(), null );
+            }
+        }
+
+        List<Mirror> mirrors = settings.getMirrors();
+
+        if ( mirrors != null )
+        {
+            for ( Mirror mirror : mirrors )
+            {
+                validateStringNotEmpty( problems, "mirrors.mirror.id", 
mirror.getId(), mirror.getUrl() );
+
+                validateStringNotEmpty( problems, "mirrors.mirror.url", 
mirror.getUrl(), mirror.getId() );
+
+                validateStringNotEmpty( problems, "mirrors.mirror.mirrorOf", 
mirror.getMirrorOf(), mirror.getId() );
+            }
+        }
+
         List<Profile> profiles = settings.getProfiles();
 
         if ( profiles != null )
         {
-            for ( Profile prof : profiles )
+            for ( Profile profile : profiles )
             {
-                validateRepositories( problems, prof.getRepositories(), 
"repositories.repository" );
-                validateRepositories( problems, prof.getPluginRepositories(), 
"pluginRepositories.pluginRepository" );
+                validateRepositories( problems, profile.getRepositories(), 
"repositories.repository" );
+                validateRepositories( problems, 
profile.getPluginRepositories(), "pluginRepositories.pluginRepository" );
             }
         }
     }
@@ -54,9 +110,15 @@ public class DefaultSettingsValidator
     {
         for ( Repository repository : repositories )
         {
-            validateStringNotEmpty( problems, prefix + ".id", 
repository.getId() );
+            validateStringNotEmpty( problems, prefix + ".id", 
repository.getId(), repository.getUrl() );
+
+            validateStringNotEmpty( problems, prefix + ".url", 
repository.getUrl(), repository.getId() );
 
-            validateStringNotEmpty( problems, prefix + ".url", 
repository.getUrl() );
+            if ( "legacy".equals( repository.getLayout() ) )
+            {
+                addWarn( problems, "'" + prefix + ".layout' for " + 
repository.getId()
+                    + " uses the deprecated value 'legacy'." );
+            }
         }
     }
 
@@ -64,11 +126,6 @@ public class DefaultSettingsValidator
     // Field validation
     // ----------------------------------------------------------------------
 
-    private boolean validateStringNotEmpty( SettingsProblemCollector problems, 
String fieldName, String string )
-    {
-        return validateStringNotEmpty( problems, fieldName, string, null );
-    }
-
     /**
      * Asserts:
      * <p/>
@@ -137,4 +194,9 @@ public class DefaultSettingsValidator
         problems.add( SettingsProblem.Severity.ERROR, msg, -1, -1, null );
     }
 
+    private void addWarn( SettingsProblemCollector problems, String msg )
+    {
+        problems.add( SettingsProblem.Severity.WARNING, msg, -1, -1, null );
+    }
+
 }

Modified: 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java
URL: 
http://svn.apache.org/viewvc/maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java?rev=929083&r1=929082&r2=929083&view=diff
==============================================================================
--- 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java
 (original)
+++ 
maven/maven-3/trunk/maven-core/src/test/java/org/apache/maven/settings/validation/DefaultSettingsValidatorTest.java
 Tue Mar 30 11:20:29 2010
@@ -24,6 +24,7 @@ import java.util.List;
 
 import junit.framework.TestCase;
 
+import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Profile;
 import org.apache.maven.settings.Repository;
 import org.apache.maven.settings.Settings;
@@ -31,27 +32,27 @@ import org.apache.maven.settings.buildin
 import org.apache.maven.settings.building.SettingsProblem.Severity;
 
 /**
- *
  * @author mkleint
  */
 public class DefaultSettingsValidatorTest
     extends TestCase
 {
 
-    public DefaultSettingsValidatorTest( String testName )
-    {
-        super( testName );
-    }
+    private DefaultSettingsValidator validator;
 
     protected void setUp()
         throws Exception
     {
         super.setUp();
+
+        validator = new DefaultSettingsValidator();
     }
 
     protected void tearDown()
         throws Exception
     {
+        validator = null;
+
         super.tearDown();
     }
 
@@ -61,27 +62,40 @@ public class DefaultSettingsValidatorTes
         Profile prof = new Profile();
         prof.setId( "xxx" );
         model.addProfile( prof );
-        DefaultSettingsValidator instance = new DefaultSettingsValidator();
         SimpleProblemCollector problems = new SimpleProblemCollector();
-        instance.validate( model, problems );
+        validator.validate( model, problems );
         assertEquals( 0, problems.messages.size() );
 
         Repository repo = new Repository();
         prof.addRepository( repo );
         problems = new SimpleProblemCollector();
-        instance.validate( model, problems );
+        validator.validate( model, problems );
         assertEquals( 2, problems.messages.size() );
 
         repo.setUrl( "http://xxx.xxx.com"; );
         problems = new SimpleProblemCollector();
-        instance.validate( model, problems );
+        validator.validate( model, problems );
         assertEquals( 1, problems.messages.size() );
 
         repo.setId( "xxx" );
         problems = new SimpleProblemCollector();
-        instance.validate( model, problems );
+        validator.validate( model, problems );
         assertEquals( 0, problems.messages.size() );
+    }
 
+    public void testValidateMirror()
+        throws Exception
+    {
+        Mirror mirror = new Mirror();
+        Settings settings = new Settings();
+        settings.addMirror( mirror );
+
+        SimpleProblemCollector problems = new SimpleProblemCollector();
+        validator.validate( settings, problems );
+        assertEquals( 2, problems.messages.size() );
+        assertTrue( problems.messages.get( 0 ), problems.messages.get( 0 
).contains( "'mirrors.mirror.url' is missing" ) );
+        assertTrue( problems.messages.get( 1 ),
+                    problems.messages.get( 1 ).contains( 
"'mirrors.mirror.mirrorOf' is missing" ) );
     }
 
     private static class SimpleProblemCollector


Reply via email to