You are viewing a plain text version of this content. The canonical link for it is here.
Posted to nmaven-commits@incubator.apache.org by si...@apache.org on 2007/04/26 02:27:44 UTC

svn commit: r532576 - in /incubator/nmaven/branches/SI_XPT: assemblies/NMaven.Plugin/src/main/csharp/ assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/ assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Generator/ assemblies/NMaven.Plugin/src...

Author: sisbell
Date: Wed Apr 25 19:27:42 2007
New Revision: 532576

URL: http://svn.apache.org/viewvc?view=rev&rev=532576
Log:
Generalized the Plugin framework with java annotations.

Added:
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppender.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppenderAnnotation.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldAnnotation.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldInfo.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/MavenProjectConfigurationAppender.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PluginContext.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PomFileConfigurationAppender.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/StringConfigurationAppender.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/ConfigurationAppendersRepository.java   (with props)
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/PluginContextImpl.java   (with props)
Modified:
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven.Plugin.csproj
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/AbstractMojo.cs
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/ClassAttribute.cs
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/FieldAttribute.cs
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Generator/JavaClass.cs
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/IFieldInjector.cs
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/Impl/FieldInjectorRepository.cs
    incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/PluginDomainManager.cs
    incubator/nmaven/branches/SI_XPT/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml
    incubator/nmaven/branches/SI_XPT/components/dotnet-model/pom.xml
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/pom.xml
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/AbstractMojo.java
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/DotNetMojo.java
    incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/resources/META-INF/plexus/components.xml
    incubator/nmaven/branches/SI_XPT/plugins/maven-compile-plugin/src/main/resources/META-INF/plexus/components.xml
    incubator/nmaven/branches/SI_XPT/plugins/maven-solution-plugin/src/main/java/org/apache/maven/dotnet/plugin/solution/SolutionMojo.java

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven.Plugin.csproj
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven.Plugin.csproj?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven.Plugin.csproj (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven.Plugin.csproj Wed Apr 25 19:27:42 2007
@@ -37,10 +37,10 @@
       <Link>PluginLoader.cs</Link>
     </Compile>
     <Compile Include="NMaven\Plugin\Injector\IFieldInjector.cs" />
-    <Compile Include="NMaven\Plugin\Injector\MavenProjectInjector.cs" />
-    <Compile Include="NMaven\Plugin\Injector\StringInjector.cs" />
     <Compile Include="NMaven\Plugin\Injector\Impl\FieldInjectorRepository.cs" />
     <Compile Include="NMaven\Plugin\FieldInjectorAttribute.cs" />
+    <Compile Include="NMaven\Plugin\Injector\Impl\MavenProjectInjector.cs" />
+    <Compile Include="NMaven\Plugin\Injector\Impl\StringInjector.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="NMaven" />

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/AbstractMojo.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/AbstractMojo.cs?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/AbstractMojo.cs (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/AbstractMojo.cs Wed Apr 25 19:27:42 2007
@@ -29,17 +29,20 @@
 
 namespace NMaven.Plugin
 {
+	/// <summary>
+	/// Base class for Mojos.
+	/// </summary>
 	public abstract class AbstractMojo : MarshalByRefObject 
     {
         public abstract void Execute();
         
         public abstract Type getT();
-        
-        public void init()
-        {
-			        	
-        }
-                     
+               
+        /// <summary>
+        /// Injects values into fields of the child class using information from the specified 
+        /// configuration file. 
+        /// </summary>
+        /// <param name="configurationFile">The file that contains the values used to populate the fields</param>
         public void injectFields(String configurationFile)
         {
 			XmlTextReader reader = 
@@ -53,8 +56,7 @@
 				{
 					IFieldInjector fieldInjector = fieldInjectorRepository.getFieldInjectorFor(fieldInfo);
 					fieldInjector.Inject(this, fieldInfo, reader.ReadString() );									
-				}	
-				
+				}					
 			}        	
         }
         

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/ClassAttribute.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/ClassAttribute.cs?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/ClassAttribute.cs (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/ClassAttribute.cs Wed Apr 25 19:27:42 2007
@@ -25,7 +25,7 @@
 	/// <summary>
 	/// Description of ClassAttribute.
 	/// </summary>
-	public class ClassAttribute : Attribute
+	public sealed class ClassAttribute : Attribute
 	{
 		private string phase;
 		

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/FieldAttribute.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/FieldAttribute.cs?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/FieldAttribute.cs (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/FieldAttribute.cs Wed Apr 25 19:27:42 2007
@@ -25,7 +25,7 @@
 	/// <summary>
 	/// Description of StringAttribute.
 	/// </summary>
-	public class FieldAttribute : Attribute
+	public sealed class FieldAttribute : Attribute
 	{
 		private string name;
 		

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Generator/JavaClass.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Generator/JavaClass.cs?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Generator/JavaClass.cs (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Generator/JavaClass.cs Wed Apr 25 19:27:42 2007
@@ -96,7 +96,6 @@
 			{
 				this.packageName = value;
 			}
-		}
-		
+		}		
 	}
 }

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/IFieldInjector.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/IFieldInjector.cs?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/IFieldInjector.cs (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/IFieldInjector.cs Wed Apr 25 19:27:42 2007
@@ -24,12 +24,22 @@
 namespace NMaven.Plugin.Injector
 {
 	/// <summary>
-	/// Description of FieldInjector.
+	/// Provides services for injecting information into fields.
 	/// </summary>
 	public interface IFieldInjector
 	{
+		/// <summary>
+		/// Injects the specified field object into the field info of the specified target object.
+		/// </summary>
+		/// <param name="targetObject">the target object containing the fields that are to be injected</param>
+		/// <param name="fieldInfo">the field to inject</param>
+		/// <param name="fieldObject">the value to set on the field</param>
 		void Inject(object targetObject, FieldInfo fieldInfo, object fieldObject);
 		
+		/// <summary>
+		/// Returns the java class name of field within the Java Mojo equivalent.
+		/// </summary>
+		/// <returns>the java class name of field within the Java Mojo equivalent</returns>
 		string GetJavaClassName();
 	}
 }

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/Impl/FieldInjectorRepository.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/Impl/FieldInjectorRepository.cs?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/Impl/FieldInjectorRepository.cs (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/Injector/Impl/FieldInjectorRepository.cs Wed Apr 25 19:27:42 2007
@@ -26,17 +26,16 @@
 namespace NMaven.Plugin.Injector.Impl
 {
 	/// <summary>
-	/// Description of FieldInjectorRepository.
+	/// Provides methods for getting field injectors.
 	/// </summary>
-	public class FieldInjectorRepository
+	internal sealed class FieldInjectorRepository
 	{		
-		public FieldInjectorRepository()
+		internal FieldInjectorRepository()
 		{
 		}
 		
-		public IFieldInjector getFieldInjectorFor(FieldInfo fieldInfo)
+		internal IFieldInjector getFieldInjectorFor(FieldInfo fieldInfo)
 		{
-			//String fieldTypeName = fieldInfo.FieldType.FullName;
 			Type[] types = this.GetType().Assembly.GetTypes();
 			foreach(Type type in types)
 			{
@@ -66,7 +65,7 @@
 		}
 		
 
-       public String GetFieldTypeFor(FieldInfo fieldInfo)
+       internal String GetFieldTypeFor(FieldInfo fieldInfo)
        {
 	    	foreach (Attribute attribute in fieldInfo.GetCustomAttributes(true))
 	        {	            	

Modified: incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/PluginDomainManager.cs
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/PluginDomainManager.cs?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/PluginDomainManager.cs (original)
+++ incubator/nmaven/branches/SI_XPT/assemblies/NMaven.Plugin/src/main/csharp/NMaven/Plugin/PluginDomainManager.cs Wed Apr 25 19:27:42 2007
@@ -27,7 +27,7 @@
 	/// <summary>
 	/// Allows loading of .NET Maven Plugins (and its dependencies) into a separate application domain.
 	/// </summary>
-	public class PluginDomainManager : AppDomainManager
+	public sealed class PluginDomainManager : AppDomainManager
 	{
 		/// <summary>
 		/// Default constructor
@@ -40,7 +40,7 @@
 		/// <summary>
 		/// Loads the specified .NET Maven plugin into the plugin domain 
 		/// </summary>
-		/// <param name="assemblyFile">the .NET Maven plugin</param>
+		/// <param name="assemblyFile">The .NET Maven plugin</param>
 		public void LoadPlugin(FileInfo assemblyFile)
 		{
 			

Modified: incubator/nmaven/branches/SI_XPT/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml (original)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-core/src/main/resources/META-INF/nmaven/registry-config.xml Wed Apr 25 19:27:42 2007
@@ -39,5 +39,10 @@
       <repository-class>org.apache.maven.dotnet.artifact.impl.NetDependenciesRepositoryImpl</repository-class>
       <repository-config>/META-INF/nmaven/net-dependencies.xml</repository-config>
     </repository>
+    <repository>
+      <repository-name>configuration-appenders</repository-name>
+      <repository-class>org.apache.maven.dotnet.plugin.impl.ConfigurationAppendersRepository</repository-class>
+      <repository-config>/META-INF/nmaven/configuration-appenders.xml</repository-config>
+    </repository>
   </repositories>
 </registry-config>

Modified: incubator/nmaven/branches/SI_XPT/components/dotnet-model/pom.xml
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-model/pom.xml?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-model/pom.xml (original)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-model/pom.xml Wed Apr 25 19:27:42 2007
@@ -35,6 +35,7 @@
     <module>compiler-plugins</module>
     <module>executable-plugins</module>
     <module>netdependency</module>
+    <module>configuration-appenders</module>    
     <module>settings</module>
     <module>entries</module>
   </modules>

Modified: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/pom.xml
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/pom.xml?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/pom.xml (original)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/pom.xml Wed Apr 25 19:27:42 2007
@@ -52,5 +52,10 @@
       <artifactId>dotnet-vendor</artifactId>
       <version>0.14-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.maven.dotnet</groupId>
+      <artifactId>dotnet-model-configuration-appenders</artifactId>
+      <version>0.14-SNAPSHOT</version>
+    </dependency>
   </dependencies>
 </project>

Modified: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/AbstractMojo.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/AbstractMojo.java?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/AbstractMojo.java (original)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/AbstractMojo.java Wed Apr 25 19:27:42 2007
@@ -27,6 +27,7 @@
 import org.apache.maven.dotnet.PlatformUnsupportedException;
 import org.apache.maven.project.MavenProject;
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.DocumentBuilder;
@@ -40,6 +41,9 @@
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.Set;
+import java.util.HashSet;
 
 /**
  * The base class for plugins that execute a .NET plugin. Classes that extend this class are only expected to provide
@@ -61,19 +65,19 @@
         throws MojoExecutionException, MojoFailureException
     {
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        DocumentBuilder builder = null;
+        DocumentBuilder builder;
         try
         {
             builder = factory.newDocumentBuilder();
         }
         catch ( ParserConfigurationException e )
         {
-            e.printStackTrace();
+            throw new MojoExecutionException( "NMAVEN-xxx-000", e );
         }
         Document document = builder.newDocument();
 
-        File paramFile = null;
-        FileOutputStream fos = null;
+        FileOutputStream fos;
+        File paramFile;
         try
         {
             paramFile = File.createTempFile( "Plugin", ".xml" );
@@ -81,53 +85,97 @@
         }
         catch ( IOException e )
         {
-            e.printStackTrace();
+            throw new MojoExecutionException( "NMAVEN-xxx-000", e );
         }
 
         StreamResult result = new StreamResult();
         result.setOutputStream( fos );
-        Transformer xformer = null;
         try
         {
-            xformer = TransformerFactory.newInstance().newTransformer();
+            Transformer transformer = TransformerFactory.newInstance().newTransformer();
+            transformer.transform( this.getDOMSourceFor( document ), result );
         }
         catch ( TransformerConfigurationException e )
         {
-            e.printStackTrace();
-        }
+            throw new MojoExecutionException( "NMAVEN-xxx-000", e );
 
-        try
-        {
-            xformer.transform( this.getDOMSourceFor( document ), result );
         }
         catch ( TransformerException e )
         {
-            e.printStackTrace();
+            throw new MojoExecutionException( "NMAVEN-xxx-000", e );
         }
-        try
+        finally
         {
-            fos.close();
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
+            try
+            {
+                fos.close();
+            }
+            catch ( IOException e )
+            {
+                throw new MojoExecutionException( "NMAVEN-xxx-000: Unable to write file", e );
+            }
         }
+
         try
         {
             VendorInfo vendorInfo = VendorInfo.Factory.createDefaultVendorInfo();
             vendorInfo.setVendor( VendorFactory.createVendorFromName( "MICROSOFT" ) );
             getNetExecutableFactory().getPluginLoaderFor( "NMaven.Plugin", "NMaven.Plugin.Solution", vendorInfo,
-                                                     getMavenProject(), getLocalRepository(), paramFile,
-                                                     "SolutionMojo" ).execute();
+                                                          getMavenProject(), getLocalRepository(), paramFile,
+                                                          "SolutionMojo" ).execute();
         }
         catch ( PlatformUnsupportedException e )
         {
-            throw new MojoExecutionException( "", e );
+            throw new MojoExecutionException( "NMAVEN-xxx-000", e );
         }
         catch ( ExecutionException e )
         {
-            throw new MojoExecutionException( "", e );
+            throw new MojoExecutionException( "NMAVEN-xxx-000", e );
+        }
+    }
+
+    private Set<Field> getAnnotatedFieldsFrom( Field[] fields )
+    {
+        Set<Field> fieldSet = new HashSet<Field>();
+        for ( Field field : fields )
+        {
+            if ( field.getAnnotation( FieldAnnotation.class ) != null )
+            {
+                fieldSet.add( field );
+            }
         }
+        return fieldSet;
+    }
+
+    public DOMSource getDOMSourceFor( Document document )
+    {
+        Element root = document.createElement( "configuration" );
+        document.appendChild( root );
+
+        Set<Field> fields = getAnnotatedFieldsFrom( this.getClass().getDeclaredFields() );
+       // Set<Class> appenderClasses = getConfigurationAppenderClasses();
+        for ( Field field : fields )
+        {
+            ConfigurationAppender configurationAppender = getNetPluginContext().getConfigurationAppenderFor( field );
+            try
+            {
+                try
+                {
+                    configurationAppender.append( document, root, FieldInfo.Factory.createFieldInfo( field.getName(),
+                                                                                                     field.get(
+                                                                                                         this ) ) );
+                }
+                catch ( IllegalAccessException e )
+                {
+                    e.printStackTrace();
+                }
+            }
+            catch ( MojoExecutionException e )
+            {
+                e.printStackTrace();
+            }
+        }
+        return new DOMSource( document );
     }
 
     /**
@@ -141,13 +189,10 @@
     public abstract MavenProject getMavenProject();
 
     /**
-     * @see DotNetMojo#getDOMSourceFor(org.w3c.dom.Document)
-     */
-    public abstract DOMSource getDOMSourceFor( Document document );
-
-    /**
-     * @see org.apache.maven.dotnet.plugin.DotNetMojo#getNetExecutableFactory() 
+     * @see DotNetMojo#getNetExecutableFactory()
      */
     public abstract NetExecutableFactory getNetExecutableFactory();
+
+    public abstract PluginContext getNetPluginContext();
 
 }

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppender.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppender.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppender.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppender.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,12 @@
+package org.apache.maven.dotnet.plugin;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.w3c.dom.Element;
+import org.w3c.dom.Document;
+
+public interface ConfigurationAppender
+{
+
+    void append( Document document, Element element, FieldInfo fieldInfo) throws MojoExecutionException;
+
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppenderAnnotation.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppenderAnnotation.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppenderAnnotation.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppenderAnnotation.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,15 @@
+package org.apache.maven.dotnet.plugin;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Documented;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+@Documented
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.TYPE})
+public @interface ConfigurationAppenderAnnotation
+{
+    String targetClassName();
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/ConfigurationAppenderAnnotation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/DotNetMojo.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/DotNetMojo.java?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/DotNetMojo.java (original)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/DotNetMojo.java Wed Apr 25 19:27:42 2007
@@ -67,4 +67,6 @@
      * @return the net executable factory
      */
     NetExecutableFactory getNetExecutableFactory();
+
+   // PluginContext getPluginContext();
 }

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldAnnotation.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldAnnotation.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldAnnotation.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldAnnotation.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,10 @@
+package org.apache.maven.dotnet.plugin;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+@Retention(RetentionPolicy.RUNTIME)
+public @interface FieldAnnotation
+{
+
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldAnnotation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldInfo.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldInfo.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldInfo.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldInfo.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,41 @@
+package org.apache.maven.dotnet.plugin;
+
+public interface FieldInfo
+{
+
+    String getName();
+
+    Object getValue();
+
+    /**
+     * Provides factory methods for field infos.
+     */
+    public static class Factory
+    {
+        /**
+         * Default constructor
+         */
+        private Factory()
+        {
+        }
+
+        /**
+         * Creates a default implementation of field info.
+         */
+        public static FieldInfo createFieldInfo( final String name, final Object value )
+        {
+            return new FieldInfo()
+            {
+                public String getName()
+                {
+                    return name;
+                }
+
+                public Object getValue()
+                {
+                    return value;
+                }
+            };
+        }
+    }
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/FieldInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/MavenProjectConfigurationAppender.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/MavenProjectConfigurationAppender.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/MavenProjectConfigurationAppender.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/MavenProjectConfigurationAppender.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,70 @@
+package org.apache.maven.dotnet.plugin;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Document;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
+import org.codehaus.plexus.util.IOUtil;
+
+import java.io.StringWriter;
+import java.io.IOException;
+import java.io.File;
+import java.io.FileOutputStream;
+
+@ConfigurationAppenderAnnotation( targetClassName = "org.apache.maven.project.MavenProject")
+public class MavenProjectConfigurationAppender
+    implements ConfigurationAppender
+{
+    public void append( Document document, Element element, FieldInfo fieldInfo )
+        throws MojoExecutionException
+    {
+        Object value = fieldInfo.getValue();
+        if ( ! ( value instanceof MavenProject ) )
+        {
+            throw new MojoExecutionException( "" );
+        }
+        File mavenProjectFile = writeMavenProjectToTempFile( (MavenProject) value );
+        Node mavenProjectFileNode = document.createElement( "mavenProject" );
+        mavenProjectFileNode.setTextContent( mavenProjectFile.getAbsolutePath() );
+        element.appendChild( mavenProjectFileNode );
+    }
+
+    private String ToString( MavenProject mavenProject )
+    {
+        StringWriter stringWriter = new StringWriter();
+        try
+        {
+            new MavenXpp3Writer().write( stringWriter, mavenProject.getModel() );
+        }
+        catch ( IOException e )
+        {
+            e.printStackTrace();
+        }
+        finally
+        {
+            IOUtil.close( stringWriter );
+        }
+        return stringWriter.getBuffer().toString().replaceFirst( "<project>",
+                                                                 "<project xmlns=\"http://maven.apache.org/POM/4.0.0\">" );
+    }
+
+    public File writeMavenProjectToTempFile( MavenProject project )
+    {
+        String p = ToString( project );
+        try
+        {
+            File tempFile = File.createTempFile( "MavenProject", ".xml" );
+            FileOutputStream fos = new FileOutputStream( tempFile );
+            fos.write( p.getBytes() );
+            fos.close();
+            return tempFile;
+        }
+        catch ( IOException e )
+        {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/MavenProjectConfigurationAppender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PluginContext.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PluginContext.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PluginContext.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PluginContext.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,13 @@
+package org.apache.maven.dotnet.plugin;
+
+import java.lang.reflect.Field;
+
+public interface PluginContext
+{
+    /**
+     * Role used to register component implementations with the container.
+     */
+    String ROLE = PluginContext.class.getName();
+
+    ConfigurationAppender getConfigurationAppenderFor( Field field );
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PluginContext.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PomFileConfigurationAppender.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PomFileConfigurationAppender.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PomFileConfigurationAppender.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PomFileConfigurationAppender.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,25 @@
+package org.apache.maven.dotnet.plugin;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.project.MavenProject;
+
+public class PomFileConfigurationAppender
+    implements ConfigurationAppender
+{
+    public void append( Document document, Element element, FieldInfo fieldInfo )
+        throws MojoExecutionException
+    {
+        Object value = fieldInfo.getValue();
+        if ( ! ( value instanceof MavenProject ) )
+        {
+            throw new MojoExecutionException( "" );
+        }
+
+        Node n1 = document.createElement( "pomFile" );
+        n1.setTextContent( ((MavenProject) value).getFile().getAbsolutePath() );
+        document.appendChild( n1 );
+    }
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/PomFileConfigurationAppender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/StringConfigurationAppender.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/StringConfigurationAppender.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/StringConfigurationAppender.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/StringConfigurationAppender.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,25 @@
+package org.apache.maven.dotnet.plugin;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.apache.maven.plugin.MojoExecutionException;
+
+@ConfigurationAppenderAnnotation( targetClassName = "java.lang.String")
+public class StringConfigurationAppender
+    implements ConfigurationAppender
+{
+    public void append( Document document, Element element, FieldInfo fieldInfo )
+        throws MojoExecutionException
+    {
+        Object value = fieldInfo.getValue();
+        if ( ! ( value instanceof String ) )
+        {
+            throw new MojoExecutionException( "" );
+        }
+
+        Node n1 = document.createElement( fieldInfo.getName());
+        n1.setTextContent( (String) fieldInfo.getValue() );
+        element.appendChild( n1 );
+    }
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/StringConfigurationAppender.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/ConfigurationAppendersRepository.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/ConfigurationAppendersRepository.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/ConfigurationAppendersRepository.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/ConfigurationAppendersRepository.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,65 @@
+package org.apache.maven.dotnet.plugin.impl;
+
+import org.apache.maven.dotnet.registry.Repository;
+import org.apache.maven.dotnet.registry.RepositoryRegistry;
+import org.apache.maven.dotnet.model.configurationappenders.io.xpp3.ConfigurationAppendersXpp3Reader;
+import org.apache.maven.dotnet.model.configurationappenders.ConfigurationAppenderModel;
+import org.apache.maven.dotnet.model.configurationappenders.ConfigurationAppender;
+import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
+
+import java.io.InputStream;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.InputStreamReader;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Set;
+import java.util.HashSet;
+
+public class ConfigurationAppendersRepository implements Repository
+{
+
+    private Set<Class> appenderClasses;
+
+    public void load( InputStream inputStream, Hashtable properties )
+        throws IOException
+    {
+        ConfigurationAppendersXpp3Reader xpp3Reader = new ConfigurationAppendersXpp3Reader();
+        Reader reader = new InputStreamReader( inputStream );
+        ConfigurationAppenderModel model;
+        try
+        {
+            model = xpp3Reader.read( reader );
+        }
+        catch ( XmlPullParserException e )
+        {
+            e.printStackTrace();
+            throw new IOException( "NMAVEN-062-000: Could not read plugins-compiler.xml" );
+        }
+        List<ConfigurationAppender> appenders  = model.getConfigurationAppenders();
+        appenderClasses = new HashSet<Class>();
+        for(ConfigurationAppender appender : appenders)
+        {
+            try
+            {
+                appenderClasses.add(Class.forName( appender.getName() ));
+            }
+            catch ( ClassNotFoundException e )
+            {
+                e.printStackTrace();
+                throw new IOException("NMAVEN-xxx-000: Could not load class appender: Name = ");
+            }
+        }
+
+    }
+
+    public Set<Class> getAppenderClasses()
+    {
+        return appenderClasses;
+    }
+
+    public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry )
+    {
+
+    }
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/ConfigurationAppendersRepository.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/PluginContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/PluginContextImpl.java?view=auto&rev=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/PluginContextImpl.java (added)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/PluginContextImpl.java Wed Apr 25 19:27:42 2007
@@ -0,0 +1,50 @@
+package org.apache.maven.dotnet.plugin.impl;
+
+import org.apache.maven.dotnet.plugin.PluginContext;
+import org.apache.maven.dotnet.plugin.ConfigurationAppender;
+import org.apache.maven.dotnet.plugin.ConfigurationAppenderAnnotation;
+import org.apache.maven.dotnet.registry.RepositoryRegistry;
+
+import java.util.Set;
+import java.lang.reflect.Field;
+
+public class PluginContextImpl
+    implements PluginContext
+{
+    private RepositoryRegistry repositoryRegistry;
+
+    public ConfigurationAppender getConfigurationAppenderFor( Field field )
+    {
+        ConfigurationAppendersRepository repository =
+            (ConfigurationAppendersRepository) repositoryRegistry.find( "configuration-appenders" );
+        Set<Class> appenderClasses = repository.getAppenderClasses();
+        System.out.println("AC CLASSES = " + appenderClasses.size());
+        for ( Class c : appenderClasses )
+        {
+            ConfigurationAppenderAnnotation annotation =
+                (ConfigurationAppenderAnnotation) c.getAnnotation( ConfigurationAppenderAnnotation.class );
+            System.out.println(field.getType().getName() + ":" + annotation.targetClassName());
+            if ( field.getType().getName().equals( annotation.targetClassName() ) )
+            {
+                Object o;
+                try
+                {
+                    o = c.newInstance();
+                }
+                catch ( InstantiationException e )
+                {
+                    e.printStackTrace();
+                    return null;
+                }
+                catch ( IllegalAccessException e )
+                {
+                    e.printStackTrace();
+                    return null;
+                }
+
+                return (ConfigurationAppender) o;
+            }
+        }
+        return null;
+    }
+}

Propchange: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/java/org/apache/maven/dotnet/plugin/impl/PluginContextImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/resources/META-INF/plexus/components.xml (original)
+++ incubator/nmaven/branches/SI_XPT/components/dotnet-plugin/src/main/resources/META-INF/plexus/components.xml Wed Apr 25 19:27:42 2007
@@ -7,6 +7,18 @@
         <requirement>
           <role>org.apache.maven.dotnet.executable.NetExecutableFactory</role>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.dotnet.plugin.PluginContext</role>
+        </requirement>
+      </requirements>
+    </component>
+    <component>
+      <role>org.apache.maven.dotnet.plugin.PluginContext</role>
+      <implementation>org.apache.maven.dotnet.plugin.impl.PluginContextImpl</implementation>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.dotnet.registry.RepositoryRegistry</role>
+        </requirement>
       </requirements>
     </component>
   </components>

Modified: incubator/nmaven/branches/SI_XPT/plugins/maven-compile-plugin/src/main/resources/META-INF/plexus/components.xml
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/plugins/maven-compile-plugin/src/main/resources/META-INF/plexus/components.xml?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/plugins/maven-compile-plugin/src/main/resources/META-INF/plexus/components.xml (original)
+++ incubator/nmaven/branches/SI_XPT/plugins/maven-compile-plugin/src/main/resources/META-INF/plexus/components.xml Wed Apr 25 19:27:42 2007
@@ -322,6 +322,9 @@
         <requirement>
           <role>org.apache.maven.dotnet.executable.NetExecutableFactory</role>
         </requirement>
+        <requirement>
+          <role>org.apache.maven.dotnet.plugin.PluginContext</role>
+        </requirement>        
       </requirements>
     </component> 
   </components>

Modified: incubator/nmaven/branches/SI_XPT/plugins/maven-solution-plugin/src/main/java/org/apache/maven/dotnet/plugin/solution/SolutionMojo.java
URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_XPT/plugins/maven-solution-plugin/src/main/java/org/apache/maven/dotnet/plugin/solution/SolutionMojo.java?view=diff&rev=532576&r1=532575&r2=532576
==============================================================================
--- incubator/nmaven/branches/SI_XPT/plugins/maven-solution-plugin/src/main/java/org/apache/maven/dotnet/plugin/solution/SolutionMojo.java (original)
+++ incubator/nmaven/branches/SI_XPT/plugins/maven-solution-plugin/src/main/java/org/apache/maven/dotnet/plugin/solution/SolutionMojo.java Wed Apr 25 19:27:42 2007
@@ -1,19 +1,10 @@
 package org.apache.maven.dotnet.plugin.solution;
 
 import org.apache.maven.dotnet.plugin.AbstractMojo;
+import org.apache.maven.dotnet.plugin.FieldAnnotation;
+import org.apache.maven.dotnet.plugin.PluginContext;
 import org.apache.maven.dotnet.executable.NetExecutableFactory;
 import org.apache.maven.project.MavenProject;
-import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
-import org.w3c.dom.Node;
-import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-import org.codehaus.plexus.util.IOUtil;
-
-import javax.xml.transform.dom.DOMSource;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.io.FileOutputStream;
 
 /**
  * Generates resources
@@ -37,7 +28,15 @@
      * @parameter expression="${project}"
      * @required
      */
-    private MavenProject project;
+    @FieldAnnotation()
+    public MavenProject project;
+
+    /**
+     * @parameter expression="${basedir}"
+     * @required
+     */
+    @FieldAnnotation()
+    public String basedir;
 
     /**
      * The Vendor for the executable. Supports MONO and MICROSOFT: the default value is <code>MICROSOFT</code>. Not
@@ -62,6 +61,11 @@
      */
     private org.apache.maven.dotnet.executable.NetExecutableFactory netExecutableFactory;
 
+    /**
+     * @component
+     */
+    private PluginContext pluginContext;
+
     public String getLocalRepository()
     {
         return localRepository;
@@ -72,59 +76,73 @@
         return project;
     }
 
-    public DOMSource getDOMSourceFor( Document document )
+    public NetExecutableFactory getNetExecutableFactory()
     {
-        Element root = document.createElement( "configuration" );
-        document.appendChild( root );
-        Node n1 = document.createElement( "pomFile" );
-        n1.setTextContent( project.getFile().getAbsolutePath() );
-        root.appendChild( n1 );
-        File mavenProjectFile = writeMavenProjectToTempFile(project);
-        Node mavenProjectFileNode = document.createElement( "mavenProject");
-        mavenProjectFileNode.setTextContent( mavenProjectFile.getAbsolutePath());
-        root.appendChild(mavenProjectFileNode);
-        return new DOMSource( document );
+        return netExecutableFactory;
     }
 
-    public File writeMavenProjectToTempFile(MavenProject project)
+    public PluginContext getNetPluginContext()
     {
-        String p = ToString( project );
-        try
-        {
-            File tempFile = File.createTempFile( "MavenProject", ".xml");
-            FileOutputStream fos  = new FileOutputStream(tempFile );
-            fos.write( p.getBytes() );
-            fos.close();
-            return tempFile;
-        }
-        catch ( IOException e )
-        {
-            e.printStackTrace();
-        }
-        return null;
+        return pluginContext;
     }
 
-    private String ToString( MavenProject mavenProject )
+/*
+    private Set<Field> getAnnotatedFieldsFrom( Field[] fields )
     {
-        StringWriter stringWriter = new StringWriter();
-        try
-        {
-            new MavenXpp3Writer().write( stringWriter, project.getModel() );
-        }
-        catch ( IOException e )
+        Set<Field> fieldSet = new HashSet<Field>();
+        for ( Field field : fields )
         {
-            e.printStackTrace();
+            if ( field.getAnnotation( FieldAnnotation.class ) != null )
+            {
+                fieldSet.add( field );
+            }
         }
-        finally
+        return fieldSet;
+    }
+
+    private Set<Class> getConfigurationAppenderClasses()
+    {
+        Set<Class> appenderClasses = new HashSet<Class>();
+        for ( Class c : ConfigurationAppender.class.getClasses() )
         {
-            IOUtil.close( stringWriter );
+            if ( c.getAnnotation( ConfigurationAppenderAnnotation.class ) != null )
+            {
+                appenderClasses.add( c );
+            }
         }
-        return stringWriter.getBuffer().toString().replaceFirst( "<project>",
-                                                                 "<project xmlns=\"http://maven.apache.org/POM/4.0.0\">" );
+        return appenderClasses;
     }
 
-    public NetExecutableFactory getNetExecutableFactory()
+    public DOMSource getDOMSourceFor( Document document )
     {
-        return netExecutableFactory;
+        Element root = document.createElement( "configuration" );
+        document.appendChild( root );
+
+        Set<Field> fields = getAnnotatedFieldsFrom( this.getClass().getDeclaredFields() );
+        Set<Class> appenderClasses = getConfigurationAppenderClasses();
+        for ( Field field : fields )
+        {
+            ConfigurationAppender configurationAppender = pluginContext.getConfigurationAppenderFor( field );
+            try
+            {
+                try
+                {
+                    configurationAppender.append( document, root, FieldInfo.Factory.createFieldInfo( field.getName(),
+                                                                                                     field.get(
+                                                                                                         this ) ) );
+                }
+                catch ( IllegalAccessException e )
+                {
+                    e.printStackTrace();
+                }
+            }
+            catch ( MojoExecutionException e )
+            {
+                e.printStackTrace();
+            }
+        }
+        return new DOMSource( document );
     }
+*/
+
 }