コード例 #1
0
		public void Initialize(
			Project project,
			ProjectFolder projectFolder)
		{
			_project = project;
			_projectFolder = projectFolder;
		}
コード例 #2
0
        private void FilterViews(ProjectFolder folder, Dictionary<string, ProjectFile> views)
        {
            // Collect
            Traverse(folder, file => views.Add(file.RelativePath, file));

            // Filter
            Traverse(folder, file => RemoveDeviceSpecificWithCorrespondingDesktop(file, views));
        }
コード例 #3
0
 private void Traverse(ProjectFolder folder, Action<ProjectFile> action) {
     foreach (var file in folder.Files) {
         if (file.RelativePath.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase)) {
             action(file);
         }
     }
     foreach (var subfolder in folder.Folders) {
         Traverse(subfolder, action);
     }
 }
コード例 #4
0
        private void BrowserProductFolder(TreeNode treeNode, ProjectFolder projectFolder)
        {
            TreeNode node;

            foreach (ProjectFolder pf in (IEnumerable<ProjectFolder>)projectFolder)
            {
                node = new TreeNode(pf.Name);
                pf.LinkReference = node;
                treeNode.Nodes.Add(node);
                BrowserProductFolder(node, pf);
            }
        }
コード例 #5
0
 private void CollectViews(ProjectFolder folder, Dictionary<string, ProjectFile> views) {
     foreach (var file in folder.Files) {
         if (file.Name.EndsWith(".cshtml", StringComparison.OrdinalIgnoreCase)) {
             if (!IsMobileWithCorrespondingDesktop(file, views)) {
                 views.Add(file.RelativePath, file);
             }
         }
     }
     foreach (var subfolder in folder.Folders) {
         CollectViews(subfolder, views);
     }
 }
コード例 #6
0
        public bool Execute(ProjectFolder folder) {
            var model = new ViewMobilizerModel(folder);
            var form = new ViewMobilizerForm(model);

            var result = form.ShowDialog();
            if (result == DialogResult.OK) {
                foreach (var view in model.SelectedViews) {
                    var file = view.Item1;
                    string mobileFileName = view.Item2;

                    File.Copy(file.FullName, mobileFileName);
                    folder.DteProjectItems.AddFromFile(mobileFileName);
                }
            }
            return true;
        }
コード例 #7
0
 private static List<string> GetCandidateFilesToConvert(ProjectFolder folder)
 {
     var folderLoweredName = folder.FullName.ToLower();
     var razorFiles = (from f in folder.Files.Select(y => y.Name.ToLower())
                       where f.EndsWith("cshtml")
                       select Path.Combine(folderLoweredName, f)).ToList();
     var candidateFilesToConvert = (from f in folder.Files
                                    where f.Name.ToLower().EndsWith("aspx")
                                    select Path.Combine(folder.FullName, f.Name)).ToList();
     //var razorFiles = Directory.EnumerateFiles(@"c:\temp\").Where(f => f.ToLower().EndsWith("cshtml")).Select(f => f.ToLower());
     //var candidateFilesToConvert = Directory.EnumerateFiles(@"c:\temp\").Where(f => f.ToLower().EndsWith("aspx"));
     candidateFilesToConvert = (from f in candidateFilesToConvert
                                where !razorFiles.Contains(f.ToLower().Substring(0, f.Length - 4) + "cshtml")
                                select f).ToList();
     return candidateFilesToConvert;
 }
コード例 #8
0
        public bool Execute(ProjectFolder folder)
        {
            var candidateFilesToConvert = GetCandidateFilesToConvert(folder);
            if (candidateFilesToConvert.Count == 0)
            {
                MessageBox.Show(
                    "No files to convert. Check if you have already converted files and remove the existing cshtml files for the aspx's you want to convert.",
                    "No files found", MessageBoxButton.OK, MessageBoxImage.Warning);
                return true;
            }

            var filesToConvert = AskUserToSelectFiles(candidateFilesToConvert);
            var convertedFiles = AspxToRazor.ConvertFiles(filesToConvert);
            foreach (var convertedFile in convertedFiles)
                folder.DteProjectItems.AddFromFile(convertedFile);
            return true;
        }
コード例 #9
0
ファイル: Project.cs プロジェクト: dmarijanovic/uber-tools
        private void BrowserFolder(ProjectFolder projectFolder)
        {
            ProjectFolder subFolder;
            ProjectFile projectFile;
            DirectoryInfo dir = new DirectoryInfo(projectFolder.Path);

            /// Add all files to curent folder
            foreach (FileInfo fileInfo in dir.GetFiles())
            {
                projectFile = new ProjectFile(fileInfo.Name,fileInfo.FullName);
                projectFolder.AddFile(projectFile);
                //Log.Write(fileInfo.FullName, this, "BrowserFolder", Log.LogType.DEBUG);
            }

            /// Add all subfolders to curent folder and ...
            foreach (DirectoryInfo di in dir.GetDirectories())
            {
                subFolder = new ProjectFolder(di.Name, di.FullName);
                projectFolder.AddFolder(subFolder);
                BrowserFolder(subFolder);
            }
        }
コード例 #10
0
		private void buttonAddProjectFolder_ItemClick(object sender, ItemClickEventArgs e)
		{
			using (var form = new ProjectFolderEditForm())
			{
				var pf =
					new ProjectFolder(Project)
						{
							Name = Resources.SR_ProjectFilesUserControl_buttonAddProjectFolderItemClick_NewProjectFolder
						};

				form.Initialize(pf);

				if (form.ShowDialog(this) == DialogResult.OK)
				{
					var parentProjectFolder =
						treeView.SelectedNode.Tag as ProjectFolder;

					if (parentProjectFolder != null)
					{
						pf.Parent = parentProjectFolder;
					}

					Project.ProjectFolders.Add(pf);
					Project.MarkAsModified();

					var node = addProjectFolderToTree(treeView.SelectedNode, pf);

					// --

					sortTree();

					treeView.SelectedNode = node;

					UpdateUI();
				}
			}
		}
コード例 #11
0
 public static bool IsFigmaDirectory(this ProjectFolder pr)
 {
     return(pr.Path.Extension == FigmaBundle.FigmaDirectoryName &&
            pr.Parent is Project);
 }
コード例 #12
0
		/*
		/// <summary>
		/// Does the automatically add resource files.
		/// </summary>
		/// <param name="backgroundWorker">The background worker.</param>
		/// <param name="parentProjectFolder">The parent project folder.</param>
		/// <param name="fileGroupCount">The file group count.</param>
		/// <param name="fileCount">The file count.</param>
		/// <param name="folderPath">The folder path.</param>
		private void doAutomaticallyAddResourceFiles(
			BackgroundWorker backgroundWorker,
			ProjectFolder parentProjectFolder,
			ref int fileGroupCount,
			ref int fileCount,
			ZlpDirectoryInfo folderPath)
		{
			if (backgroundWorker.CancellationPending)
			{
				throw new OperationCanceledException();
			}

			// Omit hidden or system folders.
			if ((folderPath.Attributes & FileAttributes.Hidden) == 0 &&
				(folderPath.Attributes & FileAttributes.System) == 0)
			{
				var filePaths = folderPath.GetFiles(@"*.resx");

				if (filePaths.Length > 0)
				{
					FileGroup fileGroup = null;
					string previousBaseFileName = null;

					foreach (var filePath in filePaths)
					{
						if (backgroundWorker.CancellationPending)
						{
							throw new OperationCanceledException();
						}

						var baseFileName =
							filePath.Name.Substring(0, filePath.Name.IndexOf('.'));

						var wantAddResourceFile =
							checkWantAddResourceFile(filePath);

						if (wantAddResourceFile)
						{
							if (fileGroup == null ||
								previousBaseFileName == null ||
								string.Compare(baseFileName, previousBaseFileName, true) != 0)
							{
								if (fileGroup != null && fileGroup.Count > 0)
								{
									// Look for same entries.
									if (!_project.FileGroups.HasFileGroupWithChecksum(
											fileGroup.GetChecksum(_project)))
									{
										_project.FileGroups.Add(fileGroup);

										fileGroupCount++;
										fileCount += fileGroup.Count;
									}
								}

								fileGroup =
									new FileGroup(_project)
									{
										ProjectFolder = parentProjectFolder
									};
							}

							fileGroup.Add(
								new FileInformation(fileGroup)
									{
										File = filePath
									});

							previousBaseFileName = baseFileName;
						}
					}

					// Add remaining.
					if (fileGroup != null && fileGroup.Count > 0)
					{
						// Look for same entries.
						if (!_project.FileGroups.HasFileGroupWithChecksum(
								fileGroup.GetChecksum(_project)))
						{
							_project.FileGroups.Add(fileGroup);

							fileGroupCount++;
							fileCount += fileGroup.Count;
						}
					}
				}
			}

			// Recurse childs.
			foreach (var childFolderPath in folderPath.GetDirectories())
			{
				doAutomaticallyAddResourceFiles(
					backgroundWorker,
					parentProjectFolder,
					ref fileGroupCount,
					ref fileCount,
					childFolderPath);
			}
		}
		*/

		private void doAutomaticallyAddResourceFiles(
			BackgroundWorker backgroundWorker,
			ProjectFolder parentProjectFolder,
			ref int fileGroupCount,
			ref int fileCount,
			ZlpDirectoryInfo folderPath)
		{
			if (backgroundWorker.CancellationPending)
			{
				throw new OperationCanceledException();
			}

			// Omit hidden or system folders.
			if ((folderPath.Attributes & ZetaLongPaths.Native.FileAttributes.Hidden) == 0 &&
				(folderPath.Attributes & ZetaLongPaths.Native.FileAttributes.System) == 0)
			{
				//CHANGED use comon method to look load new files:

				var filePaths = new List<ZlpFileInfo>(folderPath.GetFiles(@"*.resx"));
				filePaths.AddRange(new List<ZlpFileInfo>(folderPath.GetFiles(@"*.resw")));

				new VisualStudioImporter(Project).
					DoAutomaticallyAddResourceFilesFromList(
						backgroundWorker,
						parentProjectFolder,
						ref fileGroupCount,
						ref fileCount,
						filePaths);
			}

			// Recurse childs.
			foreach (var childFolderPath in folderPath.GetDirectories())
			{
				doAutomaticallyAddResourceFiles(
					backgroundWorker,
					parentProjectFolder,
					ref fileGroupCount,
					ref fileCount,
					childFolderPath);
			}
		}
