//internal static TargetClass TryLoad(CSClass csClass) //{ // TargetClass returnValue = null; // var uiClientPageAttribute = csClass.AttributeList.SingleOrDefault(i => i.TypeName == typeof(UIClientPageAttribute).Name && i.TypeNamespace == typeof(UIClientPageAttribute).Namespace); // if(uiClientPageAttribute != null) // { // returnValue = new TargetClass // { // SourceClassFullName = Convert.ToString(uiClientPageAttribute.GetAttributeParameter(0, "SourceClassFullName", true)), // TargetClassFullName = csClass.ClassFullName // }; // //If there is only one field, that is the user and designer file. // //If there are two or more files and one ends with ".designer.cs", that is the designer file and the the first of the others is the user file // //If there are two or more files and none ends with ".designer.cs", then the first one is the designer and user file // if(csClass.FilePathList.Count == 1) // { // returnValue.DesignerFilePath = csClass.FilePathList[0]; // returnValue.UserFilePath = csClass.FilePathList[0]; // } // else if (csClass.FilePathList.Count > 1) // { // returnValue.DesignerFilePath = csClass.FilePathList.FirstOrDefault(i=>i.EndsWith(".designer.cs", StringComparison.CurrentCultureIgnoreCase)); // if(string.IsNullOrEmpty(returnValue.DesignerFilePath)) // { // returnValue.DesignerFilePath = csClass.FilePathList[0]; // returnValue.UserFilePath = csClass.FilePathList[0]; // } // else // { // returnValue.UserFilePath = csClass.FilePathList.FirstOrDefault(i=>i != returnValue.DesignerFilePath); // } // } // foreach(var csProperty in csClass.PropertyList) // { // var targetField = TargetField.TryLoad(csProperty); // if(targetField != null) // { // returnValue.TargetFieldList.Add(targetField); // } // } // } // return returnValue; //} public static TargetClass Create(TargetProject targetProject, SourceWebProject sourceProject, SourceWebPage sourcePage) { string sourceTypeName; string sourceTypeNamespace; DotNetParserHelper.SplitType(sourcePage.ClassFullName, out sourceTypeName, out sourceTypeNamespace); string relativeSourceNamespace; if(sourceTypeNamespace == sourceProject.RootNamespace) { relativeSourceNamespace = string.Empty; } else if(sourceTypeNamespace.StartsWith(sourceProject.RootNamespace)) { relativeSourceNamespace = sourceTypeNamespace.Substring(sourceProject.RootNamespace.Length + 1); } else { relativeSourceNamespace = sourceTypeNamespace; } string targetClassName = sourceTypeName + "PageClient"; string targetNamespace = targetProject.RootNamespace + ".Client.Pages." + relativeSourceNamespace; TargetClass returnValue = new TargetClass() { SourceClassFullName = sourcePage.ClassFullName, TargetClassFullName = targetNamespace + "." + targetClassName, DesignerFileRelativePath = Path.Combine(targetNamespace.Replace('.', '\\'), targetClassName + ".designer.cs"), UserFileRelativePath = Path.Combine(targetNamespace.Replace('.', '\\'), targetClassName + ".cs"), }; return returnValue; }
//internal static TargetClass TryLoad(CSClass csClass) //{ // TargetClass returnValue = null; // var uiClientPageAttribute = csClass.AttributeList.SingleOrDefault(i => i.TypeName == typeof(UIClientPageAttribute).Name && i.TypeNamespace == typeof(UIClientPageAttribute).Namespace); // if(uiClientPageAttribute != null) // { // returnValue = new TargetClass // { // SourceClassFullName = Convert.ToString(uiClientPageAttribute.GetAttributeParameter(0, "SourceClassFullName", true)), // TargetClassFullName = csClass.ClassFullName // }; // //If there is only one field, that is the user and designer file. // //If there are two or more files and one ends with ".designer.cs", that is the designer file and the the first of the others is the user file // //If there are two or more files and none ends with ".designer.cs", then the first one is the designer and user file // if(csClass.FilePathList.Count == 1) // { // returnValue.DesignerFilePath = csClass.FilePathList[0]; // returnValue.UserFilePath = csClass.FilePathList[0]; // } // else if (csClass.FilePathList.Count > 1) // { // returnValue.DesignerFilePath = csClass.FilePathList.FirstOrDefault(i=>i.EndsWith(".designer.cs", StringComparison.CurrentCultureIgnoreCase)); // if(string.IsNullOrEmpty(returnValue.DesignerFilePath)) // { // returnValue.DesignerFilePath = csClass.FilePathList[0]; // returnValue.UserFilePath = csClass.FilePathList[0]; // } // else // { // returnValue.UserFilePath = csClass.FilePathList.FirstOrDefault(i=>i != returnValue.DesignerFilePath); // } // } // foreach(var csProperty in csClass.PropertyList) // { // var targetField = TargetField.TryLoad(csProperty); // if(targetField != null) // { // returnValue.TargetFieldList.Add(targetField); // } // } // } // return returnValue; //} public static TargetClass Create(TargetProject targetProject, SourceWebProject sourceProject, SourceWebPage sourcePage) { string sourceTypeName; string sourceTypeNamespace; DotNetParserHelper.SplitType(sourcePage.ClassFullName, out sourceTypeName, out sourceTypeNamespace); string relativeSourceNamespace; if (sourceTypeNamespace == sourceProject.RootNamespace) { relativeSourceNamespace = string.Empty; } else if (sourceTypeNamespace.StartsWith(sourceProject.RootNamespace)) { relativeSourceNamespace = sourceTypeNamespace.Substring(sourceProject.RootNamespace.Length + 1); } else { relativeSourceNamespace = sourceTypeNamespace; } string targetClassName = sourceTypeName + "PageClient"; string targetNamespace = targetProject.RootNamespace + ".Client.Pages." + relativeSourceNamespace; TargetClass returnValue = new TargetClass() { SourceClassFullName = sourcePage.ClassFullName, TargetClassFullName = targetNamespace + "." + targetClassName, DesignerFileRelativePath = Path.Combine(targetNamespace.Replace('.', '\\'), targetClassName + ".designer.cs"), UserFileRelativePath = Path.Combine(targetNamespace.Replace('.', '\\'), targetClassName + ".cs"), }; return(returnValue); }
public void MatchingSourceNamespace_CreatesTargetClassWithSameNamespace() { var sourceProject = new SourceWebProject { WebPageList = new List<SourceWebPage>() { new SourceWebPage { ClassFullName = "TestTargetNamespace.Test1.TestItem", PageUrl = "TestWebPage.aspx" } }, RootNamespace = "TestSourceNamespace" }; var targetProject = new TargetProject { RootNamespace = "TestTargetNamespace.Test1" }; var targetModelGenerator = new TargetModelGenerator(); var projectResult = targetModelGenerator.CompareProject(targetProject, sourceProject); Assert.AreEqual(1, projectResult.ClassesToAdd.Count); Assert.AreEqual(0, projectResult.ClassesToUpdate.Count); TestValidators.ValidateTargetClassComparisonResult(classResult:projectResult.ClassesToAdd[0], designerFileRelativePath:@"Client\Pages\TestTargetNamespace\Test1\TestItemPageClient.designer.cs", userFileRelativePath: @"Client\Pages\TestTargetNamespace\Test1\TestItemPageClient.cs", sourceClassFullName: @"TestTargetNamespace.Test1.TestItem", targetClassFullName: @"TestTargetNamespace.Test1.Client.Pages.TestTargetNamespace.Test1.TestItemPageClient", targetObjectType:EnumSourceObjectType.WebPage, expectedUrl:"TestWebPage.aspx"); }
public void OneSourceClass_NewTargetProject_ShouldCreateTargetClass() { var sourceProject = new SourceWebProject { WebPageList = new List<SourceWebPage>() { new SourceWebPage { ClassFullName = "TestSourceNamespace.Test1.TestItem", PageUrl = "TestWebPage.aspx" } }, RootNamespace = "TestSourceNamespace" }; var targetProject = new TargetProject { RootNamespace = "TestTargetNamespace" }; var targetModelGenerator = new TargetModelGenerator(); var projectResult = targetModelGenerator.CompareProject(targetProject, sourceProject); Assert.AreEqual(1, projectResult.ClassesToAdd.Count); Assert.AreEqual(0, projectResult.ClassesToUpdate.Count); TestValidators.ValidateTargetClassComparisonResult(projectResult.ClassesToAdd[0], @"Client\Pages\Test1\TestItemPageClient.designer.cs", @"Client\Pages\Test1\TestItemPageClient.cs", @"TestSourceNamespace.Test1.TestItem", @"TestTargetNamespace.Client.Pages.Test1.TestItemPageClient", EnumSourceObjectType.WebPage, "TestWebPage.aspx"); }
public static void UpdateProxyProject(string targetProjectPath, SourceWebProject sourceProject) { XDocument xdoc = XDocument.Load(targetProjectPath); var targetModelGenerator = new TargetModelGenerator(); TargetProject targetProject = targetModelGenerator.LoadFromProjectFile(targetProjectPath); var projectComparison = targetModelGenerator.CompareProject(targetProject, sourceProject); targetModelGenerator.UpdateProjectFile(targetProject, projectComparison); }
public SourceWebProject LoadFromProjectFile(CSProjectFile csProject, string projectFilePath) { SourceWebProject returnValue = new SourceWebProject() { RootNamespace = csProject.RootNamespace }; var webPageList = csProject.WebFormContainers.Where(i => i.ContainerType == EnumWebFormContainerType.WebPage); foreach (var webPage in webPageList) { var csClass = csProject.ClassList.SingleOrDefault(i => i.ClassFullName == webPage.ClassFullName); if (csClass != null) { SourceWebPage sourceWebPage = new SourceWebPage() { ClassFullName = webPage.ClassFullName, PageUrl = ConvertToUrl(webPage.FilePath, projectFilePath), Controls = LoadControls(webPage, csClass) }; returnValue.WebPageList.Add(sourceWebPage); } } var masterPageList = csProject.WebFormContainers.Where(i => i.ContainerType == EnumWebFormContainerType.MasterPage); foreach (var masterPage in masterPageList) { SourceMasterPage sourceMasterPage = new SourceMasterPage() { ClassFullName = masterPage.ClassFullName, PageUrl = ConvertToUrl(masterPage.FilePath, projectFilePath) }; returnValue.MasterPageList.Add(sourceMasterPage); } var userControlList = csProject.WebFormContainers.Where(i => i.ContainerType == EnumWebFormContainerType.UserControl); foreach (var userControl in userControlList) { var csClass = csProject.ClassList.SingleOrDefault(i => i.ClassFullName == userControl.ClassFullName); SourceUserControl sourceUserControl = new SourceUserControl() { ClassFullName = userControl.ClassFullName, Controls = LoadControls(userControl, csClass) }; returnValue.UserControlList.Add(sourceUserControl); } return(returnValue); }
public SourceWebProject LoadFromProjectFile(CSProjectFile csProject, string projectFilePath) { SourceWebProject returnValue = new SourceWebProject() { RootNamespace = csProject.RootNamespace }; var webPageList = csProject.WebFormContainers.Where(i => i.ContainerType == EnumWebFormContainerType.WebPage); foreach (var webPage in webPageList) { var csClass = csProject.ClassList.SingleOrDefault(i => i.ClassFullName == webPage.ClassFullName); if (csClass != null) { SourceWebPage sourceWebPage = new SourceWebPage() { ClassFullName = webPage.ClassFullName, PageUrl = ConvertToUrl(webPage.FilePath, projectFilePath), Controls = LoadControls(webPage, csClass) }; returnValue.WebPageList.Add(sourceWebPage); } } var masterPageList = csProject.WebFormContainers.Where(i => i.ContainerType == EnumWebFormContainerType.MasterPage); foreach (var masterPage in masterPageList) { SourceMasterPage sourceMasterPage = new SourceMasterPage() { ClassFullName = masterPage.ClassFullName, PageUrl = ConvertToUrl(masterPage.FilePath, projectFilePath) }; returnValue.MasterPageList.Add(sourceMasterPage); } var userControlList = csProject.WebFormContainers.Where(i => i.ContainerType == EnumWebFormContainerType.UserControl); foreach (var userControl in userControlList) { var csClass = csProject.ClassList.SingleOrDefault(i => i.ClassFullName == userControl.ClassFullName); SourceUserControl sourceUserControl = new SourceUserControl() { ClassFullName = userControl.ClassFullName, Controls = LoadControls(userControl, csClass) }; returnValue.UserControlList.Add(sourceUserControl); } return returnValue; }
public TargetProjectComparisonResult CompareProject(TargetProject targetProject, SourceWebProject sourceProject) { TargetProjectComparisonResult result = new TargetProjectComparisonResult(); //foreach (var masterPage in sourceProject.MasterPageList) //{ // //Find existing object // var targetClass = targetProject.TargetClassList.SingleOrDefault(i => i.SourceClassFullName == masterPage.ClassFullName); // if (targetClass == null) // { // TargetClassComparisonResult classResult = new TargetClassComparisonResult() // { // a // } // //If does not exist, create it // targetClass = TargetClass.Create(targetProject, sourceProject, masterPage); // result.ClassesToAdd.Add(targetClass); // } // targetClass.PageUrl = masterPage.PageUrl; // targetClass.TargetObjectType = EnumTargetObjectType.MasterPage; // this.TargetClassManager.UpdateTargetClass(masterPage, targetClass); //} foreach (var sourcePage in sourceProject.WebPageList) { var targetClass = targetProject.TargetClassList.SingleOrDefault(i => i.SourceClassFullName == sourcePage.ClassFullName); if (targetClass == null) { TargetClassComparisonResult classResult = this.CompareClass(sourceProject, sourcePage, targetProject, null); result.ClassesToAdd.Add(classResult); } else { TargetClassComparisonResult classResult = this.CompareClass(sourceProject, sourcePage, targetProject, targetClass); result.ClassesToUpdate.Add(classResult); } } return result; }
public void ExistingTargetClassWithDifferentName_ShouldUpdateExistingTargetClass() { var sourceProject = new SourceWebProject { WebPageList = new List<SourceWebPage>() { new SourceWebPage { ClassFullName = "TestSourceNamespace.Test1.TestItem", PageUrl = "TestWebPage.aspx" } }, RootNamespace = "TestSourceNamespace" }; var targetProject = new TargetProject { RootNamespace = "TestTargetNamespace", TargetClassList = new List<TargetClass>() { new TargetClass { SourceClassFullName = "TestSourceNamespace.Test1.TestItem", DesignerFileRelativePath = @"SomeOtherLocation\SomeOtherClassName.designer.cs", UserFileRelativePath = @"SomeOtherLocation\SomeOtherClassName.cs", TargetClassFullName = "SomeOtherLocation.SomeOtherClassName", SourceObjectType = EnumSourceObjectType.WebPage, ExpectedUrl = "TestWebPage.aspx" } } }; var targetModelGenerator = new TargetModelGenerator(); var projectResult = targetModelGenerator.CompareProject(targetProject, sourceProject); Assert.AreEqual(0, projectResult.ClassesToAdd.Count); Assert.AreEqual(1, projectResult.ClassesToUpdate.Count); TestValidators.ValidateTargetClassComparisonResult(projectResult.ClassesToUpdate[0], @"SomeOtherLocation\SomeOtherClassName.designer.cs", @"SomeOtherLocation\SomeOtherClassName.cs", "TestSourceNamespace.Test1.TestItem", "SomeOtherLocation.SomeOtherClassName", EnumSourceObjectType.WebPage, "TestWebPage.aspx"); }
public void ExistingTargetClassWithExpectedNameAndLocation_ShouldUpdateExistingClass() { var sourceProject = new SourceWebProject { WebPageList = new List<SourceWebPage>() { new SourceWebPage { ClassFullName = "TestSourceNamespace.Test1.TestItem", PageUrl = "TestWebPage.aspx" } }, RootNamespace = "TestSourceNamespace" }; var targetProject = new TargetProject { RootNamespace = "TestTargetNamespace", TargetClassList = new List<TargetClass>() { new TargetClass { SourceClassFullName = "TestSourceNamespace.Test1.TestItem", DesignerFileRelativePath = @"Client\Pages\Test1\TestItemPageClient.designer.cs", UserFileRelativePath = @"Client\Pages\Test1\TestItemPageClient.cs", TargetClassFullName = "TestTargetNamespace.Client.Pages.Test1.TestItemPageClient", SourceObjectType = EnumSourceObjectType.WebPage, ExpectedUrl = "TestWebPage.aspx" } } }; var targetModelGenerator = new TargetModelGenerator(); var projectResult = targetModelGenerator.CompareProject(targetProject, sourceProject); Assert.AreEqual(0, projectResult.ClassesToAdd.Count); Assert.AreEqual(1, projectResult.ClassesToUpdate.Count); }
//public TargetProject UpdateProject(TargetProject targetProject, SourceWebProject sourceProject) //{ // //List<TargetClass> classesToAddToProject = new List<TargetClass>(); // //foreach (var masterPage in sourceProject.MasterPageList) // //{ // // //Find existing object // // var targetClass = targetProject.TargetClassList.SingleOrDefault(i => i.SourceClassFullName == masterPage.ClassFullName); // // if (targetClass == null) // // { // // //If does not exist, create it // // targetClass = TargetClass.Create(targetProject, sourceProject, masterPage); // // classesToAddToProject.Add(targetClass); // // } // // targetClass.ExpectedUrl = masterPage.PageUrl; // // targetClass.TargetObjectType = EnumTargetObjectType.MasterPage; // // //For each missing field, add it // // var comparison = TargetClassComparisonResult.Compare(masterPage, targetClass); // // targetClass.EnsureFiles(targetProjectPath); // // targetClass.AddFieldsToFile(targetProjectPath, targetClass.DesignerFilePath, comparison.FieldsToAdd); // //} // foreach (var sourcePage in sourceProject.WebPageList) // { // var targetClass = targetProject.TargetClassList.FirstOrDefault(i=>i.SourceClassFullName == sourcePage.ClassFullName); // if(targetClass == null) // { // string relativeSourceNamespace; // if(sourcePage.NamespaceName == sourceProject.RootNamespace) // { // relativeSourceNamespace = string.Empty; // } // else if(sourcePage.NamespaceName.StartsWith(sourceProject.RootNamespace)) // { // relativeSourceNamespace = sourcePage.NamespaceName.Substring(sourceProject.RootNamespace.Length + 1); // } // else // { // relativeSourceNamespace = sourcePage.NamespaceName; // } // string targetClassName = sourcePage.ClassName + "PageClient"; // string targetDirectory = @"Client\Pages\" + relativeSourceNamespace.Replace(".","\\");; // string targetNamespace = targetProject.RootNamespace + ".Client.Pages." + relativeSourceNamespace; // targetClass = new TargetClass // { // SourceClassFullName = sourcePage.ClassFullName, // TargetClassFullName = targetNamespace + "." + targetClassName, // DesignerFilePath = Path.Combine(targetDirectory, targetClassName + ".designer.cs"), // UserFilePath = Path.Combine(targetDirectory, targetClassName + ".cs"), // TargetObjectType = EnumTargetObjectType.WebPage, // ExpectedUrl = sourcePage.PageUrl // }; // targetProject.TargetClassList.Add(targetClass); // } // } // return targetProject; //} public TargetClassComparisonResult CompareClass(SourceWebProject sourceProject, SourceWebPage sourceClass, TargetProject targetProject, TargetClass targetClass) { TargetClassComparisonResult result; if(targetClass == null) { string relativeSourceNamespace; if (sourceClass.NamespaceName == sourceProject.RootNamespace) { relativeSourceNamespace = string.Empty; } else if (sourceClass.NamespaceName.StartsWith(sourceProject.RootNamespace)) { relativeSourceNamespace = sourceClass.NamespaceName.Substring(sourceProject.RootNamespace.Length + 1); } else { relativeSourceNamespace = sourceClass.NamespaceName; } string targetClassName = sourceClass.ClassName + "PageClient"; string targetDirectory = @"Client\Pages"; string targetNamespace = targetProject.RootNamespace + ".Client.Pages"; if(!string.IsNullOrEmpty(relativeSourceNamespace)) { targetDirectory += "\\" + relativeSourceNamespace.Replace(".", "\\"); targetNamespace += "." + relativeSourceNamespace; } result = new TargetClassComparisonResult { SourceClassFullName = sourceClass.ClassFullName, TargetClassName = targetClassName, TargetNamespaceName = targetNamespace, DesignerFileRelativePath = Path.Combine(targetDirectory, targetClassName + ".designer.cs"), UserFileRelativePath = Path.Combine(targetDirectory, targetClassName + ".cs"), SourceObjectType = EnumSourceObjectType.WebPage, ExpectedUrl = sourceClass.PageUrl, IsDirty = true }; } else { result = new TargetClassComparisonResult { SourceClassFullName = targetClass.SourceClassFullName, TargetClassFullName = targetClass.TargetClassFullName, DesignerFileRelativePath = targetClass.DesignerFileRelativePath, UserFileRelativePath = targetClass.UserFileRelativePath, SourceObjectType = targetClass.SourceObjectType, ExpectedUrl = targetClass.ExpectedUrl }; if(targetClass.ExpectedUrl != sourceClass.PageUrl) { result.ExpectedUrl = sourceClass.PageUrl; result.IsDirty = true; } if(targetClass.SourceObjectType != sourceClass.SourceObjectType) { result.SourceObjectType = sourceClass.SourceObjectType; result.IsDirty = true; } } foreach(var sourceControl in sourceClass.Controls) { TargetField targetControl = null; if(targetClass != null) { targetControl = targetClass.TargetFieldList.SingleOrDefault(i => i.SourceFieldName == sourceControl.FieldName); } if(targetControl == null) { targetControl = new TargetField { SourceClassFullName = sourceControl.ClassFullName, SourceFieldName = sourceControl.FieldName, TargetControlType = this.TargetClassManager.GetTargetControlType(sourceControl.ClassFullName), IsDirty = true, TargetFieldName = sourceControl.FieldName }; result.FieldsToAdd.Add(targetControl); result.IsDirty = true; } else if(targetControl.SourceClassFullName != sourceControl.ClassFullName) { targetControl.SourceClassFullName = sourceControl.ClassFullName; result.FieldsToUpdate.Add(targetControl); targetControl.IsDirty = true; result.IsDirty = true; } } return result; }
public TargetProjectComparisonResult CompareProject(TargetProject targetProject, SourceWebProject sourceProject) { TargetProjectComparisonResult result = new TargetProjectComparisonResult(); //foreach (var masterPage in sourceProject.MasterPageList) //{ // //Find existing object // var targetClass = targetProject.TargetClassList.SingleOrDefault(i => i.SourceClassFullName == masterPage.ClassFullName); // if (targetClass == null) // { // TargetClassComparisonResult classResult = new TargetClassComparisonResult() // { // a // } // //If does not exist, create it // targetClass = TargetClass.Create(targetProject, sourceProject, masterPage); // result.ClassesToAdd.Add(targetClass); // } // targetClass.PageUrl = masterPage.PageUrl; // targetClass.TargetObjectType = EnumTargetObjectType.MasterPage; // this.TargetClassManager.UpdateTargetClass(masterPage, targetClass); //} foreach (var sourcePage in sourceProject.WebPageList) { var targetClass = targetProject.TargetClassList.SingleOrDefault(i => i.SourceClassFullName == sourcePage.ClassFullName); if (targetClass == null) { TargetClassComparisonResult classResult = this.CompareClass(sourceProject, sourcePage, targetProject, null); result.ClassesToAdd.Add(classResult); } else { TargetClassComparisonResult classResult = this.CompareClass(sourceProject, sourcePage, targetProject, targetClass); result.ClassesToUpdate.Add(classResult); } } return(result); }
//public TargetProject UpdateProject(TargetProject targetProject, SourceWebProject sourceProject) //{ // //List<TargetClass> classesToAddToProject = new List<TargetClass>(); // //foreach (var masterPage in sourceProject.MasterPageList) // //{ // // //Find existing object // // var targetClass = targetProject.TargetClassList.SingleOrDefault(i => i.SourceClassFullName == masterPage.ClassFullName); // // if (targetClass == null) // // { // // //If does not exist, create it // // targetClass = TargetClass.Create(targetProject, sourceProject, masterPage); // // classesToAddToProject.Add(targetClass); // // } // // targetClass.ExpectedUrl = masterPage.PageUrl; // // targetClass.TargetObjectType = EnumTargetObjectType.MasterPage; // // //For each missing field, add it // // var comparison = TargetClassComparisonResult.Compare(masterPage, targetClass); // // targetClass.EnsureFiles(targetProjectPath); // // targetClass.AddFieldsToFile(targetProjectPath, targetClass.DesignerFilePath, comparison.FieldsToAdd); // //} // foreach (var sourcePage in sourceProject.WebPageList) // { // var targetClass = targetProject.TargetClassList.FirstOrDefault(i=>i.SourceClassFullName == sourcePage.ClassFullName); // if(targetClass == null) // { // string relativeSourceNamespace; // if(sourcePage.NamespaceName == sourceProject.RootNamespace) // { // relativeSourceNamespace = string.Empty; // } // else if(sourcePage.NamespaceName.StartsWith(sourceProject.RootNamespace)) // { // relativeSourceNamespace = sourcePage.NamespaceName.Substring(sourceProject.RootNamespace.Length + 1); // } // else // { // relativeSourceNamespace = sourcePage.NamespaceName; // } // string targetClassName = sourcePage.ClassName + "PageClient"; // string targetDirectory = @"Client\Pages\" + relativeSourceNamespace.Replace(".","\\");; // string targetNamespace = targetProject.RootNamespace + ".Client.Pages." + relativeSourceNamespace; // targetClass = new TargetClass // { // SourceClassFullName = sourcePage.ClassFullName, // TargetClassFullName = targetNamespace + "." + targetClassName, // DesignerFilePath = Path.Combine(targetDirectory, targetClassName + ".designer.cs"), // UserFilePath = Path.Combine(targetDirectory, targetClassName + ".cs"), // TargetObjectType = EnumTargetObjectType.WebPage, // ExpectedUrl = sourcePage.PageUrl // }; // targetProject.TargetClassList.Add(targetClass); // } // } // return targetProject; //} public TargetClassComparisonResult CompareClass(SourceWebProject sourceProject, SourceWebPage sourceClass, TargetProject targetProject, TargetClass targetClass) { TargetClassComparisonResult result; if (targetClass == null) { string relativeSourceNamespace; if (sourceClass.NamespaceName == sourceProject.RootNamespace) { relativeSourceNamespace = string.Empty; } else if (sourceClass.NamespaceName.StartsWith(sourceProject.RootNamespace)) { relativeSourceNamespace = sourceClass.NamespaceName.Substring(sourceProject.RootNamespace.Length + 1); } else { relativeSourceNamespace = sourceClass.NamespaceName; } string targetClassName = sourceClass.ClassName + "PageClient"; string targetDirectory = @"Client\Pages"; string targetNamespace = targetProject.RootNamespace + ".Client.Pages"; if (!string.IsNullOrEmpty(relativeSourceNamespace)) { targetDirectory += "\\" + relativeSourceNamespace.Replace(".", "\\"); targetNamespace += "." + relativeSourceNamespace; } result = new TargetClassComparisonResult { SourceClassFullName = sourceClass.ClassFullName, TargetClassName = targetClassName, TargetNamespaceName = targetNamespace, DesignerFileRelativePath = Path.Combine(targetDirectory, targetClassName + ".designer.cs"), UserFileRelativePath = Path.Combine(targetDirectory, targetClassName + ".cs"), SourceObjectType = EnumSourceObjectType.WebPage, ExpectedUrl = sourceClass.PageUrl, IsDirty = true }; } else { result = new TargetClassComparisonResult { SourceClassFullName = targetClass.SourceClassFullName, TargetClassFullName = targetClass.TargetClassFullName, DesignerFileRelativePath = targetClass.DesignerFileRelativePath, UserFileRelativePath = targetClass.UserFileRelativePath, SourceObjectType = targetClass.SourceObjectType, ExpectedUrl = targetClass.ExpectedUrl }; if (targetClass.ExpectedUrl != sourceClass.PageUrl) { result.ExpectedUrl = sourceClass.PageUrl; result.IsDirty = true; } if (targetClass.SourceObjectType != sourceClass.SourceObjectType) { result.SourceObjectType = sourceClass.SourceObjectType; result.IsDirty = true; } } foreach (var sourceControl in sourceClass.Controls) { TargetField targetControl = null; if (targetClass != null) { targetControl = targetClass.TargetFieldList.SingleOrDefault(i => i.SourceFieldName == sourceControl.FieldName); } if (targetControl == null) { targetControl = new TargetField { SourceClassFullName = sourceControl.ClassFullName, SourceFieldName = sourceControl.FieldName, TargetControlType = this.TargetClassManager.GetTargetControlType(sourceControl.ClassFullName), IsDirty = true, TargetFieldName = sourceControl.FieldName }; result.FieldsToAdd.Add(targetControl); result.IsDirty = true; } else if (targetControl.SourceClassFullName != sourceControl.ClassFullName) { targetControl.SourceClassFullName = sourceControl.ClassFullName; result.FieldsToUpdate.Add(targetControl); targetControl.IsDirty = true; result.IsDirty = true; } } return(result); }