You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by be...@apache.org on 2009/07/01 12:45:29 UTC

svn commit: r790109 - in /maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model: DefaultModelBuilder.java DefaultModelBuildingResult.java ModelBuildingResult.java ModelProblem.java

Author: bentmann
Date: Wed Jul  1 10:45:29 2009
New Revision: 790109

URL: http://svn.apache.org/viewvc?rev=790109&view=rev
Log:
o Distinguished different severity levels of model problems, allowing warnings to be collected but still have the build request succeed

Modified:
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
    maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuilder.java Wed Jul  1 10:45:29 2009
@@ -187,7 +187,7 @@
         ModelValidationResult validationResult = modelValidator.validateEffectiveModel( resultModel, request );
         addProblems( resultModel, validationResult, problems );
 
-        if ( !problems.isEmpty() )
+        if ( hasErrors( problems ) )
         {
             throw new ModelBuildingException( problems );
         }
@@ -196,6 +196,8 @@
         resultData.setArtifactId( resultModel.getArtifactId() );
         resultData.setVersion( resultModel.getVersion() );
 
+        result.setProblems( problems );
+
         result.setEffectiveModel( resultModel );
 
         result.setActiveExternalProfiles( activeExternalProfiles );
@@ -240,13 +242,13 @@
         catch ( ModelParseException e )
         {
             problems.add( new ModelProblem( "Non-parseable POM " + modelSource.getLocation() + ": " + e.getMessage(),
-                                            modelSource.getLocation(), e ) );
+                                            ModelProblem.Severity.FATAL, modelSource.getLocation(), e ) );
             throw new ModelBuildingException( problems );
         }
         catch ( IOException e )
         {
             problems.add( new ModelProblem( "Non-readable POM " + modelSource.getLocation() + ": " + e.getMessage(),
-                                            modelSource.getLocation(), e ) );
+                                            ModelProblem.Severity.FATAL, modelSource.getLocation(), e ) );
             throw new ModelBuildingException( problems );
         }
 
@@ -258,6 +260,22 @@
         return model;
     }
 
+    private boolean hasErrors( List<ModelProblem> problems )
+    {
+        if ( problems != null )
+        {
+            for ( ModelProblem problem : problems )
+            {
+                if ( ModelProblem.Severity.ERROR.compareTo( problem.getSeverity() ) >= 0 )
+                {
+                    return true;
+                }
+            }
+        }
+
+        return false;
+    }
+
     private void addProblems( Model model, ModelValidationResult result, List<ModelProblem> problems )
     {
         if ( result.getMessageCount() > 0 )
@@ -266,7 +284,8 @@
 
             for ( int i = 0; i < result.getMessageCount(); i++ )
             {
-                problems.add( new ModelProblem( "Invalid POM " + source + ": " + result.getMessage( i ), source ) );
+                problems.add( new ModelProblem( "Invalid POM " + source + ": " + result.getMessage( i ),
+                                                ModelProblem.Severity.WARNING, source ) );
             }
         }
     }
@@ -279,7 +298,7 @@
         for ( ProfileActivationException e : result.getActivationExceptions() )
         {
             problems.add( new ModelProblem( "Invalid activation condition for external profile "
-                + e.getProfile().getId() + ": " + e.getMessage(), "(external profiles)", e ) );
+                + e.getProfile().getId() + ": " + e.getMessage(), ModelProblem.Severity.ERROR, "(external profiles)", e ) );
         }
 
         return result.getActiveProfiles();
@@ -294,7 +313,7 @@
         {
             problems.add( new ModelProblem( "Invalid activation condition for project profile "
                 + e.getProfile().getId() + " in POM " + toSourceHint( model ) + ": " + e.getMessage(),
-                                            toSourceHint( model ), e ) );
+                                            ModelProblem.Severity.ERROR, toSourceHint( model ), e ) );
         }
 
         return result.getActiveProfiles();
@@ -319,7 +338,8 @@
             catch ( InvalidRepositoryException e )
             {
                 problems.add( new ModelProblem( "Invalid repository " + repository.getId() + " in POM "
-                    + toSourceHint( model ) + ": " + e.getMessage(), toSourceHint( model ), e ) );
+                    + toSourceHint( model ) + ": " + e.getMessage(), ModelProblem.Severity.ERROR,
+                                                toSourceHint( model ), e ) );
             }
         }
     }
@@ -345,7 +365,7 @@
         catch ( ModelInterpolationException e )
         {
             problems.add( new ModelProblem( "Invalid expression in POM " + toSourceHint( model ) + ": "
-                + e.getMessage(), toSourceHint( model ), e ) );
+                + e.getMessage(), ModelProblem.Severity.ERROR, toSourceHint( model ), e ) );
 
             return model;
         }
@@ -438,7 +458,8 @@
         if ( modelResolver == null )
         {
             problems.add( new ModelProblem( "Non-resolvable parent POM " + toId( parent ) + " for POM "
-                + toSourceHint( childModel ) + ": " + "No model resolver provided", toSourceHint( childModel ) ) );
+                + toSourceHint( childModel ) + ": " + "No model resolver provided", ModelProblem.Severity.FATAL,
+                                            toSourceHint( childModel ) ) );
             throw new ModelBuildingException( problems );
         }
 
