Author: brett
Date: Mon Jun 30 18:39:33 2008
New Revision: 672971

URL: http://svn.apache.org/viewvc?rev=672971&view=rev
Log:
[NMAVEN-110] Ability to generate .vbproj files in the Solution generator
Submitted by: Maria Catherine Tan

Modified:
    
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs
    
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs
    
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs
    
incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java
    
incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs

Modified: 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs
 (original)
+++ 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/IProjectReference.cs
 Mon Jun 30 18:39:33 2008
@@ -25,12 +25,12 @@
 namespace NMaven.Solution
 {
        /// <summary>
-       /// Provides services for obtaining information about a project 
(.csproj) reference
+       /// Provides services for obtaining information about a project 
(.csproj or .vbproj) reference
        /// </summary>
        public interface IProjectReference
        {
                        
-               FileInfo CSProjectFile
+               FileInfo ProjectFile
                {
                        get;
                        set;

Modified: 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs
 (original)
+++ 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectGeneratorImpl.cs
 Mon Jun 30 18:39:33 2008
@@ -39,12 +39,22 @@
        /// </summary>
        internal sealed class ProjectGeneratorImpl : IProjectGenerator
        {
+        private Dictionary<String, String> directoryToFileNameExtensionMapping;
+
+        private Dictionary<String, String> directoryToImportProject;
                
         /// <summary>
         /// Constructor
         /// </summary>
                internal ProjectGeneratorImpl()
                {
+            directoryToFileNameExtensionMapping = new 
Dictionary<string,string>();
+            directoryToFileNameExtensionMapping.Add("csharp", ".csproj");
+            directoryToFileNameExtensionMapping.Add("vb", ".vbproj");
+
+            directoryToImportProject = new Dictionary<string, string>();
+            directoryToImportProject.Add("csharp", 
@"$(MSBuildBinPath)\Microsoft.CSharp.Targets");
+            directoryToImportProject.Add("vb", 
@"$(MSBuildBinPath)\Microsoft.VisualBasic.Targets");
                }
                
            public IProjectReference GenerateProjectFor(NMaven.Model.Pom.Model 
model, 
@@ -68,11 +78,12 @@
                                                                 
@"..\..\..\target\obj\",
                                                                 
projectReferences,
                                                                 
localRepository);
-                       FileInfo fileInfo = new 
FileInfo(sourceFileDirectory.FullName + @"\" + projectFileName + ".csproj");
+            String fileNameExtension = 
directoryToFileNameExtensionMapping[sourceFileDirectory.Name];
+            FileInfo fileInfo = new FileInfo(sourceFileDirectory.FullName + 
@"\" + projectFileName + fileNameExtension);
                    project.Save(fileInfo.FullName);
 
             IProjectReference projectReference = 
Factory.createDefaultProjectReference();
-                   projectReference.CSProjectFile = fileInfo;
+                   projectReference.ProjectFile = fileInfo;
                    projectReference.ProjectGuid = projectGuid;
                    projectReference.ProjectName = projectFileName;
                        return projectReference;                
@@ -90,12 +101,23 @@
                        Guid solutionGuid = Guid.NewGuid();
                        foreach(IProjectReference projectReference in 
projectReferences) 
                        {
-                               writer.Write("Project(\"{");
-                               
writer.Write("FAE04EC0-301F-11D3-BF4B-00C04F79EFBC");
+                string projectType = null;
+                string projectFileExtension = 
projectReference.ProjectFile.Extension;
+                if (projectFileExtension == ".csproj")
+                {
+                    projectType = "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC";
+                }
+                else if (projectFileExtension == ".vbproj")
+                {
+                    projectType = "F184B08F-C81C-45F6-A57F-5ABD9991F28F";
+                }
+
+                writer.Write("Project(\"{");
+                writer.Write(projectType);
                                writer.Write("}\") = \"");
                                writer.Write(projectReference.ProjectName);
                                writer.Write("\", \"");
-                               
writer.Write(projectReference.CSProjectFile.FullName);
+                               
writer.Write(projectReference.ProjectFile.FullName);
                                writer.Write("\", \"{");
                                
writer.Write(projectReference.ProjectGuid.ToString());
                                writer.WriteLine("}\"");
@@ -142,9 +164,11 @@
             Engine engine = new 
Engine(Environment.GetEnvironmentVariable("SystemRoot") + 
@"\Microsoft.NET\Framework\v2.0.50727");
             Project project = new Project(engine);
 
+            string outputType = GetOutputType(model.packaging, 
"test".Equals(sourceFileDirectory.Parent.Name));
+
             Console.WriteLine("ProjectGuid = " + projectGuid.ToString() + ", 
RootNameSpace = " +
                 model.groupId + ", AssemblyName = " + assemblyName + ", 
BaseIntPath = " +
-                baseIntermediateOutputPath + ", OutputType = " + 
GetOutputType(model.packaging) + 
+                baseIntermediateOutputPath + ", OutputType = " + outputType + 
                 ", Packaging = " + model.packaging);
             //Main Properties
             BuildPropertyGroup groupProject = 
project.AddNewPropertyGroup(false);
@@ -154,14 +178,14 @@
             groupProject.AddNewProperty("RootNameSpace", model.groupId);
             groupProject.AddNewProperty("AssemblyName", assemblyName);
             groupProject.AddNewProperty("BaseIntermediateOutputPath", 
baseIntermediateOutputPath);
-            groupProject.AddNewProperty("OutputType", 
GetOutputType(model.packaging));
+            groupProject.AddNewProperty("OutputType", outputType);
             
             //Debug Properties
             groupProject = project.AddNewPropertyGroup(false);
             buildProperty.Condition = " '$(Configuration)' == '' ";
             groupProject.AddNewProperty( "OutputPath", assemblyOutputPath, 
false);
-            
-            
project.AddNewImport(@"$(MSBuildBinPath)\Microsoft.CSharp.Targets", null);
+
+            
project.AddNewImport(directoryToImportProject[sourceFileDirectory.Name], null);
             DirectoryInfo configDirectory = new 
DirectoryInfo(Environment.CurrentDirectory + @"\src\main\config");
             if(configDirectory.Exists)
             {
@@ -187,7 +211,7 @@
                        BuildItemGroup itemGroup = project.AddNewItemGroup();
                        foreach(IProjectReference projectReference in 
projectReferences)
                        {
-                               BuildItem buildItem = 
itemGroup.AddNewItem("ProjectReference", 
projectReference.CSProjectFile.FullName);
+                               BuildItem buildItem = 
itemGroup.AddNewItem("ProjectReference", projectReference.ProjectFile.FullName);
                                buildItem.SetMetadata("Project", "{" + 
projectReference.ProjectGuid.ToString() + "}");
                                buildItem.SetMetadata("Name", projectName);     
        
                        }
@@ -313,15 +337,15 @@
             }
                }
                
-               private String GetOutputType(String type)
-               {
-                       if (type.Equals("library") || type.Equals("netplugin") 
|| type.Equals("visual-studio-addin")
+               private String GetOutputType(String type,bool isATest)
+        {
+            if (type.Equals("library") || type.Equals("netplugin") || 
type.Equals("visual-studio-addin")
                 || type.Equals("sharp-develop-addin") || type.Equals("nar")) 
return "Library";
-                       else if (type.Equals("exe")) return "Exe";
-                       else if (type.Equals("winexe")) return "WinExe";
-                       else if (type.Equals("module")) return "Module";
-                       return null;
-               }
+            else if (type.Equals("exe")) return isATest ? "Library" : "Exe";
+            else if (type.Equals("winexe")) return "WinExe";
+            else if (type.Equals("module")) return "Module";
+            return null;
+        }
                
                private String GetExtension(String type)
                {

Modified: 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs
 (original)
+++ 
incubator/nmaven/branches/NMAVEN_0.14/assemblies/NMaven.Solution/ProjectReferenceImpl.cs
 Mon Jun 30 18:39:33 2008
@@ -30,7 +30,7 @@
        internal sealed class ProjectReferenceImpl : IProjectReference
        {
                
-               private FileInfo csProjFile;
+               private FileInfo projFile;
                
                private string projectName;
                
@@ -40,16 +40,16 @@
                {
                }
                
-               public FileInfo CSProjectFile
+               public FileInfo ProjectFile
                {
                        get
                        {
-                               return csProjFile;      
+                               return projFile;        
                        }
                        
                        set
                        {
-                               csProjFile = value;     
+                               projFile = value;       
                        }
                }
                

Modified: 
incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- 
incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java
 (original)
+++ 
incubator/nmaven/branches/NMAVEN_0.14/plugins/maven-compile-plugin/src/main/java/org/apache/maven/dotnet/plugin/compile/TestSourceProcessorMojo.java
 Mon Jun 30 18:39:33 2008
@@ -77,6 +77,7 @@
         List<String> excludeList = new ArrayList<String>();
         excludeList.add( "*.suo" );
         excludeList.add( "*.csproj" );
+        excludeList.add( "*.vbproj" );
         excludeList.add( "*.sln" );
         excludeList.add( "obj/**" );
         for ( int i = 0; i < testExcludes.length; ++i )

Modified: 
incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs?rev=672971&r1=672970&r2=672971&view=diff
==============================================================================
--- 
incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs
 (original)
+++ 
incubator/nmaven/branches/NMAVEN_0.14/plugins/netplugins/NMaven.Plugin.Solution/src/main/csharp/NMaven/Plugin/Solution/SolutionMojo.cs
 Mon Jun 30 18:39:33 2008
@@ -99,35 +99,41 @@
                        } 
                        else
                        {
-                               IProjectReference mainProjectReference = null;
-                               if(new DirectoryInfo(currentDirectory.FullName 
+ @"\src\main\csharp\").Exists)
-                               {
-                                       mainProjectReference = 
-                                               
projectGenerator.GenerateProjectFor(model,
-                                                                   new 
DirectoryInfo(currentDirectory.FullName + @"\src\main\csharp\"),
-                                                                   
model.artifactId, null, new DirectoryInfo(localRepository));
-                                       Console.WriteLine("NMAVEN-000-000: 
Generated project: File Name = "
-                                                         + 
mainProjectReference.CSProjectFile.FullName);
-                                       
projectReferences.Add(mainProjectReference);
-                               }
-                               if(new DirectoryInfo( currentDirectory.FullName 
+ @"\src\test\csharp\").Exists)
-                               {
-                                       List<IProjectReference> mainRef = new 
List<IProjectReference>();
-                                       if(mainProjectReference != null)
-                                       {
-                                               
mainRef.Add(mainProjectReference);
-                                       }
-                                       IProjectReference projectReference = 
-                                               
projectGenerator.GenerateProjectFor(model,
-                                                                   new 
DirectoryInfo(currentDirectory.FullName + @"\src\test\csharp\"),
-                                                                   
model.artifactId + "-Test", mainRef, new DirectoryInfo(localRepository));
-                                       Console.WriteLine("NMAVEN-000-000: 
Generated test project: File Name = "
-                                                         + 
projectReference.CSProjectFile.FullName);
-                                       
projectReferences.Add(projectReference);                                        
-                               }
+                createMainAndTestProjectFiles(currentDirectory, model, 
projectReferences, projectGenerator, "csharp");
+                createMainAndTestProjectFiles(currentDirectory, model, 
projectReferences, projectGenerator, "vb");
                        }       
                        return projectReferences;
                }
+
+        private void createMainAndTestProjectFiles(DirectoryInfo 
currentDirectory, NMaven.Model.Pom.Model model, List<IProjectReference> 
projectReferences, IProjectGenerator projectGenerator, string projType)
+        {
+            IProjectReference mainProjectReference = null;
+            if (new DirectoryInfo(currentDirectory.FullName + @"\src\main\" + 
projType + @"\").Exists)
+            {
+                mainProjectReference =
+                    projectGenerator.GenerateProjectFor(model,
+                                                new 
DirectoryInfo(currentDirectory.FullName + @"\src\main\" + projType + @"\"),
+                                                model.artifactId, null, new 
DirectoryInfo(localRepository));
+                Console.WriteLine("NMAVEN-000-000: Generated project: File 
Name = "
+                                  + mainProjectReference.ProjectFile.FullName);
+                projectReferences.Add(mainProjectReference);
+            }
+            if (new DirectoryInfo(currentDirectory.FullName + @"\src\test\" + 
projType + @"\").Exists)
+            {
+                List<IProjectReference> mainRef = new 
List<IProjectReference>();
+                if (mainProjectReference != null)
+                {
+                    mainRef.Add(mainProjectReference);
+                }
+                IProjectReference projectReference =
+                    projectGenerator.GenerateProjectFor(model,
+                                                new 
DirectoryInfo(currentDirectory.FullName + @"\src\test\" + projType + @"\"),
+                                                model.artifactId + "-Test", 
mainRef, new DirectoryInfo(localRepository));
+                Console.WriteLine("NMAVEN-000-000: Generated test project: 
File Name = "
+                                  + projectReference.ProjectFile.FullName);
+                projectReferences.Add(projectReference);
+            }
+        }
                
                private string GetArgFor(string name, string[] args)
                {


Reply via email to