コード例 #13
0
 public bool IsValidTarget(ProjectFolder folder)
 {
     throw new System.NotImplementedException();
 }
コード例 #14
0
 public AddNewFile(ProjectFolder projectFolder, bool OpenFileAfterCreation = true)
     : this(Schematix.SchematixCore.Core, projectFolder, OpenFileAfterCreation)
 {
     this.openFileAfterCreation = OpenFileAfterCreation;
 }
コード例 #15
0
        private static void ParseFolder(ProjectFolder folder, string dir)
        {
            //Directory.CreateDirectory(dir);
            var path = Path.Combine(dir, NormalizeFolderName(folder.Name));

            foreach (var projectFolder in folder.SubItems)
            {
                ParseFolder(projectFolder, path);
            }

            if (folder is IBlocksFolder)
            {
                var blkFld = folder as IBlocksFolder;

                foreach (var projectBlockInfo in blkFld.BlockInfos)
                {
                    try
                    {
                        var src = projectBlockInfo.Export(ExportFormat.Default);
                        if (src != null)
                        {
                            var ext = "xml";
                            if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB)
                            {
                                ext = "db";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.SCL)
                            {
                                ext = "scl";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.KOP)
                            {
                                ext = "lad";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.FUP)
                            {
                                ext = "fbd";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.AWL)
                            {
                                ext = "stl";
                            }
                            var file = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + "." + ext);

                            var         xmlValid = false;
                            XmlDocument xmlDoc   = new XmlDocument();
                            try
                            {
                                xmlDoc.LoadXml(src);
                                xmlValid = true;
                            }
                            catch
                            {
                                xmlValid = false;
                            }

                            if (xmlValid)
                            {
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//Created");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                StringBuilder     sb       = new StringBuilder();
                                XmlWriterSettings settings = new XmlWriterSettings
                                {
                                    Indent          = true,
                                    IndentChars     = "  ",
                                    NewLineChars    = "\r\n",
                                    NewLineHandling = NewLineHandling.Replace
                                };
                                using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                {
                                    xmlDoc.Save(writer);
                                }
                                src = sb.ToString();
                            }

                            if (src != null)
                            {
                                Directory.CreateDirectory(path);
                                File.WriteAllText(file, src /*, Encoding.UTF8*/);
                            }
                            else
                            {
                                Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Skipping Block: \"" + projectBlockInfo.Name + "\" Exception: " + ex.Message);
                    }
                }
            }
        }
コード例 #16
0
		// ADDED: adds resources from file Info lists.
		// I have changed a method doAutomaticallyAddResourceFiles to fill file groups. 
		// You can use same method if you call this method from there. 
		// ATTENTION: LanguageCodeDetection was modified a bit to support variable amount 
		// of point in base name. New method GetBaseName(IInheritedSettings settings, string fileName) 
		// was added to get same base name FileGroup gets.
		public void DoAutomaticallyAddResourceFilesFromList(
			BackgroundWorker backgroundWorker,
			ProjectFolder parentProjectFolder,
			ref int fileGroupCount,
			ref int fileCount,
			ICollection<ZlpFileInfo> fileList)
		{
			if (backgroundWorker.CancellationPending)
			{
				throw new OperationCanceledException();
			}
			else if (fileList != null && fileList.Count > 0)
			{
				var fileGroups = Project.FileGroups;
				//if (parentProjectFolder != null)
				//{
				//    fileGroups = parentProjectFolder.ChildFileGroups;
				//}
				foreach (var filePath in fileList)
				{
					if (backgroundWorker.CancellationPending)
					{
						throw new OperationCanceledException();
					}
					//other algorithm to determine base name to allow multiple points inside name
					var baseFileName = LanguageCodeDetection.GetBaseName(Project, filePath.Name);

					var wantAddResourceFile =
						checkWantAddResourceFile(filePath);

					if (wantAddResourceFile)
					{
						//find right file group

						var path = filePath;
						var fileGroup = fileGroups.Find(
							g =>
							string.Compare(g.BaseName, baseFileName, true) == 0 &&
							string.Compare(g.FolderPath.FullName, path.Directory.FullName, true) == 0);

						if (fileGroup == null)
						{
							fileGroup =
								new FileGroup(Project)
								{
									ProjectFolder = parentProjectFolder
								};

							// Look for same entries.
							if (!Project.FileGroups.HasFileGroupWithChecksum(
								fileGroup.GetChecksum(Project)))
							{
								fileGroups.Add(fileGroup);

								fileGroupCount++;
							}
						}

						fileGroup.Add(
							new FileInformation(fileGroup)
							{
								File = filePath
							});

						fileCount++;
					}
				}
			}
		}
コード例 #17
0
        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (myConn != null)
            {
                myConn.Disconnect();
            }

            viewBlockList.Visible = false;

            dtaSymbolTable.Visible = false;

            hexBox.Visible = false;

            txtTextBox.Visible = false;
            lblToolStripFileSystemFolder.Text = "";

            lblStatus.Text = "";

            tableLayoutPanelVisu.ColumnStyles[1].Width = 0;

            datablockView.Visible = false;

            lblToolStripFileSystemFolder.Text = "";

            blkFld = null;


            if (treeStep7Project.SelectedNode != null)
            {
                ProjectFolder fld = (ProjectFolder)((myTreeNode)treeStep7Project.SelectedNode).myObject;
                lblProjectName.Text = fld.Project.ProjectName;
                lblProjectInfo.Text = fld.Project.ProjectDescription;


                var tmp = (myTreeNode)treeStep7Project.SelectedNode;
                if (tmp.myObject is IBlocksFolder)
                {
                    blkFld = (IBlocksFolder)tmp.myObject;
                }

                if (tmp.myObject.GetType() == typeof(SymbolTable))
                {
                    var tmp2 = (SymbolTable)tmp.myObject;

                    if (oldNode != treeStep7Project.SelectedNode)
                    {
                        dtaSymbolTable.Rows.Clear();
                        foreach (var step7SymbolTableEntry in tmp2.SymbolTableEntrys)
                        {
                            dtaSymbolTable.Rows.Add(new object[]
                            {
                                step7SymbolTableEntry.Symbol, step7SymbolTableEntry.DataType,
                                step7SymbolTableEntry.Operand, step7SymbolTableEntry.Comment
                            });
                        }
                    }
                    dtaSymbolTable.Visible            = true;
                    lblToolStripFileSystemFolder.Text = tmp2.Folder;
                }
                else if (blkFld != null)
                {
                    if (oldNode != treeStep7Project.SelectedNode)
                    {
                        lstListBox.Items.Clear();
                        //ProjectBlockInfo[] arr =
                        //NumericComparer nc = new NumericComparer();
                        //Array.Sort(arr, nc);
                        lstListBox.Items.AddRange(blkFld.readPlcBlocksList().ToArray());
                    }
                    viewBlockList.Visible = true;

                    if (tmp.myObject.GetType() == typeof(BlocksOfflineFolder))
                    {
                        lblToolStripFileSystemFolder.Text = ((BlocksOfflineFolder)blkFld).Folder;
                    }
                }
                else if (tmp.myObject.GetType() == typeof(SourceFolder))
                {
                    src = (SourceFolder)tmp.myObject;
                    if (oldNode != treeStep7Project.SelectedNode)
                    {
                        lstListBox.Items.Clear();
                        lstListBox.Items.AddRange(src.readPlcBlocksList().ToArray());
                    }
                    viewBlockList.Visible = true;

                    lblToolStripFileSystemFolder.Text = src.Folder;
                }
                else if (tmp.myObject is CPUFolder)
                {
                    var cpu = tmp.myObject as CPUFolder;
                    if (oldNode != treeStep7Project.SelectedNode)
                    {
                        lstListBox.Items.Clear();
                        lstListBox.Items.Add("Password: "******"CpuType: " + cpu.CpuType);
                    }
                    viewBlockList.Visible = true;
                }
            }
            oldNode = treeStep7Project.SelectedNode;
        }