@@ -450,7 +471,8 @@
         catch ( UnresolvableModelException e )
         {
             problems.add( new ModelProblem( "Non-resolvable parent POM " + toId( parent ) + " for POM "
-                + toSourceHint( childModel ) + ": " + e.getMessage(), toSourceHint( childModel ), e ) );
+                + toSourceHint( childModel ) + ": " + e.getMessage(), ModelProblem.Severity.FATAL,
+                                            toSourceHint( childModel ), e ) );
             throw new ModelBuildingException( problems );
         }
 

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/DefaultModelBuildingResult.java Wed Jul  1 10:45:29 2009
@@ -44,12 +44,15 @@
 
     private List<Profile> activeExternalProfiles;
 
+    private List<ModelProblem> problems;
+
     public DefaultModelBuildingResult()
     {
         modelIds = new ArrayList<String>();
         rawModels = new HashMap<String, Model>();
         activePomProfiles = new HashMap<String, List<Profile>>();
         activeExternalProfiles = new ArrayList<Profile>();
+        problems = new ArrayList<ModelProblem>();
     }
 
     public Model getEffectiveModel()
@@ -147,4 +150,23 @@
         return this;
     }
 
+    public List<ModelProblem> getProblems()
+    {
+        return Collections.unmodifiableList( problems );
+    }
+
+    public DefaultModelBuildingResult setProblems( List<ModelProblem> problems )
+    {
+        if ( problems != null )
+        {
+            this.problems = new ArrayList<ModelProblem>( problems );
+        }
+        else
+        {
+            this.problems.clear();
+        }
+
+        return this;
+    }
+
 }

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelBuildingResult.java Wed Jul  1 10:45:29 2009
@@ -84,4 +84,13 @@
      */
     List<Profile> getActiveExternalProfiles();
 
+    /**
+     * Gets the problems that were encountered during the model building. Note that only problems of severity
+     * {@link ModelProblem.Severity#WARNING} and below are reported here. Problems with a higher severity level cause
+     * the model builder to fail with a {@link ModelBuildingException}.
+     * 
+     * @return The problems that were encountered during the model building, can be empty but never {@code null}.
+     */
+    List<ModelProblem> getProblems();
+
 }

Modified: maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java
URL: http://svn.apache.org/viewvc/maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java?rev=790109&r1=790108&r2=790109&view=diff
==============================================================================
--- maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java (original)
+++ maven/components/trunk/maven-model-builder/src/main/java/org/apache/maven/model/ModelProblem.java Wed Jul  1 10:45:29 2009
@@ -21,29 +21,45 @@
 
 /**
  * Describes a problem that was encountered during model building. A problem can either be an exception that was thrown
- * or a simple string message. In addition, a problem carries a hint about its source, e.g. the POM file that could not
- * be processed.
+ * or a simple string message. In addition, a problem carries a hint about its source, e.g. the POM file that exhibits
+ * the problem.
  * 
  * @author Benjamin Bentmann
  */
 public class ModelProblem
 {
 
+    /**
+     * The different severity levels for a problem, in decreasing order.
+     */
+    public enum Severity
+    {
+
+        FATAL, //
+        ERROR, //
+        WARNING, //
+
+    }
+
     private String source;
 
     private String message;
 
     private Exception exception;
 
+    private Severity severity;
+
     /**
      * Creates a new problem with the specified message.
      * 
      * @param message The message describing the problem, may be {@code null}.
+     * @param severity The severity level of the problem, may be {@code null} to default to {@link Severity#ERROR}.
      * @param source A hint about the source of the problem, may be {@code null}.
      */
-    public ModelProblem( String message, String source )
+    public ModelProblem( String message, Severity severity, String source )
     {
         this.message = message;
+        this.severity = ( severity != null ) ? severity : Severity.ERROR;
         this.source = ( source != null ) ? source : "";
     }
 
@@ -51,12 +67,14 @@
      * Creates a new problem with the specified message and exception.
      * 
      * @param message The message describing the problem, may be {@code null}.
+     * @param severity The severity level of the problem, may be {@code null} to default to {@link Severity#ERROR}.
      * @param source A hint about the source of the problem, may be {@code null}.
      * @param exception The exception that caused this problem, may be {@code null}.
      */
-    public ModelProblem( String message, String source, Exception exception )
+    public ModelProblem( String message, Severity severity, String source, Exception exception )
     {
         this.message = message;
+        this.severity = ( severity != null ) ? severity : Severity.ERROR;
         this.source = ( source != null ) ? source : "";
         this.exception = exception;
     }
@@ -109,10 +127,25 @@
         return msg;
     }
 
+    /**
+     * Gets the severity level of this problem.
+     * 
+     * @return The severity level of this problem, never {@code null}.
+     */
+    public Severity getSeverity()
+    {
+        return severity;
+    }
+
     @Override
     public String toString()
     {
-        return getSource() + ": " + getMessage();
+        StringBuilder buffer = new StringBuilder( 128 );
+
+        buffer.append( "[" ).append( getSeverity() ).append( "] " );
+        buffer.append( getSource() ).append( ": " ).append( getMessage() );
+
+        return buffer.toString();
     }
 
 }