Moved Project into its own ObjectModel and various other fixes

This commit is contained in:
Michael Becker 2014-06-10 15:13:49 -04:00
parent e712df4873
commit f04fd3b798
11 changed files with 131 additions and 74 deletions

View File

@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using UniversalEditor.ObjectModels.PropertyList;
namespace UniversalEditor.ObjectModels.Solution
namespace UniversalEditor.ObjectModels.Project
{
public class ProjectFile : ICloneable
{

View File

@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UniversalEditor.ObjectModels.Solution
namespace UniversalEditor.ObjectModels.Project
{
public class ProjectFileSystem
{
@ -19,6 +19,11 @@ namespace UniversalEditor.ObjectModels.Solution
/// </summary>
public ProjectFile.ProjectFileCollection Files { get { return mvarFiles; } }
public void Clear()
{
mvarFolders.Clear();
mvarFiles.Clear();
}
public void CopyTo(ProjectFileSystem clone)
{
foreach (ProjectFile file in mvarFiles)

View File

@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UniversalEditor.ObjectModels.Solution
namespace UniversalEditor.ObjectModels.Project
{
public class ProjectFolder : ICloneable
{

View File

@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UniversalEditor.ObjectModels.FileSystem;
using UniversalEditor.ObjectModels.PropertyList;
namespace UniversalEditor.ObjectModels.Project
{
public class ProjectObjectModel : ObjectModel
{
public class ProjectObjectModelCollection
: System.Collections.ObjectModel.Collection<ProjectObjectModel>
{
}
private static ObjectModelReference _omr = null;
public override ObjectModelReference MakeReference()
{
if (_omr == null)
{
_omr = base.MakeReference();
_omr.Title = "Project";
_omr.Description = "Stores a set of related files and folders with an accompanying configuration.";
}
return _omr;
}
public override void Clear()
{
mvarConfiguration.Clear();
mvarFileSystem.Clear();
mvarID = Guid.Empty;
mvarProjectType = null;
mvarReferences.Clear();
mvarRelativeFileName = String.Empty;
mvarTitle = String.Empty;
}
public override void CopyTo(ObjectModel where)
{
ProjectObjectModel clone = (where as ProjectObjectModel);
mvarConfiguration.CopyTo(clone.Configuration);
mvarFileSystem.CopyTo(clone.FileSystem);
clone.ID = mvarID;
clone.ProjectType = mvarProjectType;
foreach (Reference _ref in mvarReferences)
{
clone.References.Add(_ref);
}
clone.RelativeFileName = (mvarRelativeFileName.Clone() as string);
clone.Title = (mvarTitle.Clone() as string);
}
private Guid mvarID = Guid.Empty;
public Guid ID { get { return mvarID; } set { mvarID = value; } }
private string mvarTitle = String.Empty;
public string Title { get { return mvarTitle; } set { mvarTitle = value; } }
private PropertyListObjectModel mvarConfiguration = new PropertyListObjectModel();
public PropertyListObjectModel Configuration { get { return mvarConfiguration; } }
private Reference.ReferenceCollection mvarReferences = new Reference.ReferenceCollection();
public Reference.ReferenceCollection References { get { return mvarReferences; } }
private ProjectFileSystem mvarFileSystem = new ProjectFileSystem();
public ProjectFileSystem FileSystem { get { return mvarFileSystem; } }
private ProjectType mvarProjectType = null;
public ProjectType ProjectType { get { return mvarProjectType; } set { mvarProjectType = value; } }
private string mvarRelativeFileName = String.Empty;
public string RelativeFileName { get { return mvarRelativeFileName; } set { mvarRelativeFileName = value; } }
}
}

View File

@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UniversalEditor.ObjectModels.Solution
namespace UniversalEditor.ObjectModels.Project
{
public class Reference
{

View File

@ -1,38 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UniversalEditor.ObjectModels.FileSystem;
using UniversalEditor.ObjectModels.PropertyList;
namespace UniversalEditor.ObjectModels.Solution
{
public class Project
{
public class ProjectCollection
: System.Collections.ObjectModel.Collection<Project>
{
}
private Guid mvarID = Guid.Empty;
public Guid ID { get { return mvarID; } set { mvarID = value; } }
private string mvarTitle = String.Empty;
public string Title { get { return mvarTitle; } set { mvarTitle = value; } }
private PropertyListObjectModel mvarConfiguration = new PropertyListObjectModel();
public PropertyListObjectModel Configuration { get { return mvarConfiguration; } }
private Reference.ReferenceCollection mvarReferences = new Reference.ReferenceCollection();
public Reference.ReferenceCollection References { get { return mvarReferences; } }
private ProjectFileSystem mvarFileSystem = new ProjectFileSystem();
public ProjectFileSystem FileSystem { get { return mvarFileSystem; } }
private ProjectType mvarProjectType = null;
public ProjectType ProjectType { get { return mvarProjectType; } set { mvarProjectType = value; } }
private string mvarRelativeFileName = String.Empty;
public string RelativeFileName { get { return mvarRelativeFileName; } set { mvarRelativeFileName = value; } }
}
}

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UniversalEditor.ObjectModels.Project;
namespace UniversalEditor.ObjectModels.Solution
{
@ -20,22 +21,24 @@ namespace UniversalEditor.ObjectModels.Solution
public override void Clear()
{
throw new NotImplementedException();
mvarConfiguration.Clear();
mvarProjects.Clear();
mvarTitle = String.Empty;
}
public override void CopyTo(ObjectModel where)
{
SolutionObjectModel solution = (where as SolutionObjectModel);
solution.Title = (mvarTitle.Clone() as string);
foreach (Project project in mvarProjects)
foreach (ProjectObjectModel project in mvarProjects)
{
solution.Projects.Add(project);
}
mvarConfiguration.CopyTo(solution.Configuration);
}
private Project.ProjectCollection mvarProjects = new Project.ProjectCollection();
public Project.ProjectCollection Projects { get { return mvarProjects; } }
private ProjectObjectModel.ProjectObjectModelCollection mvarProjects = new ProjectObjectModel.ProjectObjectModelCollection();
public ProjectObjectModel.ProjectObjectModelCollection Projects { get { return mvarProjects; } }
private string mvarTitle = String.Empty;
public string Title { get { return mvarTitle; } set { mvarTitle = value; } }

View File

@ -78,11 +78,11 @@
<Compile Include="ObjectModels\PropertyList\Property.cs" />
<Compile Include="ObjectModels\PropertyList\PropertyListObjectModel.cs" />
<Compile Include="ObjectModels\PropertyList\PropertyValueType.cs" />
<Compile Include="ObjectModels\Solution\Project.cs" />
<Compile Include="ObjectModels\Solution\ProjectFile.cs" />
<Compile Include="ObjectModels\Solution\ProjectFileSystem.cs" />
<Compile Include="ObjectModels\Solution\ProjectFolder.cs" />
<Compile Include="ObjectModels\Solution\Reference.cs" />
<Compile Include="ObjectModels\Project\ProjectObjectModel.cs" />
<Compile Include="ObjectModels\Project\ProjectFile.cs" />
<Compile Include="ObjectModels\Project\ProjectFileSystem.cs" />
<Compile Include="ObjectModels\Project\ProjectFolder.cs" />
<Compile Include="ObjectModels\Project\Reference.cs" />
<Compile Include="ObjectModels\Solution\SolutionObjectModel.cs" />
<Compile Include="ObjectModels\Text\Plain\PlainTextObjectModel.cs" />
<Compile Include="ProjectType.cs" />
@ -95,6 +95,7 @@
<Name>UniversalEditor.Core</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.

View File

@ -6,7 +6,7 @@ using System.Text;
using UniversalEditor.ObjectModels.Markup;
using UniversalEditor.DataFormats.Markup.XML;
using UniversalEditor.ObjectModels.Solution;
using UniversalEditor.ObjectModels.Project;
using UniversalEditor.ObjectModels.PropertyList;
namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
@ -19,7 +19,7 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
if (_dfr == null)
{
_dfr = base.MakeReference();
_dfr.Capabilities.Add(typeof(SolutionObjectModel), DataFormatCapabilities.All);
_dfr.Capabilities.Add(typeof(ProjectObjectModel), DataFormatCapabilities.All);
_dfr.Filters.Add("Microsoft Visual Studio project", new string[] { "*.vbproj", "*.csproj", "*.jsproj", "*.wixproj", "*.fsproj", "*.pyproj", "*.sqlproj", "*.phpproj" });
}
return _dfr;
@ -38,15 +38,13 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
protected override void AfterLoadInternal(Stack<ObjectModel> objectModels)
{
MarkupObjectModel mom = (objectModels.Pop() as MarkupObjectModel);
SolutionObjectModel sln = (objectModels.Pop() as SolutionObjectModel);
ProjectObjectModel proj = (objectModels.Pop() as ProjectObjectModel);
}
protected override void BeforeSaveInternal(Stack<ObjectModel> objectModels)
{
SolutionObjectModel sln = (objectModels.Pop() as SolutionObjectModel);
ProjectObjectModel proj = (objectModels.Pop() as ProjectObjectModel);
MarkupObjectModel mom = new MarkupObjectModel();
Project proj = sln.Projects[0];
MarkupTagElement tagProject = new MarkupTagElement();
tagProject.FullName = "Project";
// remove for compatibility with older VS versions

View File

@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using UniversalEditor.Accessors;
using UniversalEditor.IO;
using UniversalEditor.ObjectModels.Project;
using UniversalEditor.ObjectModels.PropertyList;
using UniversalEditor.ObjectModels.Solution;
using UniversalEditor.UserInterface;
@ -43,6 +44,14 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
reader.Accessor.Seek(-3, SeekOrigin.Current);
}
string solutionFileName = String.Empty;
string solutionPath = String.Empty;
if (base.Accessor is FileAccessor)
{
solutionFileName = (base.Accessor as FileAccessor).FileName;
}
solutionPath = System.IO.Path.GetDirectoryName(solutionFileName);
string signature2a = reader.ReadLine();
if (!String.IsNullOrEmpty(signature2a)) throw new InvalidDataFormatException("Empty line should be present at beginning of file");
@ -50,7 +59,7 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
string signature2 = reader.ReadLine();
if (!signature2.StartsWith(signature2Verify)) throw new InvalidDataFormatException("File does not begin with \"" + signature2Verify + "\"");
Project lastProject = null;
ProjectObjectModel lastProject = null;
while (!reader.EndOfStream)
{
@ -65,18 +74,20 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
continue;
}
lastProject = new Project();
string strProjectTypeID = line.Substring(9, line.IndexOf(')') - 10);
Guid projectTypeID = new Guid(strProjectTypeID);
string restOfDeclaration = line.Substring(line.IndexOf('=') + 1).Trim();
string[] paramz = restOfDeclaration.Split(new string[] { "," }, "\"");
lastProject.Title = paramz[0].Trim();
lastProject.RelativeFileName = paramz[1].Trim();
lastProject.ID = new Guid(paramz[2].Trim());
sol.Projects.Add(lastProject);
string projectTitle = paramz[0].Trim();
string projectRelativeFileName = paramz[1].Trim();
string projectFileName = solutionPath + System.IO.Path.DirectorySeparatorChar.ToString() + projectRelativeFileName;
Guid projectID = new Guid(paramz[2].Trim());
ProjectObjectModel project = UniversalEditor.Common.Reflection.GetAvailableObjectModel<ProjectObjectModel>(projectFileName);
sol.Projects.Add(project);
lastProject = project;
}
else if (line == "EndProject")
{
@ -115,7 +126,7 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
writer.WriteLine("Microsoft Visual Studio Solution File, Format Version 12.00");
writer.WriteLine("# Visual Studio 2012");
foreach (Project project in sol.Projects)
foreach (ProjectObjectModel project in sol.Projects)
{
string projdir = soldir + "/" + project.Title;
project.RelativeFileName = project.Title + "\\" + project.Title + ".ueproj";
@ -131,7 +142,7 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
*/
Guid projectTypeGuid = Guid.Empty;
if (project.ProjectType != null) projectTypeGuid = project.ProjectType.ID;
writer.WriteLine("Project(\"" + projectTypeGuid.ToString("B") + "\") = \"" + project.Title + "\", \"" + project.RelativeFileName + "\", \"" + project.ID.ToString("B") + "\"");
writer.WriteLine("Project(\"" + projectTypeGuid.ToString("B").ToUpper() + "\") = \"" + project.Title + "\", \"" + project.RelativeFileName + "\", \"" + project.ID.ToString("B").ToUpper() + "\"");
writer.WriteLine("EndProject");
/*
}
@ -154,14 +165,14 @@ namespace UniversalEditor.DataFormats.Solution.Microsoft.VisualStudio
writer.WriteLine("\t\tRelease|Any CPU = Release|Any CPU");
writer.WriteLine("\tEndGlobalSection");
writer.WriteLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");
foreach (Project project in sol.Projects)
foreach (ProjectObjectModel project in sol.Projects)
{
writer.WriteLine("\t\t" + project.ID.ToString("B") + ".Debug|Any CPU.ActiveCfg = Debug|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B") + ".Debug|Any CPU.Build.0 = Debug|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B") + ".Debug|x86.ActiveCfg = Debug|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B") + ".Release|Any CPU.ActiveCfg = Release|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B") + ".Release|Any CPU.Build.0 = Release|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B") + ".Release|x86.ActiveCfg = Release|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B").ToUpper() + ".Debug|Any CPU.ActiveCfg = Debug|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B").ToUpper() + ".Debug|Any CPU.Build.0 = Debug|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B").ToUpper() + ".Debug|x86.ActiveCfg = Debug|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B").ToUpper() + ".Release|Any CPU.ActiveCfg = Release|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B").ToUpper() + ".Release|Any CPU.Build.0 = Release|Any CPU");
writer.WriteLine("\t\t" + project.ID.ToString("B").ToUpper() + ".Release|x86.ActiveCfg = Release|Any CPU");
}
writer.WriteLine("\tEndGlobalSection");
writer.WriteLine("\tGlobalSection(SolutionProperties) = preSolution");

View File

@ -35,7 +35,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DataFormats\Solution\Microsoft\VisualStudio\VisualStudioProjectDataFormat.cs" />
<Compile Include="DataFormats\Project\Microsoft\VisualStudio\VisualStudioProjectDataFormat.cs" />
<Compile Include="DataFormats\Solution\Microsoft\VisualStudio\VisualStudioSolutionDataFormat.cs" />
</ItemGroup>
<ItemGroup>
@ -52,6 +52,7 @@
<Name>UniversalEditor.Essential</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.