コード例 #18
0
ファイル: ProjectLoader.cs プロジェクト: BMeyerKC/WorldSmith
        public static void BuildProjectFromDirectoriesRecursive(string path, ref ProjectFolder project)
        {
            foreach (string directory in Directory.GetDirectories(path))
            {
                ProjectFolder folder = (new DomNode(DotaObjectsSchema.FolderType.Type)).As<ProjectFolder>();
                folder.Path = directory;
                folder.Name = directory.Substring(directory.LastIndexOf(Path.DirectorySeparatorChar) + 1);

                project.Files.Add(folder);
                BuildProjectFromDirectoriesRecursive(directory, ref folder);
            }

            foreach (string File in Directory.GetFiles(path))
            {

                string ext = Path.GetExtension(File);
                ProjectFile f;
                if(FileTypes.ContainsKey(ext))
                {
                    FileTypeResolver resolver = FileTypes[ext];
                    f = (ProjectFile)(new DomNode(resolver.DomNodeType)).As(resolver.WrapperType);
                }
                else
                {
                    f = (new DomNode(DotaObjectsSchema.FileType.Type)).As<ProjectFile>();
                }

                string name = Path.GetFileName(File);

                f.Path = File;
                f.Name = name;

                project.Files.Add(f);

            }
        }
コード例 #19
0
        public void DoAutomaticallyAddResourceFilesFromVsProject(
            BackgroundWorker backgroundWorker,
            ProjectFolder parentProjectFolder,
            ref int fileGroupCount,
            ref int fileCount,
            ZlpFileInfo vsProjectPath)
        {
            if (backgroundWorker.CancellationPending)
            {
                throw new OperationCanceledException();
            }
            else if (vsProjectPath != null && vsProjectPath.Exists)
            {
                if (@".sln" == vsProjectPath.Extension.ToLowerInvariant())
                {
                    //file is solution, so add all projects from solution
                    doAutomaticallyAddResourceFilesFromVSSolution(
                        backgroundWorker,
                        parentProjectFolder,
                        ref fileGroupCount,
                        ref fileCount,
                        vsProjectPath);
                }
                else
                {
                    //load fom solution
                    var pdoc = new XmlDocument();
                    //using (var fs = vsProjectPath.OpenRead())
                    {
                        pdoc.LoadXml(ZlpIOHelper.ReadAllText(vsProjectPath.FullName));
                    }

                    var nameMgr = new XmlNamespaceManager(pdoc.NameTable);
                    nameMgr.AddNamespace(@"mb", @"http://schemas.microsoft.com/developer/msbuild/2003");
                    const string xpath    = @"/mb:Project/mb:ItemGroup/mb:EmbeddedResource/@Include";
                    var          resNodes = pdoc.SelectNodes(xpath, nameMgr);

                    var filePaths = new List <ZlpFileInfo>();                    //get all files
                    if (resNodes != null)
                    {
                        // ReSharper disable LoopCanBeConvertedToQuery
                        foreach (XmlNode node in resNodes)
                        // ReSharper restore LoopCanBeConvertedToQuery
                        {
                            var include = node.Value;

                            if (!string.IsNullOrEmpty(include) &&
                                (include.ToLowerInvariant().EndsWith(@".resx") ||
                                 include.ToLowerInvariant().EndsWith(@".resw")))
                            {
                                var fullPath = ZlpPathHelper.Combine(vsProjectPath.DirectoryName, include);
                                filePaths.Add(new ZlpFileInfo(fullPath));
                            }
                        }
                    }

                    //add all files from list
                    DoAutomaticallyAddResourceFilesFromList(
                        backgroundWorker,
                        parentProjectFolder,
                        ref fileGroupCount,
                        ref fileCount,
                        filePaths);
                }
            }
        }
コード例 #20
0
 public bool IsValidTarget(ProjectFolder folder)
 {
     return(true);
 }
コード例 #21
0
        private void doAutomaticallyAddResourceFilesFromVSSolution(
            BackgroundWorker backgroundWorker,
            ProjectFolder parentProjectFolder,
            ref int fileGroupCount,
            ref int fileCount,
            ZlpFileInfo vsSolutionPath)
        {
            if (vsSolutionPath != null && vsSolutionPath.Exists)
            {
                string solutionText;
                //using (var sr = vsSolutionPath.OpenText())
                {
                    //we can read it line by line to reduce memory usage, but solution files are not very big
                    solutionText = ZlpIOHelper.ReadAllText(vsSolutionPath.FullName);                    // sr.ReadToEnd();
                }
                //solution files looks like:
                //Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZetaResourceEditor", "Main\ZetaResourceEditor.csproj", "{367758E7-0435-440A-AC76-1F30ABBA3ED8}"
                //EndProject
                //known projectTypes:
                //c#: FAE04EC0-301F-11D3-BF4B-00C04F79EFBC, VB: F184B08F-C81C-45F6-A57F-5ABD9991F28F
                //@see http://msdn.microsoft.com/en-us/library/hb23x61k%28VS.80%29.aspx
                //TODO: support virtual folders
                var supportedProjectTypes =
                    new[]
                {
                    @"FAE04EC0-301F-11D3-BF4B-00C04F79EFBC",
                    @"F184B08F-C81C-45F6-A57F-5ABD9991F28F"
                };

                //we need some regular expression to find required info:
                const string pattern =
                    @"Project\(""{(?<projectType>[^}]*)}""\)\s*=\s*""(?<projectName>[^""]*)"",\s*""(?<projectRelPath>[^""]*)"",\s*""{(?<projectID>[^}]*)}""";

                foreach (Match m in Regex.Matches(solutionText, pattern))
                {
                    if (!m.Success)
                    {
                        continue;
                    }

                    var g = m.Groups[@"projectType"];
                    if (g == null || !g.Success)
                    {
                        continue;
                    }
                    var projectType = g.Value;

                    //compare with known project types.
                    // Currently only CS Projects are supported.
                    // But other types like VB can be simply added.
                    if (!Array.Exists(supportedProjectTypes, a => a == projectType))
                    {
                        continue;
                    }

                    var projectRelPath = m.Groups[@"projectRelPath"].Value;
                    var projectFile    = new ZlpFileInfo(ZlpPathHelper.Combine(vsSolutionPath.Directory.FullName, projectRelPath));

                    //add all files from project
                    //we can add each using separate sub folder
                    var projectName = m.Groups[@"projectName"].Value;
                    //look in subfolders only
                    var subFolders = Project.ProjectFolders;
                    if (parentProjectFolder != null)
                    {
                        subFolders = parentProjectFolder.ChildProjectFolders;
                    }
                    var pf = subFolders.Find(f => f.Name == projectName);
                    if (pf == null)
                    {
                        pf =
                            new ProjectFolder(Project)
                        {
                            Name   = projectName,
                            Parent = parentProjectFolder
                        };
                        Project.ProjectFolders.Add(pf);
                    }

                    Project.MarkAsModified();

                    DoAutomaticallyAddResourceFilesFromVsProject(
                        backgroundWorker,
                        pf,
                        ref fileGroupCount,
                        ref fileCount,
                        projectFile);
                }
            }
        }
コード例 #22
0
        // ADDED: adds resources from file Info lists.
        // I have changed a method doAutomaticallyAddResourceFiles to fill file groups.
        // You can use same method if you call this method from there.
        // ATTENTION: LanguageCodeDetection was modified a bit to support variable amount
        // of point in base name. New method GetBaseName(IInheritedSettings settings, string fileName)
        // was added to get same base name FileGroup gets.
        public void DoAutomaticallyAddResourceFilesFromList(
            BackgroundWorker backgroundWorker,
            ProjectFolder parentProjectFolder,
            ref int fileGroupCount,
            ref int fileCount,
            ICollection <ZlpFileInfo> fileList)
        {
            if (backgroundWorker.CancellationPending)
            {
                throw new OperationCanceledException();
            }
            else if (fileList != null && fileList.Count > 0)
            {
                var fileGroups = Project.FileGroups;
                //if (parentProjectFolder != null)
                //{
                //    fileGroups = parentProjectFolder.ChildFileGroups;
                //}
                foreach (var filePath in fileList)
                {
                    if (backgroundWorker.CancellationPending)
                    {
                        throw new OperationCanceledException();
                    }
                    //other algorithm to determine base name to allow multiple points inside name
                    //var baseFileName = LanguageCodeDetection.GetBaseName(Project, filePath.Name);

                    var info                = new FileInfo(filePath.FullName);
                    var baseFileName        = info.Name;
                    var wantAddResourceFile =
                        checkWantAddResourceFile(filePath);

                    if (wantAddResourceFile)
                    {
                        //find right file group

                        var path      = filePath;
                        var fileGroup = fileGroups.Find(
                            g =>
                            string.Compare(g.BaseName, baseFileName, true) == 0 &&
                            string.Compare(g.FolderPath.FullName, path.Directory.FullName, true) == 0);

                        if (fileGroup == null)
                        {
                            fileGroup =
                                new FileGroup(Project)
                            {
                                ProjectFolder = parentProjectFolder
                            };

                            // Look for same entries.
                            if (!Project.FileGroups.HasFileGroupWithChecksum(
                                    fileGroup.GetChecksum(Project)))
                            {
                                fileGroups.Add(fileGroup);

                                fileGroupCount++;
                            }
                        }

                        fileGroup.Add(
                            new FileInformation(fileGroup)
                        {
                            File = filePath
                        });

                        fileCount++;
                    }
                }
            }
        }
コード例 #23
0
 public ViewMobilizerModel(ProjectFolder folder) {
     var views = new Dictionary<string, ProjectFile>(StringComparer.OrdinalIgnoreCase);
     CollectViews(folder, views);
     Views = views;
     SelectedViews = new List<Tuple<ProjectFile, string>>();
 }
