updated code with Java 5 typed collections

git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@1635871 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/plugin/toolchain/ToolchainConverter.java b/src/main/java/org/apache/maven/plugin/toolchain/ToolchainConverter.java
index 7af1c40..23dcc4d 100644
--- a/src/main/java/org/apache/maven/plugin/toolchain/ToolchainConverter.java
+++ b/src/main/java/org/apache/maven/plugin/toolchain/ToolchainConverter.java
@@ -62,6 +62,7 @@
         throws ComponentConfigurationException
     {
         Toolchains retValue = new Toolchains();
+
         processConfiguration( retValue, configuration, expressionEvaluator );
 
         return retValue;
@@ -72,20 +73,20 @@
                                        ExpressionEvaluator expressionEvaluator )
         throws ComponentConfigurationException
     {
-        Map map = new HashMap();
+        Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>();
+
         PlexusConfiguration[] tools = configuration.getChildren();
         for ( PlexusConfiguration tool : tools )
         {
             String type = tool.getName();
             PlexusConfiguration[] params = tool.getChildren();
-            Map parameters = new HashMap();
+
+            Map<String, String> parameters = new HashMap<String, String>();
             for ( PlexusConfiguration param : params )
             {
                 try
                 {
-                    String name = param.getName();
-                    String val = param.getValue();
-                    parameters.put( name, val );
+                    parameters.put( param.getName(), param.getValue() );
                 }
                 catch ( PlexusConfigurationException ex )
                 {
@@ -94,6 +95,7 @@
             }
             map.put( type, parameters );
         }
+
         chain.toolchains = map;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/maven/plugin/toolchain/ToolchainMojo.java b/src/main/java/org/apache/maven/plugin/toolchain/ToolchainMojo.java
index 6f1f599..d56ec59 100644
--- a/src/main/java/org/apache/maven/plugin/toolchain/ToolchainMojo.java
+++ b/src/main/java/org/apache/maven/plugin/toolchain/ToolchainMojo.java
@@ -34,7 +34,6 @@
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -49,7 +48,7 @@
     /**
      */
     @Component
-    private ToolchainManagerPrivate toolchainManager;
+    private ToolchainManagerPrivate toolchainManagerPrivate;
 
     /**
      * The current build session instance. This is used for
@@ -70,78 +69,87 @@
     public void execute()
         throws MojoExecutionException, MojoFailureException
     {
-        if ( toolchains != null )
+        if ( toolchains == null )
         {
-            Iterator en = toolchains.getToolchainsTypes().iterator();
-            List nonMatchedTypes = new ArrayList();
-            while ( en.hasNext() )
+            // should not happen since parameter is required...
+            getLog().warn( "No toolchains requirements configured." );
+            return;
+        }
+
+        List<String> nonMatchedTypes = new ArrayList<String>();
+
+        for ( Map.Entry<String, Map<String, String>> entry : toolchains.getToolchains().entrySet() )
+        {
+            try
             {
-                try
+                String type = entry.getKey();
+                Map<String, String> params = entry.getValue();
+
+                getLog().info( "Type:" + type );
+                ToolchainPrivate[] tcs = getToolchains( type );
+
+                boolean matched = false;
+                for ( ToolchainPrivate tc : tcs )
                 {
-                    String type = (String) en.next();
-                    getLog().info( "Type:" + type );
-                    Map params = toolchains.getParams( type );
-                    ToolchainPrivate[] tcs = getToolchains( type );
-                    boolean matched = false;
-                    for ( ToolchainPrivate tc : tcs )
+                    if ( tc.matchesRequirements( params ) )
                     {
-                        if ( tc.matchesRequirements( params ) )
-                        {
-                            getLog().info( "Toolchain (" + type + ") matched:" + tc );
-                            toolchainManager.storeToolchainToBuildContext( tc, session );
-                            matched = true;
-                            break;
-                        }
-                    }
-                    if ( !matched )
-                    {
-                        nonMatchedTypes.add( type );
+                        getLog().info( "Toolchain (" + type + ") matched: " + tc );
+
+                        toolchainManagerPrivate.storeToolchainToBuildContext( tc, session );
+
+                        matched = true;
+                        break;
                     }
                 }
-                catch ( MisconfiguredToolchainException ex )
+
+                if ( !matched )
                 {
-                    throw new MojoExecutionException( "Misconfigured toolchains.", ex );
+                    nonMatchedTypes.add( type );
                 }
             }
-            if ( !nonMatchedTypes.isEmpty() )
+            catch ( MisconfiguredToolchainException ex )
             {
-                // TODO add the default toolchain instance if defined??
-                StringBuilder buff = new StringBuilder();
-                buff.append( "Cannot find matching toolchain definitions for the following toolchain types:" );
-                for ( Object nonMatchedType : nonMatchedTypes )
-                {
-                    String type = (String) nonMatchedType;
-                    buff.append( '\n' );
-                    buff.append( type );
-                    Map params = toolchains.getParams( type );
-                    if ( params.size() > 0 )
-                    {
-                        Iterator it2 = params.keySet().iterator();
-                        buff.append( " [" );
-                        while ( it2.hasNext() )
-                        {
-                            String string = (String) it2.next();
-                            buff.append( " " ).append( string ).append( "='" ).append( params.get( string ) );
-                            buff.append( "' " );
-                        }
-                        buff.append( ']' );
-                    }
-                }
-                getLog().error( buff.toString() );
-                throw new MojoFailureException( buff.toString()
-                    + "\nPlease make sure you define the required toolchains in your ~/.m2/toolchains.xml file." );
+                throw new MojoExecutionException( "Misconfigured toolchains.", ex );
             }
         }
-        else
+
+        if ( !nonMatchedTypes.isEmpty() )
         {
-            //can that happen?
+            // TODO add the default toolchain instance if defined??
+            StringBuilder buff = new StringBuilder();
+            buff.append( "Cannot find matching toolchain definitions for the following toolchain types:" );
+
+            for ( String type : nonMatchedTypes )
+            {
+                buff.append( '\n' );
+                buff.append( type );
+
+                Map<String, String> params = toolchains.getParams( type );
+
+                if ( params.size() > 0 )
+                {
+                    buff.append( " [" );
+
+                    for ( Map.Entry<String, String> param : params.entrySet() )
+                    {
+                        buff.append( " " ).append( param.getKey() ).append( "='" ).append( param.getValue() );
+                        buff.append( "'" );
+                    }
+                    buff.append( " ]" );
+                }
+            }
+
+            getLog().error( buff.toString() );
+
+            throw new MojoFailureException( buff.toString()
+                + "\nPlease make sure you define the required toolchains in your ~/.m2/toolchains.xml file." );
         }
     }
 
     private ToolchainPrivate[] getToolchains( String type )
         throws MojoExecutionException, MisconfiguredToolchainException
     {
-        Class managerClass = toolchainManager.getClass();
+        Class<?> managerClass = toolchainManagerPrivate.getClass();
 
         try
         {
@@ -151,14 +159,14 @@
                 Method newMethod =
                     managerClass.getMethod( "getToolchainsForType", new Class[] { String.class, MavenSession.class } );
 
-                return (ToolchainPrivate[]) newMethod.invoke( toolchainManager, type, session );
+                return (ToolchainPrivate[]) newMethod.invoke( toolchainManagerPrivate, type, session );
             }
             catch ( NoSuchMethodException e )
             {
                 // try 2.x style API
                 Method oldMethod = managerClass.getMethod( "getToolchainsForType", new Class[] { String.class } );
 
-                return (ToolchainPrivate[]) oldMethod.invoke( toolchainManager, type );
+                return (ToolchainPrivate[]) oldMethod.invoke( toolchainManagerPrivate, type );
             }
         }
         catch ( NoSuchMethodException e )
diff --git a/src/main/java/org/apache/maven/plugin/toolchain/Toolchains.java b/src/main/java/org/apache/maven/plugin/toolchain/Toolchains.java
index e7a1e70..3746fc9 100644
--- a/src/main/java/org/apache/maven/plugin/toolchain/Toolchains.java
+++ b/src/main/java/org/apache/maven/plugin/toolchain/Toolchains.java
@@ -24,22 +24,26 @@
 import java.util.Set;
 
 /**
+ * Type for plugins's <code>toolchain</code> attribute.
  *
  * @author mkleint
  */
 public final class Toolchains
 {
+    Map<String, Map<String, String>> toolchains;
 
-    /** <String type, Map<String param, String value>> */
-    Map toolchains;
+    public Map<String, Map<String, String>> getToolchains()
+    {
+        return Collections.unmodifiableMap( toolchains );
+    }
 
-    public Set getToolchainsTypes()
+    public Set<String> getToolchainsTypes()
     {
         return Collections.unmodifiableSet( toolchains.keySet() );
     }
 
-    public Map getParams( String type )
+    public Map<String, String> getParams( String type )
     {
-        return Collections.unmodifiableMap( (Map) toolchains.get( type ) );
+        return Collections.unmodifiableMap( toolchains.get( type ) );
     }
 }
\ No newline at end of file
diff --git a/src/site/apt/toolchains/jdk.apt.vm b/src/site/apt/toolchains/jdk.apt.vm
index 717bf51..ce460db 100644
--- a/src/site/apt/toolchains/jdk.apt.vm
+++ b/src/site/apt/toolchains/jdk.apt.vm
@@ -83,6 +83,13 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-toolchains-plugin</artifactId>
         <version>${project.version}</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>toolchain</goal>
+            </goals>
+          </execution>
+        </executions>
         <configuration>
           <toolchains>
             <jdk>