From nmaven-commits-return-145-apmail-incubator-nmaven-commits-archive=incubator.apache.org@incubator.apache.org Fri Feb 23 22:54:26 2007 Return-Path: Delivered-To: apmail-incubator-nmaven-commits-archive@locus.apache.org Received: (qmail 75987 invoked from network); 23 Feb 2007 22:54:26 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 23 Feb 2007 22:54:26 -0000 Received: (qmail 19552 invoked by uid 500); 23 Feb 2007 22:54:34 -0000 Delivered-To: apmail-incubator-nmaven-commits-archive@incubator.apache.org Received: (qmail 19525 invoked by uid 500); 23 Feb 2007 22:54:34 -0000 Mailing-List: contact nmaven-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: nmaven-dev@incubator.apache.org Delivered-To: mailing list nmaven-commits@incubator.apache.org Received: (qmail 19513 invoked by uid 99); 23 Feb 2007 22:54:34 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 23 Feb 2007 14:54:34 -0800 X-ASF-Spam-Status: No, hits=-99.5 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 23 Feb 2007 14:54:24 -0800 Received: by eris.apache.org (Postfix, from userid 65534) id B61C61A981A; Fri, 23 Feb 2007 14:54:04 -0800 (PST) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r511157 - in /incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src: main/csharp/Core/ main/csharp/Core/Impl/ test/csharp/Core/ test/csharp/Core/Impl/ Date: Fri, 23 Feb 2007 22:54:04 -0000 To: nmaven-commits@incubator.apache.org From: sisbell@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070223225404.B61C61A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sisbell Date: Fri Feb 23 14:54:03 2007 New Revision: 511157 URL: http://svn.apache.org/viewvc?view=rev&rev=511157 Log: Handles generating Solution files and project files. API more flexible. Still contains some hard-coded values. Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectGenerator.cs incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectReference.cs incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectRepository.cs incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectGeneratorImpl.cs incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectReferenceImpl.cs incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectRepositoryImpl.cs incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/test/csharp/Core/ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/test/csharp/Core/Impl/ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/test/csharp/Core/Impl/NMavenContextImplTest.cs Removed: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/NMavenContextImpl.cs incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/NMavenContext.cs Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectGenerator.cs URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectGenerator.cs?view=auto&rev=511157 ============================================================================== --- incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectGenerator.cs (added) +++ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectGenerator.cs Fri Feb 23 14:54:03 2007 @@ -0,0 +1,24 @@ +using System; +using System.IO; +using System.Collections.Generic; +using NMaven.Model; + +namespace NMaven.Core +{ + /// + /// Description of Interface1. + /// + public interface IProjectGenerator + { + + IProjectReference generateProjectFor(NMaven.Model.Model model, + DirectoryInfo sourceFileDirectory, + string projectFileName, + List projectReferences); + + void generateSolutionFor(List projectReferences); + + NMaven.Model.Model createPomModelFor(string fileName); + + } +} Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectReference.cs URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectReference.cs?view=auto&rev=511157 ============================================================================== --- incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectReference.cs (added) +++ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectReference.cs Fri Feb 23 14:54:03 2007 @@ -0,0 +1,30 @@ + +using System; +using System.IO; + +namespace NMaven.Core +{ + /// + /// Description of IProjectReference. + /// + public interface IProjectReference + { + FileInfo CsProjFile + { + get; + set; + } + + string ProjectName + { + get; + set; + } + + Guid ProjectGuid + { + get; + set; + } + } +} Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectRepository.cs URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectRepository.cs?view=auto&rev=511157 ============================================================================== --- incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectRepository.cs (added) +++ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/IProjectRepository.cs Fri Feb 23 14:54:03 2007 @@ -0,0 +1,17 @@ + +using System; +using System.Collections.Generic; + +namespace NMaven.Core +{ + /// + /// Description of IProjectRepositorycs. + /// + public interface IProjectRepository + { + List getProjectObjectModelsFor(NMaven.Model.Model rootPom); + + void init(IProjectGenerator projectGenerator); + + } +} Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectGeneratorImpl.cs URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectGeneratorImpl.cs?view=auto&rev=511157 ============================================================================== --- incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectGeneratorImpl.cs (added) +++ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectGeneratorImpl.cs Fri Feb 23 14:54:03 2007 @@ -0,0 +1,273 @@ +using System; +using NMaven.Core; +using NMaven.Model; +using System.IO; +using Microsoft.Build.BuildEngine; +using System.Xml.Serialization; +using System.Collections.Generic; +using System.Reflection; +using System.Text; + +namespace NMaven.Core.Impl +{ + /// + /// Description of ProjectGeneratorImpl. + /// + public class ProjectGeneratorImpl : IProjectGenerator + { + + public ProjectGeneratorImpl() + { + } + + public IProjectReference generateProjectFor(NMaven.Model.Model model, + DirectoryInfo sourceFileDirectory, + string projectFileName, + List projectReferences) + { + Guid projectGuid = Guid.NewGuid(); + + if(projectReferences == null) projectReferences = new List(); + Project project = getProjectFromPomModel(model, sourceFileDirectory, projectFileName, projectGuid, + @"..\..\..\target\bin\Debug\", projectReferences); + FileInfo fileInfo = new FileInfo(sourceFileDirectory.FullName + @"\" + projectFileName + ".csproj"); + project.Save(fileInfo.FullName); + + IProjectReference projectReference = new ProjectReferenceImpl(); + projectReference.CsProjFile = fileInfo; + projectReference.ProjectGuid = projectGuid; + projectReference.ProjectName = projectFileName; + return projectReference; + } + + public void generateSolutionFor(List projectReferences) + { + TextWriter writer = + new StreamWriter(@"C:\Documents and Settings\shane\nmaven-apache\SI_IDE\assemblies\test.sln", false, System.Text.Encoding.UTF8); + writer.WriteLine(""); + writer.WriteLine("Microsoft Visual Studio Solution File, Format Version 9.00"); + writer.WriteLine("# Visual Studio 2005"); + writer.WriteLine("# SharpDevelop 2.1.0.2376"); + + Guid solutionGuid = Guid.NewGuid(); + foreach(IProjectReference projectReference in projectReferences) + { + writer.Write("Project(\"{"); + writer.Write("FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"); + writer.Write("}\") = \""); + writer.Write(projectReference.ProjectName); + writer.Write("\", \""); + writer.Write(projectReference.CsProjFile.FullName); + writer.Write("\", \"{"); + writer.Write(projectReference.ProjectGuid.ToString()); + writer.WriteLine("}\""); + writer.WriteLine("EndProject"); + + } + writer.Flush(); + writer.Close(); + } + + public NMaven.Model.Model createPomModelFor(string fileName) + { + TextReader reader = new StreamReader(fileName); + XmlSerializer serializer = new XmlSerializer(typeof(NMaven.Model.Model)); + return (NMaven.Model.Model) serializer.Deserialize(reader); + } + + private Project createProjectFor(string fileName) + { + Engine engine = new Engine(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"); + Project project = new Project(engine); + project.Load(@fileName); + return project; + } + + + private Project getProjectFromPomModel(NMaven.Model.Model model, + DirectoryInfo sourceFileDirectory, + string assemblyName, + Guid projectGuid, + string assemblyOutputPath, + List projectReferences) + { + Engine engine = new Engine(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"); + Project project = new Project(engine); + + + //Main Properties + BuildPropertyGroup groupProject = project.AddNewPropertyGroup(false); + groupProject.AddNewProperty("ProjectGuid", "{" + projectGuid.ToString() + "}"); + BuildProperty buildProperty = groupProject.AddNewProperty("Configuration", "Debug"); + buildProperty.Condition = " '$(Configuration)' == '' "; + groupProject.AddNewProperty("RootNameSpace", model.groupId); + groupProject.AddNewProperty("AssemblyName", assemblyName); + groupProject.AddNewProperty("OutputType", getOutputType(model.packaging)); + + //Debug Properties + groupProject = project.AddNewPropertyGroup(false); + buildProperty.Condition = " '$(Configuration)' == '' "; + groupProject.AddNewProperty( "OutputPath", assemblyOutputPath, false); + + project.AddNewImport(@"$(MSBuildBinPath)\Microsoft.CSharp.Targets", null); + + addProjectDependencies(project, model, sourceFileDirectory); + addFoldersToProject(project, null, sourceFileDirectory, sourceFileDirectory); + addClassFilesToProject(project, null, sourceFileDirectory, sourceFileDirectory); + addProjectReferences(project, assemblyName, projectReferences); + return project; + + } + + private void addProjectReferences(Project project, string projectName, List projectReferences) + { + BuildItemGroup itemGroup = project.AddNewItemGroup(); + foreach(IProjectReference projectReference in projectReferences) + { + BuildItem buildItem = itemGroup.AddNewItem("ProjectReference", projectReference.CsProjFile.FullName); + buildItem.SetMetadata("Project", "{" + projectReference.ProjectGuid.ToString() + "}"); + buildItem.SetMetadata("Name", projectName); + } + } + + private void addFoldersToProject(Project project, BuildItemGroup folderGroup, DirectoryInfo rootDirectory, DirectoryInfo sourceFileDirectory) + { + DirectoryInfo[] directoryInfos = rootDirectory.GetDirectories(); + if(directoryInfos != null && directoryInfos.Length > 0) + { + if(folderGroup == null) folderGroup = project.AddNewItemGroup(); + + foreach(DirectoryInfo di in directoryInfos) + { + if(di.FullName.Contains(".svn") || di.FullName.Contains(@"obj") || di.FullName.Contains(@"bin")) + continue; + folderGroup.AddNewItem("Folder", di.FullName.Substring(sourceFileDirectory.FullName.Length)); + addFoldersToProject(project, folderGroup, di, sourceFileDirectory); + } + } + } + + private void addClassFilesToProject(Project project, BuildItemGroup compileGroup, DirectoryInfo rootDirectory, DirectoryInfo sourceFileDirectory) + { + DirectoryInfo[] directoryInfos = rootDirectory.GetDirectories(); + if(directoryInfos != null && directoryInfos.Length > 0) + { + if(compileGroup == null) compileGroup = project.AddNewItemGroup(); + + foreach(DirectoryInfo di in directoryInfos) + { + if(di.FullName.Contains(".svn") || di.FullName.Contains("obj") || di.FullName.Contains("bin")) + continue; + foreach(FileInfo fileInfo in di.GetFiles()) + { + BuildItem buildItem = + compileGroup.AddNewItem("Compile", + fileInfo.FullName.Substring(sourceFileDirectory.FullName.Length)); + //buildItem.SetMetadata("Link", fileInfo.FullName.Substring(sourcedir.FullName.Length + 1)); + } + addClassFilesToProject(project, compileGroup, di, sourceFileDirectory); + } + } + } + + private void addProjectDependencies(Project project, NMaven.Model.Model model, DirectoryInfo sourceFileDirectory) + { + + BuildItemGroup group = project.AddNewItemGroup(); + group.AddNewItem("Reference", "System.Xml"); + + foreach(Dependency dependency in model.dependencies) { + String repoPath = Environment.GetEnvironmentVariable("HOMEDRIVE") + + Environment.GetEnvironmentVariable("HOMEPATH") + + @"\.m2\repository\" + dependency.groupId.Replace(".", "\\") + + "\\" + dependency.artifactId + "\\" + dependency.version + "\\" + dependency.artifactId + ".dll"; + BuildItem buildItem = group.AddNewItem("Reference", dependency.artifactId); + if(!dependency.GetType().Equals("gac")) buildItem.SetMetadata("HintPath", repoPath, false); + } + + DirectoryInfo[] directoryInfos = sourceFileDirectory.GetDirectories(); + + ClassParser classParser = new ClassParser(); + List fileInfos = new List(); + addFileInfosFromSourceDirectories(sourceFileDirectory, fileInfos); + List dependencies = classParser.getDependencies(fileInfos); + foreach(string dependency in dependencies) + { + try { + DirectoryInfo fileInfo = new DirectoryInfo(@"C:\WINDOWS\assembly\GAC_MSIL\" + dependency); + if(fileInfo.Exists) { + group.AddNewItem("Reference", dependency); + } else + Console.WriteLine("FNE: " + fileInfo.FullName); + } + catch(Exception e) + { + Console.WriteLine(e.Message); + } + + } + } + + + private void addFileInfosFromSourceDirectories(DirectoryInfo sourceFileDirectory, List fileInfos ) + { + DirectoryInfo[] directoryInfos = sourceFileDirectory.GetDirectories(); + if(directoryInfos != null && directoryInfos.Length > 0) + { + foreach(DirectoryInfo di in directoryInfos) + { + if(di.FullName.Contains(".svn") || di.FullName.Contains("obj") || di.FullName.Contains("bin")) + continue; + fileInfos.AddRange(di.GetFiles()); + addFileInfosFromSourceDirectories(di, fileInfos); + } + } + } + + private string getOutputType(String type) + { + if (type.Equals("library")) return "Library"; + else if (type.Equals("exe")) return "Exe"; + else if (type.Equals("winexe")) return "WinExe"; + return null; + } + + private class ClassParser { + + public List getDependencies(List fileInfos) + { + List dependencies = new List(); + foreach(FileInfo fileInfo in fileInfos) + { + try + { + using (StreamReader sr = new StreamReader(fileInfo.FullName)) + { + String line; + while ((line = sr.ReadLine()) != null) + { + if (line.StartsWith("namespace")) break; + if (line.StartsWith("//")) continue; + if (line.StartsWith("using")) { + string[] tokens = line.Remove(line.Length - 1).Split(new char[1]{' '}); + if(!dependencies.Contains(tokens[1])) + { + dependencies.Add(tokens[1]); + } + } + } + } + } + catch (Exception e) + { + Console.WriteLine(e.Message); + } + + } + + return dependencies; + } + + } + } +} Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectReferenceImpl.cs URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectReferenceImpl.cs?view=auto&rev=511157 ============================================================================== --- incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectReferenceImpl.cs (added) +++ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectReferenceImpl.cs Fri Feb 23 14:54:03 2007 @@ -0,0 +1,61 @@ +using System; +using System.IO; + +namespace NMaven.Core.Impl +{ + /// + /// Description of ProjectReferenceImpl. + /// + public class ProjectReferenceImpl : IProjectReference + { + + private FileInfo csProjFile; + + private string projectName; + + private Guid projectGuid; + + public ProjectReferenceImpl() + { + } + + public FileInfo CsProjFile + { + get + { + return csProjFile; + } + + set + { + csProjFile = value; + } + } + + public string ProjectName + { + get + { + return projectName; + } + + set + { + projectName = value; + } + } + + public Guid ProjectGuid + { + get + { + return projectGuid; + } + + set + { + projectGuid = value; + } + } + } +} Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectRepositoryImpl.cs URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectRepositoryImpl.cs?view=auto&rev=511157 ============================================================================== --- incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectRepositoryImpl.cs (added) +++ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/main/csharp/Core/Impl/ProjectRepositoryImpl.cs Fri Feb 23 14:54:03 2007 @@ -0,0 +1,60 @@ +using System; +using NMaven.Core; +using NMaven.Model; +using System.IO; +using Microsoft.Build.BuildEngine; +using System.Xml.Serialization; +using System.Collections.Generic; +using System.Reflection; + +namespace NMaven.Core.Impl +{ + /// + /// Description of ProjectRepositoryImpl. + /// + public class ProjectRepositoryImpl : IProjectRepository + { + + private IProjectGenerator projectGenerator; + + private string basedir = @"C:\Documents and Settings\shane\nmaven-apache\SI_IDE\assemblies"; + + public ProjectRepositoryImpl() + { + } + + public List getProjectObjectModelsFor(NMaven.Model.Model rootPom) + { + List projectObjectModels = new List(); + if(rootPom.packaging.Equals("pom")) + { + foreach(String module in rootPom.modules) + { + NMaven.Model.Model model = createPomModelFor(basedir + @"\" + module + @"\pom.xml"); + } + } + else + { + Dependency[] dependencies = rootPom.dependencies; + foreach(Dependency dependency in dependencies) + { + + } + } + return projectObjectModels; + + } + + public void init(IProjectGenerator projectGenerator) + { + this.projectGenerator = projectGenerator; + } + + private NMaven.Model.Model createPomModelFor(string fileName) + { + TextReader reader = new StreamReader(fileName); + XmlSerializer serializer = new XmlSerializer(typeof(NMaven.Model.Model)); + return (NMaven.Model.Model) serializer.Deserialize(reader); + } + } +} Added: incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/test/csharp/Core/Impl/NMavenContextImplTest.cs URL: http://svn.apache.org/viewvc/incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/test/csharp/Core/Impl/NMavenContextImplTest.cs?view=auto&rev=511157 ============================================================================== --- incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/test/csharp/Core/Impl/NMavenContextImplTest.cs (added) +++ incubator/nmaven/branches/SI_IDE/assemblies/NMaven.Core/src/test/csharp/Core/Impl/NMavenContextImplTest.cs Fri Feb 23 14:54:03 2007 @@ -0,0 +1,46 @@ +using NUnit.Framework; +using System; +using System.IO; +using NMaven.Core.Impl; +using NMaven.Model; +using Microsoft.Build.BuildEngine; +using System.Collections; +using System.Collections.Generic; + +namespace NMaven.Core.Impl +{ + [TestFixture] + public class TestNMavenContextImplTest + { + [Test] + public void TestMethod() + { + IProjectGenerator projectGenerator = new ProjectGeneratorImpl(); + + NMaven.Model.Model model = projectGenerator.createPomModelFor(@"..\..\..\pom.xml"); + Console.WriteLine(model.artifactId); + + IProjectReference projectReference = + projectGenerator.generateProjectFor(model, + new DirectoryInfo(@"C:\Documents and Settings\shane\nmaven-apache\SI_IDE\assemblies\NMaven.Core\src\main\csharp\"), + model.artifactId + "T1", null); + List projectReferences = new List(); + projectReferences.Add(projectReference); + + IProjectReference testReference = projectGenerator.generateProjectFor(model, + new DirectoryInfo(@"C:\Documents and Settings\shane\nmaven-apache\SI_IDE\assemblies\NMaven.Core\src\test\csharp\"), + model.artifactId + "-Test1", projectReferences); + projectReferences.Add(testReference); + + + projectGenerator.generateSolutionFor(projectReferences); + + } + + [Test] + public void TestA() + { + + } +} +}