コード例 #24
0
 public ViewMobilizerModel(ProjectFolder folder, string suffix)
 {
     Folder = folder;
     Populate(suffix);
 }
コード例 #25
0
 public void Initialize(ProjectFolder projectFolder)
 {
     _projectFolder = projectFolder;
 }
コード例 #26
0
ファイル: Project.cs プロジェクト: dmarijanovic/uber-tools
 //private string path;
 public Project(string path)
 {
     this.RootFolder = new ProjectFolder("Root", path);
 }
コード例 #27
0
        public static VersionControlItem CreateItem(object obj, bool projRecurse = true)
        {
            string          path;
            bool            isDir;
            WorkspaceObject pentry;
            VersionInfo     versionInfo = null;

            if (obj is ProjectFile)
            {
                ProjectFile file = (ProjectFile)obj;
                path   = file.FilePath;
                isDir  = false;
                pentry = file.Project;
            }
            else if (obj is SystemFile)
            {
                SystemFile file = (SystemFile)obj;
                path   = file.Path;
                isDir  = false;
                pentry = file.ParentWorkspaceObject;
            }
            else if (obj is ProjectFolder)
            {
                ProjectFolder f = (ProjectFolder)obj;
                path   = f.Path;
                isDir  = true;
                pentry = f.ParentWorkspaceObject;
            }
            else if (!projRecurse && obj is Solution)
            {
                Solution sol = (Solution)obj;
                path   = sol.FileName;
                isDir  = false;
                pentry = sol;
            }
            else if (!projRecurse && obj is Project)
            {
                Project proj = (Project)obj;
                path   = proj.FileName;
                isDir  = false;
                pentry = proj;
            }
            else if (!projRecurse && obj is UnknownSolutionItem)
            {
                UnknownSolutionItem item = (UnknownSolutionItem)obj;
                path   = item.FileName;
                isDir  = false;
                pentry = item;
            }
            else if (obj is WorkspaceObject)
            {
                pentry = ((WorkspaceObject)obj);
                path   = pentry.BaseDirectory;
                isDir  = true;
            }
            else
            {
                return(null);
            }

            if (pentry == null)
            {
                return(null);
            }

            return(new VersionControlItem(VersionControlService.GetRepository(pentry), pentry, path, isDir, versionInfo));
        }
コード例 #28
0
		public void DoAutomaticallyAddResourceFilesFromVsProject(
			BackgroundWorker backgroundWorker,
			ProjectFolder parentProjectFolder,
			ref int fileGroupCount,
			ref int fileCount,
			ZlpFileInfo vsProjectPath)
		{
			if (backgroundWorker.CancellationPending)
			{
				throw new OperationCanceledException();
			}
			else if (vsProjectPath != null && vsProjectPath.Exists)
			{
				if (@".sln" == vsProjectPath.Extension.ToLowerInvariant())
				{
					//file is solution, so add all projects from solution
					doAutomaticallyAddResourceFilesFromVSSolution(
						backgroundWorker,
						parentProjectFolder,
						ref fileGroupCount,
						ref fileCount,
						vsProjectPath);
				}
				else
				{
					//load fom solution
					var pdoc = new XmlDocument();
					//using (var fs = vsProjectPath.OpenRead())
					{
						pdoc.LoadXml(ZlpIOHelper.ReadAllText(vsProjectPath.FullName));
					}

					var nameMgr = new XmlNamespaceManager(pdoc.NameTable);
					nameMgr.AddNamespace(@"mb", @"http://schemas.microsoft.com/developer/msbuild/2003");
					const string xpath = @"/mb:Project/mb:ItemGroup/mb:EmbeddedResource/@Include";
					var resNodes = pdoc.SelectNodes(xpath, nameMgr);

					var filePaths = new List<ZlpFileInfo>(); //get all files
					if (resNodes != null)
					{
						// ReSharper disable LoopCanBeConvertedToQuery
						foreach (XmlNode node in resNodes)
						// ReSharper restore LoopCanBeConvertedToQuery
						{
							var include = node.Value;

							if (!string.IsNullOrEmpty(include) &&
								(include.ToLowerInvariant().EndsWith(@".resx")||
								include.ToLowerInvariant().EndsWith(@".resw")))
							{
								var fullPath = ZlpPathHelper.Combine(vsProjectPath.DirectoryName, include);
								filePaths.Add(new ZlpFileInfo(fullPath));
							}
						}
					}

					//add all files from list
					DoAutomaticallyAddResourceFilesFromList(
						backgroundWorker,
						parentProjectFolder,
						ref fileGroupCount,
						ref fileCount,
						filePaths);
				}
			}
		}
コード例 #29
0
        /// <summary>
        /// Открыть файл
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="searchItemInSolution"></param>
        /// <param name="projFolder"></param>
        public Schematix.Windows.SchematixBaseWindow OpenNewWindow(string filePath, bool searchItemInSolution = true, ProjectFolder projFolder = null)
        {
            ProjectElementBase elem = null;

            //Ищем в решении файл (если необходимо)
            if (searchItemInSolution == true)
            {
                elem = SearchItemInSolution(filePath);
            }
            //Если файл не нашелся, создаем объект ProjectElementBase вручную
            if (elem == null)
            {
                elem = ProjectElementBase.CreateProjectElementByPath(filePath, projFolder);
            }
            return(OpenNewWindow(elem));
        }
コード例 #30
0
 public bool Execute(ProjectFolder folder)
 {
     throw new System.NotImplementedException();
 }
コード例 #31
0
        /// <summary>
        /// Открыть файл с исходным кодом и поставить курсор в нужную позицию
        /// </summary>
        /// <param name="filePath"></param>
        /// <param name="searchItemInSolution"></param>
        /// <param name="projFolder"></param>
        /// <param name="LineNumber"></param>
        public Schematix.Windows.Code.Code OpenSource(string filePath, bool searchItemInSolution = true, ProjectFolder projFolder = null, int LineNumber = 0, int position = 0)
        {
            ProjectElementBase elem = null;

            //Ищем в решении файл (если необходимо)
            if (searchItemInSolution == true)
            {
                elem = SearchItemInSolution(filePath);
            }
            //Если файл не нашелся, создаем объект ProjectElementBase вручную
            if (elem == null)
            {
                elem = ProjectElementBase.CreateProjectElementByPath(filePath, projFolder);
            }

            Schematix.Windows.SchematixBaseWindow window     = null;
            Schematix.Windows.Code.Code           codeWindow = null;

            mainWindow.Dispatcher.Invoke(
                System.Windows.Threading.DispatcherPriority.Background, new System.Windows.Threading.DispatcherOperationCallback(delegate
            {
                window     = OpenNewWindow(elem);
                codeWindow = window as Schematix.Windows.Code.Code;
                if (LineNumber >= 0)
                {
                    codeWindow.textEditor.Loaded += new System.Windows.RoutedEventHandler(delegate { codeWindow.SetPosition(LineNumber, position); });
                }
                if (codeWindow.ProjectElement.Parent == null)
                {
                    codeWindow.textEditor.IsReadOnly = true;
                }
                return(null);
            }
                                                                                                                                 ), null);



            return(codeWindow);
        }
コード例 #32
0
 public TreeViewProjectFolders(TreeNode treeNode, ProjectFolder productFolder)
 {
     this.treeNode = treeNode;
     this.productFolder = productFolder;
     this.productFolder.LinkReference = treeNode;
 }
コード例 #33
0
ファイル: Project.cs プロジェクト: dmarijanovic/uber-tools
        private ProjectFolder BrowserProductFolder(ProjectFolder projectFolder, object linkReference)
        {
            ProjectFolder resultProductFolder = null;

            if (object.ReferenceEquals(projectFolder.LinkReference, linkReference))
            {
                return projectFolder;
            }

            foreach (ProjectFolder pf in (IEnumerable<ProjectFolder>)projectFolder)
            {
                resultProductFolder = BrowserProductFolder(pf, linkReference);
                if (resultProductFolder != null)
                {
                    // Object found, exit
                    break;
                }
            }
            return resultProductFolder;
        }
コード例 #34
0
 public ListViewProjectFiles(ListView listView, ProjectFolder projectFolder)
 {
     this.listView = listView;
     this.projectFolder = projectFolder;
 }
コード例 #35
0
		private TreeListNode addProjectFolderToTree(
			TreeListNode parentNode,
			ProjectFolder projectFolder)
		{
			var projectFolderNode =
				treeView.AppendNode(
					new object[]
						{
							null
						},
					parentNode);

			// --

			updateProjectFolderInTree(
				projectFolderNode,
				projectFolder);

			// --

			foreach (var childProjectFolder in projectFolder.ChildProjectFolders)
			{
				addProjectFolderToTree(projectFolderNode, childProjectFolder);
			}

			foreach (var fileGroup in projectFolder.ChildFileGroups)
			{
				addFileGroupToTree(projectFolderNode, fileGroup);
			}

			// --

			return projectFolderNode;
		}
コード例 #36
0
 public bool IsValidTarget(ProjectFolder folder)
 {
     return folder.IsMvcViewsFolderOrDescendent() && GetCandidateFilesToConvert(folder).Count > 0;
 }
コード例 #37
0
        public override void BuildNode(ITreeBuilder builder, object dataObject, NodeInfo nodeInfo)
        {
            if (!builder.Options["ShowVersionControlOverlays"])
            {
                return;
            }

            // Add status overlays

            if (dataObject is IWorkspaceObject)
            {
                IWorkspaceObject ce  = (IWorkspaceObject)dataObject;
                Repository       rep = VersionControlService.GetRepository(ce);
                if (rep != null)
                {
                    rep.GetDirectoryVersionInfo(ce.BaseDirectory, false, false);
                    AddFolderOverlay(rep, ce.BaseDirectory, nodeInfo, false);
                }
                return;
            }
            else if (dataObject is ProjectFolder)
            {
                ProjectFolder ce = (ProjectFolder)dataObject;
                if (ce.ParentWorkspaceObject != null)
                {
                    Repository rep = VersionControlService.GetRepository(ce.ParentWorkspaceObject);
                    if (rep != null)
                    {
                        rep.GetDirectoryVersionInfo(ce.Path, false, false);
                        AddFolderOverlay(rep, ce.Path, nodeInfo, true);
                    }
                }
                return;
            }

            IWorkspaceObject prj;
            FilePath         file;

            if (dataObject is ProjectFile)
            {
                ProjectFile pfile = (ProjectFile)dataObject;
                prj  = pfile.Project;
                file = pfile.FilePath;
            }
            else
            {
                SystemFile pfile = (SystemFile)dataObject;
                prj  = pfile.ParentWorkspaceObject;
                file = pfile.Path;
            }

            if (prj == null)
            {
                return;
            }

            Repository repo = VersionControlService.GetRepository(prj);

            if (repo == null)
            {
                return;
            }

            VersionInfo vi = repo.GetVersionInfo(file);

            nodeInfo.OverlayBottomRight = VersionControlService.LoadOverlayIconForStatus(vi.Status);
        }
コード例 #38
0
 public bool IsValidTarget(ProjectFolder folder)
 {
     return true;
 }
コード例 #39
0
        public override void BuildNode(ITreeBuilder builder, object dataObject, ref string label, ref Gdk.Pixbuf icon, ref Gdk.Pixbuf closedIcon)
        {
            if (!builder.Options["ShowVersionControlOverlays"])
            {
                return;
            }

            // Add status overlays

            if (dataObject is IWorkspaceObject)
            {
                IWorkspaceObject ce = (IWorkspaceObject)dataObject;
                ClearDirCache(ce.BaseDirectory);
                Repository rep = VersionControlService.GetRepository(ce);
                if (rep != null)
                {
                    AddFolderOverlay(rep, ce.BaseDirectory, ref icon, ref closedIcon);
                }
                return;
            }
            else if (dataObject is ProjectFolder)
            {
                ProjectFolder ce = (ProjectFolder)dataObject;
                if (ce.ParentWorkspaceObject != null)
                {
                    ClearDirCache(ce.Path);
                    Repository rep = VersionControlService.GetRepository(ce.ParentWorkspaceObject);
                    if (rep != null)
                    {
                        AddFolderOverlay(rep, ce.Path, ref icon, ref closedIcon);
                    }
                }
                return;
            }

            IWorkspaceObject prj;
            FilePath         file;

            if (dataObject is ProjectFile)
            {
                ProjectFile pfile = (ProjectFile)dataObject;
                prj  = pfile.Project;
                file = pfile.FilePath;
            }
            else
            {
                SystemFile pfile = (SystemFile)dataObject;
                prj  = pfile.ParentWorkspaceObject;
                file = pfile.Path;
            }

            if (prj == null)
            {
                return;
            }

            Repository repo = VersionControlService.GetRepository(prj);

            if (repo == null)
            {
                return;
            }

            VersionInfo vi = GetVersionInfo(repo, file);

            if (dataObject is ProjectFile)
            {
                ((ProjectFile)dataObject).ExtendedProperties [typeof(VersionInfo)] = vi;
            }

            Gdk.Pixbuf overlay = VersionControlService.LoadOverlayIconForStatus(vi.Status);
            if (overlay != null)
            {
                AddOverlay(ref icon, overlay);
            }
        }
コード例 #40
0
 public ViewMobilizerModel(ProjectFolder folder)
     : this(folder, "mobile")
 {
 }
コード例 #41
0
 /// ------------------------------------------------------------------------------------
 /// <summary>
 /// Compare this ProjectId to another ProjectId return true if they point to the same
 /// local project, but ignoring the file extension (because one of the projects is
 /// expected to be a newly restored XML project).
 /// For example c:\TestLangProj.fwdata and c:\TestLangProj.fwdb would be equal.
 /// </summary>
 /// <param name="otherProjectId">The other project id.</param>
 /// ------------------------------------------------------------------------------------
 public bool IsSameLocalProject(ProjectId otherProjectId)
 {
     return(ProjectFolder.Equals(otherProjectId.ProjectFolder, StringComparison.InvariantCultureIgnoreCase) &&
            ProjectInfo.ProjectsAreSame(Name, otherProjectId.Name));
 }
コード例 #42
0
		private void updateProjectFolderInTree(
			TreeListNode projectFolderNode,
			ProjectFolder projectFolder)
		{
			projectFolderNode[0] = projectFolder.Name;
			projectFolderNode.ImageIndex = projectFolderNode.SelectImageIndex = getImageIndex(@"projectfolder");
			projectFolderNode.Tag = projectFolder;
			projectFolderNode.StateImageIndex = (int)FileGroupStateColor.Grey; // (int)projectFolder.TranslationStateColor;

			updateNodeStateImage(projectFolderNode, AsynchronousMode.Asynchronous);
		}
コード例 #43
0
		private void doAutomaticallyAddResourceFilesFromVSSolution(
			BackgroundWorker backgroundWorker,
			ProjectFolder parentProjectFolder,
			ref int fileGroupCount,
			ref int fileCount,
			ZlpFileInfo vsSolutionPath)
		{
			if (vsSolutionPath != null && vsSolutionPath.Exists)
			{
				string solutionText;
				//using (var sr = vsSolutionPath.OpenText())
				{
					//we can read it line by line to reduce memory usage, but solution files are not very big
					solutionText = ZlpIOHelper.ReadAllText(vsSolutionPath.FullName);// sr.ReadToEnd();
				}
				//solution files looks like:
				//Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZetaResourceEditor", "Main\ZetaResourceEditor.csproj", "{367758E7-0435-440A-AC76-1F30ABBA3ED8}"
				//EndProject
				//known projectTypes:
				//c#: FAE04EC0-301F-11D3-BF4B-00C04F79EFBC, VB: F184B08F-C81C-45F6-A57F-5ABD9991F28F
				//@see http://msdn.microsoft.com/en-us/library/hb23x61k%28VS.80%29.aspx
				//TODO: support virtual folders
				var supportedProjectTypes =
					new[]
						{
							@"FAE04EC0-301F-11D3-BF4B-00C04F79EFBC",
							@"F184B08F-C81C-45F6-A57F-5ABD9991F28F"
						};

				//we need some regular expression to find required info:
				const string pattern =
					@"Project\(""{(?<projectType>[^}]*)}""\)\s*=\s*""(?<projectName>[^""]*)"",\s*""(?<projectRelPath>[^""]*)"",\s*""{(?<projectID>[^}]*)}""";

				foreach (Match m in Regex.Matches(solutionText, pattern))
				{
					if (!m.Success)
					{
						continue;
					}

					var g = m.Groups[@"projectType"];
					if (g == null || !g.Success)
					{
						continue;
					}
					var projectType = g.Value;

					//compare with known project types. 
					// Currently only CS Projects are supported. 
					// But other types like VB can be simply added.
					if (!Array.Exists(supportedProjectTypes, a => a == projectType))
					{
						continue;
					}

					var projectRelPath = m.Groups[@"projectRelPath"].Value;
					var projectFile = new ZlpFileInfo(ZlpPathHelper.Combine(vsSolutionPath.Directory.FullName, projectRelPath));

					//add all files from project
					//we can add each using separate sub folder
					var projectName = m.Groups[@"projectName"].Value;
					//look in subfolders only 
					var subFolders = Project.ProjectFolders;
					if (parentProjectFolder != null)
					{
						subFolders = parentProjectFolder.ChildProjectFolders;
					}
					var pf = subFolders.Find(f => f.Name == projectName);
					if (pf == null)
					{
						pf =
							new ProjectFolder(Project)
							{
								Name = projectName,
								Parent = parentProjectFolder
							};
						Project.ProjectFolders.Add(pf);
					}

					Project.MarkAsModified();

					DoAutomaticallyAddResourceFilesFromVsProject(
						backgroundWorker,
						pf,
						ref fileGroupCount,
						ref fileCount,
						projectFile);
				}
			}
		}
コード例 #44
0
        private void UpdateSolution(ITaskItem solutionRootItem)
        {
            string solutionRootPath             = Path.GetFullPath(solutionRootItem.ItemSpec);
            string projectExclude               = solutionRootItem.GetMetadata("ExcludePattern");
            List <ProjectFolder> projectFolders = new List <ProjectFolder>();

            if (!solutionRootPath.EndsWith(Path.DirectorySeparatorChar.ToString()))
            {
                solutionRootPath += Path.DirectorySeparatorChar;
            }

            ProjectFolder testFolder = new ProjectFolder(solutionRootPath, "tests", "{1A2F9F4A-A032-433E-B914-ADD5992BB178}", projectExclude, true);

            if (testFolder.FolderExists)
            {
                projectFolders.Add(testFolder);
            }

            ProjectFolder srcFolder = new ProjectFolder(solutionRootPath, "src", "{E107E9C1-E893-4E87-987E-04EF0DCEAEFD}", projectExclude);

            if (srcFolder.FolderExists)
            {
                testFolder.DependsOn.Add(srcFolder);
                projectFolders.Add(srcFolder);
            }
            ;

            ProjectFolder refFolder = new ProjectFolder(solutionRootPath, "ref", "{2E666815-2EDB-464B-9DF6-380BF4789AD4}", projectExclude);

            if (refFolder.FolderExists)
            {
                srcFolder.DependsOn.Add(refFolder);
                projectFolders.Add(refFolder);
            }

            if (projectFolders.Count == 0)
            {
                Log.LogMessage($"Directory '{solutionRootPath}' does not contain a 'src', 'tests', or 'ref' directory so skipping solution generation.");
                return;
            }

            Log.LogMessage($"Generating solution for '{solutionRootPath}'...");

            string   solutionName = GetNameForSolution(solutionRootPath);
            string   slnFile      = Path.Combine(solutionRootPath, solutionName + ".sln");
            Solution solution     = new Solution(slnFile);

            StringBuilder slnBuilder = new StringBuilder();

            slnBuilder.AppendLine("Microsoft Visual Studio Solution File, Format Version 12.00");
            slnBuilder.AppendLine("# Visual Studio 15");
            slnBuilder.AppendLine("VisualStudioVersion = 15.0.27213.1");
            slnBuilder.AppendLine("MinimumVisualStudioVersion = 10.0.40219.1");


            // Output project items
            foreach (var projectFolder in projectFolders)
            {
                foreach (var slnProject in projectFolder.Projects)
                {
                    string projectName = Path.GetFileNameWithoutExtension(slnProject.ProjectPath);
                    // Normalize the directory separators to the windows version given these are projects for VS and only work on windows.
                    string relativePathFromCurrentDirectory = slnProject.ProjectPath.Replace(solutionRootPath, "").Replace("/", "\\");

                    slnBuilder.AppendLine($"Project(\"{slnProject.SolutionGuid}\") = \"{projectName}\", \"{relativePathFromCurrentDirectory}\", \"{slnProject.ProjectGuid}\"");

                    bool writeEndProjectSection = false;
                    foreach (var dependentFolder in projectFolder.DependsOn)
                    {
                        foreach (var depProject in dependentFolder.Projects)
                        {
                            string depProjectId = depProject.ProjectGuid;
                            slnBuilder.AppendLine(
                                $"\tProjectSection(ProjectDependencies) = postProject\r\n\t\t{depProjectId} = {depProjectId}");
                            writeEndProjectSection = true;
                        }
                    }
                    if (writeEndProjectSection)
                    {
                        slnBuilder.AppendLine("\tEndProjectSection");
                    }

                    slnBuilder.AppendLine("EndProject");
                }
            }

            // Output the solution folder items
            foreach (var projectFolder in projectFolders)
            {
                slnBuilder.AppendLine($"Project(\"{projectFolder.SolutionGuid}\") = \"{projectFolder.Name}\", \"{projectFolder.Name}\", \"{projectFolder.ProjectGuid}\"\r\nEndProject");
            }

            string anyCPU     = "Any CPU";
            string slnDebug   = "Debug|" + anyCPU;
            string slnRelease = "Release|" + anyCPU;

            // Output the solution configurations
            slnBuilder.AppendLine("Global");
            slnBuilder.AppendLine("\tGlobalSection(SolutionConfigurationPlatforms) = preSolution");
            slnBuilder.AppendLine($"\t\t{slnDebug} = {slnDebug}");
            slnBuilder.AppendLine($"\t\t{slnRelease} = {slnRelease}");
            slnBuilder.AppendLine("\tEndGlobalSection");

            slnBuilder.AppendLine("\tGlobalSection(ProjectConfigurationPlatforms) = postSolution");

            // Output the solution to project configuration mappings
            foreach (var projectFolder in projectFolders)
            {
                foreach (var slnProject in projectFolder.Projects)
                {
                    string projectConfig = slnProject.GetBestConfiguration("netcoreapp-Windows_NT");
                    if (!string.IsNullOrEmpty(projectConfig))
                    {
                        projectConfig += "-";
                    }
                    string[] slnConfigs = new string[] { slnDebug, slnRelease };
                    string[] markers    = new string[] { "ActiveCfg", "Build.0" };

                    foreach (string slnConfig in slnConfigs)
                    {
                        foreach (string marker in markers)
                        {
                            slnBuilder.AppendLine($"\t\t{slnProject.ProjectGuid}.{slnConfig}.{marker} = {projectConfig}{slnConfig}");
                        }
                    }
                }
            }

            slnBuilder.AppendLine("\tEndGlobalSection");
            slnBuilder.AppendLine("\tGlobalSection(SolutionProperties) = preSolution");
            slnBuilder.AppendLine("\t\tHideSolutionNode = FALSE");
            slnBuilder.AppendLine("\tEndGlobalSection");

            // Output the project to solution folder mappings
            slnBuilder.AppendLine("\tGlobalSection(NestedProjects) = preSolution");
            foreach (var projectFolder in projectFolders)
            {
                foreach (var slnProject in projectFolder.Projects)
                {
                    slnBuilder.AppendLine($"\t\t{slnProject.ProjectGuid} = {projectFolder.ProjectGuid}");
                }
            }
            slnBuilder.AppendLine("\tEndGlobalSection");

            // Output the extensibility globals
            slnBuilder.AppendLine("\tGlobalSection(ExtensibilityGlobals) = postSolution");
            slnBuilder.AppendLine($"\t\tSolutionGuid = {solution.Guid}");
            slnBuilder.AppendLine("\tEndGlobalSection");

            slnBuilder.AppendLine("EndGlobal");

            File.WriteAllText(slnFile, slnBuilder.ToString());
        }
コード例 #45
0
        private static void ParseFolder(ProjectFolder folder, string dir, List <string> skippedBlocksList)
        {
            //Directory.CreateDirectory(dir);
            var path = Path.Combine(dir, NormalizeFolderName(folder.Name));

            foreach (var projectFolder in folder.SubItems)
            {
                ParseFolder(projectFolder, path, skippedBlocksList);
            }

            if (folder is IBlocksFolder)
            {
                var blkFld = folder as IBlocksFolder;

                foreach (var projectBlockInfo in blkFld.BlockInfos)
                {
                    try
                    {
                        var    src = projectBlockInfo.Export(ExportFormat.Default);
                        string xml = null;
                        if (src != null)
                        {
                            if (!removeNoBlanks)
                            {
                                /*var startIndex = src.IndexOf("   VAR ");
                                 * var endIndex = src.IndexOf("   END_VAR", startIndex);*/
                                var startIndex = 0;
                                var endIndex   = src.IndexOf("BEGIN", startIndex);
                                if (endIndex == -1)
                                {
                                    endIndex = src.IndexOf("END_TYPE", startIndex);
                                }

                                if (endIndex != -1)
                                {
                                    var search  = src;
                                    var pattern = "   // ";

                                    var indexes = Enumerable.Range(startIndex, endIndex - startIndex)
                                                  .Select(index =>
                                    {
                                        return(new
                                        {
                                            Index = index,
                                            Length = index + pattern.Length > search.Length
                                                    ? search.Length - index
                                                    : pattern.Length
                                        });
                                    })
                                                  .Where(searchbit =>
                                                         searchbit.Length == pattern.Length && pattern.Equals(
                                                             search.Substring(searchbit.Index, searchbit.Length),
                                                             StringComparison.OrdinalIgnoreCase))
                                                  .Select(searchbit => searchbit.Index);

                                    var updatedSrc = src;

                                    foreach (var x in indexes.Reverse())
                                    {
                                        if (removeOnlyOneBlank)
                                        {
                                            updatedSrc = updatedSrc.Remove(x + 5, 1);
                                        }
                                        else if (removeAllBlanks)
                                        {
                                            while (updatedSrc[x + 5].ToString() == " ")
                                            {
                                                updatedSrc = updatedSrc.Remove(x + 5, 1);
                                            }
                                        }
                                    }

                                    src = updatedSrc;
                                }
                            }

                            var ext = "xml";
                            if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB)
                            {
                                ext = "db";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.SCL)
                            {
                                ext = "scl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.KOP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.FUP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.AWL)
                            {
                                ext = "awl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockType == PLCBlockType.UDT)
                            {
                                ext = "udt";
                            }
                            var file    = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + "." + ext);
                            var xmlfile = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + ".xml");

                            var         xmlValid = false;
                            XmlDocument xmlDoc   = new XmlDocument();
                            try
                            {
                                xmlDoc.LoadXml(src);
                                xmlValid = true;
                            }
                            catch
                            {
                                xmlValid = false;
                            }

                            if (xmlValid)
                            {
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//Created");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                StringBuilder     sb       = new StringBuilder();
                                XmlWriterSettings settings = new XmlWriterSettings
                                {
                                    Indent          = true,
                                    IndentChars     = "  ",
                                    NewLineChars    = "\r\n",
                                    NewLineHandling = NewLineHandling.Replace
                                };
                                using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                {
                                    xmlDoc.Save(writer);
                                }
                                src = sb.ToString();
                            }

                            if (src != null && ext != "db")
                            {
                                Directory.CreateDirectory(path);
                                File.WriteAllText(file, src, new UTF8Encoding(true));
                            }

                            if (xml != null)
                            {
                                var         xmlValid2 = false;
                                XmlDocument xmlDoc2   = new XmlDocument();
                                try
                                {
                                    xmlDoc2.LoadXml(xml);
                                    xmlValid2 = true;
                                }
                                catch
                                {
                                    xmlValid2 = false;
                                }

                                if (xmlValid2)
                                {
                                    if (!removeNoBlanks)
                                    {
                                        try
                                        {
                                            XmlNodeList nodes = xmlDoc2.GetElementsByTagName("MultiLanguageText");

                                            var pattern = "^( *)(.*)";

                                            foreach (var n in nodes.Cast <XmlNode>())
                                            {
                                                if (removeOnlyOneBlank)
                                                {
                                                    n.InnerText = Regex.Replace(n.InnerText, pattern, m => m.Groups[1].Value.Substring(0, m.Groups[1].Value.Length - 1) + m.Groups[2].Value);
                                                }
                                                else if (removeAllBlanks)
                                                {
                                                    n.InnerXml = Regex.Replace(n.InnerXml, pattern, m => "" + m.Groups[2].Value);
                                                }
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//Created");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//DocumentInfo");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    if (removeCodeFromXml && !xml.Contains("$$GITHANDLER-KEEPCODE$$"))
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//SW.Blocks.CompileUnit");
                                            var node  = nodes[0];
                                            node.InnerXml = "";
                                            var parent = node.ParentNode;
                                            foreach (var nd in nodes.Cast <XmlNode>().Skip(1).ToList())
                                            {
                                                parent.RemoveChild(nd);
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//MultilingualText");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//MultilingualText");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    StringBuilder     sb       = new StringBuilder();
                                    XmlWriterSettings settings = new XmlWriterSettings
                                    {
                                        Indent          = true,
                                        IndentChars     = "  ",
                                        NewLineChars    = "\r\n",
                                        NewLineHandling = NewLineHandling.Replace
                                    };
                                    using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                    {
                                        xmlDoc2.Save(writer);
                                    }

                                    xml = sb.ToString();

                                    if (_projectType == ProjectType.Tia14SP1)
                                    {
                                        xml = xml.Replace("<ProgrammingLanguage>SCL</ProgrammingLanguage>", "<ProgrammingLanguage>STL</ProgrammingLanguage>");
                                    }
                                }

                                Directory.CreateDirectory(path);
                                File.WriteAllText(xmlfile, xml, new UTF8Encoding(true));
                            }
                        }
                        else
                        {
                            Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Skipping Block: \"" + projectBlockInfo.Name + "\" Exception: " + ex.Message);
                        skippedBlocksList.Add(projectBlockInfo.Name);
                    }
                }
            }
        }
コード例 #46
0
        private static void ParseFolder(ProjectFolder folder, string dir, List <string> skippedBlocksList)
        {
            //Directory.CreateDirectory(dir);
            var path = Path.Combine(dir, NormalizeFolderName(folder.Name));

            foreach (var projectFolder in folder.SubItems)
            {
                ParseFolder(projectFolder, path, skippedBlocksList);
            }

            if (folder is IBlocksFolder)
            {
                var blkFld = folder as IBlocksFolder;

                foreach (var projectBlockInfo in blkFld.BlockInfos.ToList())
                {
                    try
                    {
                        var    src = projectBlockInfo.Export(ExportFormat.Default);
                        string xml = null;
                        if (src != null)
                        {
                            if (!removeNoBlanks)
                            {
                                /*var startIndex = src.IndexOf("   VAR ");
                                 * var endIndex = src.IndexOf("   END_VAR", startIndex);*/
                                var startIndex = 0;
                                var endIndex   = src.IndexOf("BEGIN", startIndex);
                                if (endIndex == -1)
                                {
                                    endIndex = src.IndexOf("END_TYPE", startIndex);
                                }

                                if (endIndex != -1)
                                {
                                    var search  = src;
                                    var pattern = "   // ";

                                    var indexes = Enumerable.Range(startIndex, endIndex - startIndex)
                                                  .Select(index =>
                                    {
                                        return(new
                                        {
                                            Index = index,
                                            Length = index + pattern.Length > search.Length
                                                    ? search.Length - index
                                                    : pattern.Length
                                        });
                                    })
                                                  .Where(searchbit =>
                                                         searchbit.Length == pattern.Length && pattern.Equals(
                                                             search.Substring(searchbit.Index, searchbit.Length),
                                                             StringComparison.OrdinalIgnoreCase))
                                                  .Select(searchbit => searchbit.Index);

                                    var updatedSrc = src;

                                    foreach (var x in indexes.Reverse())
                                    {
                                        if (removeOnlyOneBlank)
                                        {
                                            updatedSrc = updatedSrc.Remove(x + 5, 1);
                                        }
                                        else if (removeAllBlanks)
                                        {
                                            while (updatedSrc[x + 5].ToString() == " ")
                                            {
                                                updatedSrc = updatedSrc.Remove(x + 5, 1);
                                            }
                                        }
                                    }

                                    src = updatedSrc;
                                }
                            }

                            var ext = "xml";
                            if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB)
                            {
                                ext = "db";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.SCL)
                            {
                                ext = "scl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.KOP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.FUP)
                            {
                                ext = "xml";
                            }
                            else if (projectBlockInfo.BlockLanguage == PLCLanguage.AWL)
                            {
                                ext = "awl";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            else if (projectBlockInfo.BlockType == PLCBlockType.UDT)
                            {
                                ext = "udt";
                                xml = projectBlockInfo.Export(ExportFormat.Xml);
                            }
                            var file    = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + "." + ext);
                            var xmlfile = Path.Combine(path, projectBlockInfo.Name.Replace("\\", "_").Replace("/", "_") + ".xml");

                            var                 xmlValid = false;
                            XmlDocument         xmlDoc   = new XmlDocument();
                            XmlNamespaceManager ns       = new XmlNamespaceManager(xmlDoc.NameTable);
                            ns.AddNamespace("smns", "http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v3");
                            ns.AddNamespace("smns2", "http://www.siemens.com/automation/Openness/SW/Interface/v3");

                            try
                            {
                                xmlDoc.LoadXml(src);
                                xmlValid = true;
                            }
                            catch
                            {
                                xmlValid = false;
                            }

                            if (xmlValid)
                            {
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//Created");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//CodeModifiedDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//CompileDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//CreationDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//InterfaceModifiedDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//ModifiedDate");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//ParameterModified");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//StructureModified");
                                    var node  = nodes[0];
                                    node.ParentNode.RemoveChild(node);
                                }
                                catch
                                {
                                }
                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//smns:DateAttribute[@Name='ParameterModifiedTS']", ns);
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                //try
                                //{
                                //    var nodes = xmlDoc.SelectNodes("//smns:Address[@Area='None' and @Informative='true']", ns);
                                //    foreach (var node in nodes.Cast<XmlNode>())
                                //    {
                                //        node.ParentNode.RemoveChild(node);
                                //    }
                                //}
                                //catch
                                //{
                                //}

                                //try
                                //{
                                //    var nodes = xmlDoc.SelectNodes("//smns2:IntegerAttribute[@Name='Offset' and @Informative='true']", ns);
                                //    foreach (var node in nodes.Cast<XmlNode>())
                                //    {
                                //        node.ParentNode.RemoveChild(node);
                                //    }
                                //}
                                //catch
                                //{
                                //}

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[@Informative='true']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[local-name()='InstanceOfNumber']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[local-name()='LibraryConformanceStatus']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[local-name()='Member'][contains(@Datatype,'\"')]//*[local-name()='Sections']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        if (!node.OuterXml.Contains("Remanence=\"Retain\"") && !node.OuterXml.Contains("StartValue"))
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                }
                                catch
                                {
                                }

                                if (resetSetpoints)
                                {
                                    try
                                    {
                                        var nodes = xmlDoc.SelectNodes("//smns2:BooleanAttribute[@Name='SetPoint']", ns);
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.InnerText = "false";
                                        }
                                    }
                                    catch
                                    {
                                    }
                                }

                                try
                                {
                                    var nodes = xmlDoc.SelectNodes("//*[@ReadOnly='true']");
                                    foreach (var node in nodes.Cast <XmlNode>())
                                    {
                                        node.ParentNode.RemoveChild(node);
                                    }
                                }
                                catch
                                {
                                }

                                StringBuilder     sb       = new StringBuilder();
                                XmlWriterSettings settings = new XmlWriterSettings
                                {
                                    Indent          = true,
                                    IndentChars     = "  ",
                                    NewLineChars    = "\r\n",
                                    NewLineHandling = NewLineHandling.Replace
                                };
                                using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                {
                                    xmlDoc.Save(writer);
                                }
                                src = sb.ToString();
                            }

                            if (src != null && ext != "db")
                            {
                                Directory.CreateDirectory(path);
                                File.WriteAllText(file, src, new UTF8Encoding(true));
                            }

                            if (xml != null)
                            {
                                var                 xmlValid2 = false;
                                XmlDocument         xmlDoc2   = new XmlDocument();
                                XmlNamespaceManager ns2       = new XmlNamespaceManager(xmlDoc2.NameTable);
                                ns2.AddNamespace("smns", "http://www.siemens.com/automation/Openness/SW/NetworkSource/FlgNet/v3");
                                ns2.AddNamespace("smns2", "http://www.siemens.com/automation/Openness/SW/Interface/v3");

                                try
                                {
                                    xmlDoc2.LoadXml(xml);
                                    xmlValid2 = true;
                                }
                                catch
                                {
                                    xmlValid2 = false;
                                }

                                if (xmlValid2)
                                {
                                    if (!removeNoBlanks)
                                    {
                                        try
                                        {
                                            XmlNodeList nodes = xmlDoc2.GetElementsByTagName("MultiLanguageText");

                                            var pattern = "^( *)(.*)";

                                            foreach (var n in nodes.Cast <XmlNode>())
                                            {
                                                if (removeOnlyOneBlank)
                                                {
                                                    n.InnerText = Regex.Replace(n.InnerText, pattern, m => m.Groups[1].Value.Substring(0, m.Groups[1].Value.Length - 1) + m.Groups[2].Value);
                                                }
                                                else if (removeAllBlanks)
                                                {
                                                    n.InnerXml = Regex.Replace(n.InnerXml, pattern, m => "" + m.Groups[2].Value);
                                                }
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//Created");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//DocumentInfo");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    { }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//CodeModifiedDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//CompileDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//CreationDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//InterfaceModifiedDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//ModifiedDate");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//ParameterModified");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//StructureModified");
                                        var node  = nodes[0];
                                        node.ParentNode.RemoveChild(node);
                                    }
                                    catch
                                    {
                                    }

                                    if (removeCodeFromXml && !xml.Contains("$$GITHANDLER-KEEPCODE$$"))
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//SW.Blocks.CompileUnit");
                                            var node  = nodes[0];
                                            node.InnerXml = "";
                                            var parent = node.ParentNode;
                                            foreach (var nd in nodes.Cast <XmlNode>().Skip(1).ToList())
                                            {
                                                parent.RemoveChild(nd);
                                            }
                                        }
                                        catch
                                        { }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//smns:DateAttribute[@Name='ParameterModifiedTS']", ns2);
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//*[@Informative='true']");
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                    catch
                                    {
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//*[local-name()='LibraryConformanceStatus']");
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                    catch
                                    {
                                    }

                                    if (projectBlockInfo.BlockLanguage == PLCLanguage.DB && projectBlockInfo.BlockType == PLCBlockType.DB && projectBlockInfo.IsInstance)
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//*[local-name()='Interface']/*[local-name()='Sections']/*[local-name()='Section']/*[local-name()='Member']");
                                            foreach (var node in nodes.Cast <XmlNode>())
                                            {
                                                if (!node.OuterXml.Contains("Remanence=\"Retain\"") && !node.OuterXml.Contains("StartValue"))
                                                {
                                                    node.ParentNode.RemoveChild(node);
                                                }
                                            }
                                        }
                                        catch
                                        {
                                        }

                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//*[local-name()='InstanceOfNumber']");
                                            foreach (var node in nodes.Cast <XmlNode>())
                                            {
                                                node.ParentNode.RemoveChild(node);
                                            }
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    if (resetSetpoints)
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//smns2:BooleanAttribute[@Name='SetPoint']", ns2);
                                            foreach (var node in nodes.Cast <XmlNode>())
                                            {
                                                node.InnerText = "false";
                                            }
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    if (projectBlockInfo.BlockTypeString == "Userdatatype" || projectBlockInfo.BlockTypeString == "Functionblock")
                                    {
                                        try
                                        {
                                            var nodes = xmlDoc2.SelectNodes("//*[local-name()='Member'][contains(@Datatype,'\"')]//*[local-name()='Sections']");
                                            foreach (var node in nodes.Cast <XmlNode>())
                                            {
                                                if (!node.OuterXml.Contains("Remanence=\"Retain\"") && !node.OuterXml.Contains("StartValue"))
                                                {
                                                    node.ParentNode.RemoveChild(node);
                                                }
                                            }
                                        }
                                        catch
                                        {
                                        }
                                    }

                                    try
                                    {
                                        var nodes = xmlDoc2.SelectNodes("//*[@ReadOnly='true']");
                                        foreach (var node in nodes.Cast <XmlNode>())
                                        {
                                            node.ParentNode.RemoveChild(node);
                                        }
                                    }
                                    catch
                                    {
                                    }

                                    StringBuilder     sb       = new StringBuilder();
                                    XmlWriterSettings settings = new XmlWriterSettings
                                    {
                                        Indent          = true,
                                        IndentChars     = "  ",
                                        NewLineChars    = "\r\n",
                                        NewLineHandling = NewLineHandling.Replace
                                    };
                                    using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                                    {
                                        xmlDoc2.Save(writer);
                                    }

                                    xml = sb.ToString();

                                    if (_projectType == ProjectType.Tia14SP1)
                                    {
                                        xml = xml.Replace("<ProgrammingLanguage>SCL</ProgrammingLanguage>", "<ProgrammingLanguage>STL</ProgrammingLanguage>");
                                    }
                                }

                                Directory.CreateDirectory(path);
                                File.WriteAllText(xmlfile, xml, new UTF8Encoding(true));
                            }
                        }
                        else
                        {
                            Console.WriteLine("Skipping Block (null)" + projectBlockInfo.Name);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Skipping Block: \"" + projectBlockInfo.Name + "\" Exception: " + ex.Message);
                        skippedBlocksList.Add(projectBlockInfo.Name);
                    }
                }
            }
            else if (folder is ITIAVarTabFolder varTabfld)
            {
                foreach (var varTab in varTabfld.TagTables)
                {
                    var         xmlValid = false;
                    string      xml      = null;
                    XmlDocument xmlDoc   = new XmlDocument();

                    var file = Path.Combine(path, varTab.Name.Replace("\\", "_").Replace("/", "_") + ".xml");
                    try
                    {
                        var vt = varTab.Export();
                        try
                        {
                            xmlDoc.LoadXml(vt);
                            xmlValid = true;
                        }
                        catch
                        {
                            xmlValid = false;
                        }

                        if (xmlValid)
                        {
                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//Created");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }

                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }
                        }

                        StringBuilder     sb       = new StringBuilder();
                        XmlWriterSettings settings = new XmlWriterSettings
                        {
                            Indent          = true,
                            IndentChars     = "  ",
                            NewLineChars    = "\r\n",
                            NewLineHandling = NewLineHandling.Replace
                        };
                        using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                        {
                            xmlDoc.Save(writer);
                        }

                        xml = sb.ToString();

                        Directory.CreateDirectory(path);
                        File.WriteAllText(file, xml, new UTF8Encoding(true));
                    }
                    catch
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(file + " could not be exported");
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                }
            }
            else if (folder is ITIAWatchAndForceTablesFolder wtfFld)
            {
                foreach (var varTab in wtfFld.WatchTables)
                {
                    var         xmlValid = false;
                    string      xml      = null;
                    XmlDocument xmlDoc   = new XmlDocument();

                    var file = Path.Combine(path, varTab.Name.Replace("\\", "_").Replace("/", "_") + ".watch");

                    try
                    {
                        var vt = varTab.Export();
                        try
                        {
                            xmlDoc.LoadXml(vt);
                            xmlValid = true;
                        }
                        catch
                        {
                            xmlValid = false;
                        }

                        if (xmlValid)
                        {
                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//Created");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }

                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }
                        }

                        StringBuilder     sb       = new StringBuilder();
                        XmlWriterSettings settings = new XmlWriterSettings
                        {
                            Indent          = true,
                            IndentChars     = "  ",
                            NewLineChars    = "\r\n",
                            NewLineHandling = NewLineHandling.Replace
                        };
                        using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                        {
                            xmlDoc.Save(writer);
                        }

                        xml = sb.ToString();
                        Directory.CreateDirectory(path);
                        File.WriteAllText(file, xml, new UTF8Encoding(true));
                    }
                    catch
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(file + " could not be exported");
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                }
                foreach (var varTab in wtfFld.ForceTables)
                {
                    var         xmlValid = false;
                    string      xml      = null;
                    XmlDocument xmlDoc   = new XmlDocument();

                    var file = Path.Combine(path, varTab.Name.Replace("\\", "_").Replace("/", "_") + ".force");

                    try
                    {
                        var vt = varTab.Export();

                        try
                        {
                            xmlDoc.LoadXml(vt);
                            xmlValid = true;
                        }
                        catch
                        {
                            xmlValid = false;
                        }

                        if (xmlValid)
                        {
                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//Created");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }

                            try
                            {
                                var nodes = xmlDoc.SelectNodes("//DocumentInfo");
                                var node  = nodes[0];
                                node.ParentNode.RemoveChild(node);
                            }
                            catch
                            {
                            }
                        }

                        StringBuilder     sb       = new StringBuilder();
                        XmlWriterSettings settings = new XmlWriterSettings
                        {
                            Indent          = true,
                            IndentChars     = "  ",
                            NewLineChars    = "\r\n",
                            NewLineHandling = NewLineHandling.Replace
                        };
                        using (TextWriter writer = new EncodingStringWriter(sb, Encoding.UTF8))
                        {
                            xmlDoc.Save(writer);
                        }

                        xml = sb.ToString();
                        Directory.CreateDirectory(path);
                        File.WriteAllText(file, xml, new UTF8Encoding(true));
                    }
                    catch (Exception e)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(file + " could not be exported");
                        Console.ForegroundColor = ConsoleColor.White;
                    }
                }
            }
        }
コード例 #47
0
 public ProjectTreeModel(ProjectFolder rootFolder)
 {
     _rootFolder = rootFolder;
 }