public bool ValidateFileNames(string folderName, IFolder folder, IScriptBaseObject thisLevelRootObject, out IEnumerable<FilenameInfo> duplicates)
        {
            log.Info("Validating generated files.");

            List<FilenameInfo> generatedPaths = new List<FilenameInfo>();

            ValidateFileNames(generatedPaths, folder, thisLevelRootObject, folderName);

            Dictionary<string, FilenameInfo> generatedPathSet = new Dictionary<string, FilenameInfo>();
            HashSet<FilenameInfo> tempduplicates = new HashSet<FilenameInfo>();

            foreach (var path in generatedPaths)
            {
                if (generatedPathSet.ContainsKey(path.ProcessedFilename) == false)
                {
                    generatedPathSet.Add(path.ProcessedFilename, path);
                }
                else
                {
                    tempduplicates.Add(generatedPathSet[path.ProcessedFilename]);
                    tempduplicates.Add(path);
                }
            }

            if (tempduplicates.Count > 0)
            {
                duplicates = tempduplicates;
                return false;
            }
            duplicates = new List<FilenameInfo>();
            return true;
        }
Exemplo n.º 2
0
        public bool ValidateFileNames(string folderName, IFolder folder, IScriptBaseObject thisLevelRootObject, out IEnumerable <FilenameInfo> duplicates)
        {
            log.Info("Validating generated files.");

            List <FilenameInfo> generatedPaths = new List <FilenameInfo>();

            ValidateFileNames(generatedPaths, folder, thisLevelRootObject, folderName);

            Dictionary <string, FilenameInfo> generatedPathSet = new Dictionary <string, FilenameInfo>();
            HashSet <FilenameInfo>            tempduplicates   = new HashSet <FilenameInfo>();

            foreach (var path in generatedPaths)
            {
                if (generatedPathSet.ContainsKey(path.ProcessedFilename) == false)
                {
                    generatedPathSet.Add(path.ProcessedFilename, path);
                }
                else
                {
                    tempduplicates.Add(generatedPathSet[path.ProcessedFilename]);
                    tempduplicates.Add(path);
                }
            }

            if (tempduplicates.Count > 0)
            {
                duplicates = tempduplicates;
                return(false);
            }
            duplicates = new List <FilenameInfo>();
            return(true);
        }
 public void ProcessScriptBase(IScriptBaseObject scriptBase, XmlWriter writer)
 {
     if (scriptBase.Ex != null && scriptBase.Ex.Count > 0)
     {
         var serialiser = new VirtualPropertySerialiser();
         serialiser.SerialiseVirtualProperties(scriptBase.Ex, writer);
     }
 }
Exemplo n.º 4
0
        //private void SerialiseGrouping(XmlWriter writer, Grouping grouping)
        //{
        //    if (grouping.ContainsConditions == false && grouping.ContainsGroupings == false)
        //        return;

        //    writer.WriteStartElement("AndGrouping");

        //    foreach (var condition in grouping.Conditions)
        //    {
        //        writer.WriteStartElement("Condition");
        //        writer.WriteStartElement("Column");
        //        writer.WriteAttributeString("table", condition.Column.Parent.Name);
        //        writer.WriteAttributeString("name", condition.Column.Name);
        //        writer.WriteEndElement();
        //        writer.WriteElementString("Operator", condition.Operator.Name);
        //        writer.WriteElementString("ExpressionValue", condition.ExpressionValue.Value);
        //        writer.WriteEndElement();
        //    }
        //    foreach (var gr in grouping.Groupings)
        //        SerialiseGrouping(writer, gr);

        //    writer.WriteEndElement();
        //}

        public void ProcessScriptBase(IScriptBaseObject scriptBase, XmlWriter writer)
        {
            if (scriptBase.Ex != null && scriptBase.Ex.Count > 0)
            {
                var serialiser = new VirtualPropertySerialiser();
                serialiser.SerialiseVirtualProperties(scriptBase.Ex, writer);
            }
        }
Exemplo n.º 5
0
 public FormVirtualPropertyEdit(IUserOption virtualProperty, IScriptBaseObject iteratorObject)
 {
     InitializeComponent();
     this.BackColor  = Slyce.Common.Colors.BackgroundColor;
     ucHeading1.Text = "";
     VirtualProperty = virtualProperty;
     OriginalValue   = VirtualProperty.Value;
     Interfaces.Events.ShadeMainForm();
     Populate();
 }
        public void ProcessScriptBase(IScriptBaseObject scriptBase, XmlNode node)
        {
            var virtualPropertiesNode = node.SelectSingleNode(VirtualPropertyDeserialiser.VirtualPropertiesNodeName);

            if (virtualPropertiesNode != null)
            {
                var deserialiser = new VirtualPropertyDeserialiser();
                scriptBase.Ex = deserialiser.DeserialiseVirtualProperties(virtualPropertiesNode);
            }
        }
Exemplo n.º 7
0
 public FormVirtualPropertyEdit(IUserOption virtualProperty, IScriptBaseObject iteratorObject)
 {
     InitializeComponent();
     this.BackColor = Slyce.Common.Colors.BackgroundColor;
     ucHeading1.Text = "";
     VirtualProperty = virtualProperty;
     OriginalValue = VirtualProperty.Value;
     Interfaces.Events.ShadeMainForm();
     Populate();
 }
Exemplo n.º 8
0
        public void Setup()
        {
            mocks = new MockRepository();

            progressHelper = mocks.DynamicMock<ITaskProgressHelper<GenerateFilesProgress>>();
            projectInfo = mocks.DynamicMock<IWorkbenchProject>();
            folder = mocks.DynamicMock<IFolder>();
            scriptObject = mocks.DynamicMock<IScriptBaseObject>();
            loader = mocks.DynamicMock<ITemplateLoader>();
            controller = mocks.DynamicMock<IController>();
            fileController = mocks.DynamicMock<IFileController>();
        }
        public void Setup()
        {
            mocks = new MockRepository();

            progressHelper = mocks.DynamicMock <ITaskProgressHelper <GenerateFilesProgress> >();
            projectInfo    = mocks.DynamicMock <IWorkbenchProject>();
            folder         = mocks.DynamicMock <IFolder>();
            scriptObject   = mocks.DynamicMock <IScriptBaseObject>();
            loader         = mocks.DynamicMock <ITemplateLoader>();
            controller     = mocks.DynamicMock <IController>();
            fileController = mocks.DynamicMock <IFileController>();
        }
Exemplo n.º 10
0
        private static void SetUserOption <T>(IScriptBaseObject obj, string optionName, T value)
        {
            var option = obj.Ex.FirstOrDefault(uo => uo.Name == optionName);

            if (option != null)
            {
                option.Value = value;
            }
            else
            {
                obj.AddUserOption(new UserOption(optionName, typeof(T), value));
            }
        }
        private void ValidateFileNames(List<FilenameInfo> generatedPaths, IFolder folder, IScriptBaseObject thisLevelRootObject, string folderName)
        {
            foreach (IFolder subFolder in folder.SubFolders)
            {
                ValidateFolderName(generatedPaths, subFolder, thisLevelRootObject, folderName);
            }

            foreach (IScript script in folder.Scripts)
            {
                // Check script filename
                ValidateScriptName(generatedPaths, script, folderName);
            }

            foreach (IFile file in folder.Files)
            {
                // Check static filename
                ValidateStaticFileName(generatedPaths, file, folderName);
                //fileCount += CreateStaticFile(folderName, file, parentNode);
            }
        }
Exemplo n.º 12
0
 public bool DisplayOptionToUser(IOption option, IScriptBaseObject iteratorObject)
 {
     try
     {
         if (option.DisplayToUserValue.HasValue)
         {
             return option.DisplayToUserValue.Value;
         }
         if (string.IsNullOrEmpty(option.DisplayToUserFunction))
         {
             return true;
         }
         if (iteratorObject == null)
         {
             object[] parameters = new object[0];
             return (bool)TemplateLoader.CallTemplateFunction(option.DisplayToUserFunction, ref parameters);
         }
         else
         {
             object[] parameters = new object[] { iteratorObject };
             return (bool)TemplateLoader.CallTemplateFunction(option.DisplayToUserFunction, ref parameters);
         }
     }
     catch (MissingMethodException)
     {
         object[] parameters = new object[] { iteratorObject };
         return (bool)TemplateLoader.CallTemplateFunction(option.DisplayToUserFunction, ref parameters);
     }
 }
        private void ValidateFolderName(List<FilenameInfo> generatedPaths, IFolder subFolder, IScriptBaseObject thisLevelRootObject, string folderName)
        {
            if (!string.IsNullOrEmpty(subFolder.IteratorName))
            {
                // The folder has an iterator
                ProviderInfo provider;
                Type iteratorType = _Project.GetIteratorTypeFromProviders(subFolder.IteratorName, out provider);

                object[] iteratorObjects;

                if (thisLevelRootObject == null)
                {
                    iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName).ToArray();
                }
                else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                {
                    iteratorObjects = new[] { thisLevelRootObject };
                }
                else
                {
                    iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject).ToArray();
                }

                if (iteratorObjects != null)
                {
                    foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                    {
                        string subFolderName = helper.UpdateScriptName(iteratorObject, subFolder);

                        subFolderName = Path.Combine(folderName, subFolderName);
                        log.InfoFormat("<Folder> {0}, {1}", subFolderName, iteratorObject);
                        generatedPaths.Add(new FilenameInfo(subFolderName, subFolder.Name, iteratorObject, FilenameInfo.FilenameTypes.Folder));
                        // Check Subfolders
                        ValidateFileNames(generatedPaths, subFolder, thisLevelRootObject, subFolderName);
                        //fileCount += GenerateAllFiles(subFolderName, subFolder, folderNode, iteratorObjects, basePath, false);
                    }
                }
            }
            else
            {
                string subFolderName = helper.UpdateScriptName(null, subFolder);
                subFolderName = Path.Combine(folderName, subFolderName);
                log.InfoFormat("<Folder> {0}, no iterator", subFolderName);

                generatedPaths.Add(new FilenameInfo(subFolderName, subFolder.Name, null, FilenameInfo.FilenameTypes.Folder));
                // check sub folders
                ValidateFileNames(generatedPaths, subFolder, thisLevelRootObject, subFolderName);
            }
        }
Exemplo n.º 14
0
        /// <summary>
        /// Runs through a project and generates the files in it.
        /// </summary>
        /// <param name="progressHelper">The TaskProgressHelper to use to report progress and cancel the operation.</param>
        /// <param name="projectInfo">The Project we are generating files from.</param>
        /// <param name="folderName">The name of the root folder to generate into. Not the full path, just the relative path to the 
        /// current folder.</param>
        /// <param name="folder"></param>
        /// <param name="parentNode"></param>
        /// <param name="thisLevelRootObject"></param>
        /// <returns></returns>
        /// <param name="loader"></param>
        /// <param name="controller"></param>
        public int GenerateAllFiles(ITaskProgressHelper<GenerateFilesProgress> progressHelper, IProjectHelper projectInfo, string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, ILoader loader, IController controller)
        {
            if (parentNode is ProjectFileTree)
            {
                ((ProjectFileTree)parentNode).TreeRestructuring = true;
                ((ProjectFileTree)parentNode).Clear();
            }
            int fileCount = 0;

            try
            {
                _Controller = controller;
                _Loader = loader;
                _ProgressHelper = progressHelper;
                project = projectInfo;
                CurrentRootObject = thisLevelRootObject;
                absoluteBasePath = controller.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator);

                {
                    Version version = new Version(loader.GetAssemblyVersionNumber());
                    Version expectedVersion = new Version(1, 1, 9, 49);
                    if (version < expectedVersion)
                    {
                        throw new OldVersionException("The template was compiled with an old version of ArchAngel, and cannot be used in this version of Workbench");
                    }
                }

                foreach (IFolder subFolder in folder.SubFolders)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return fileCount;
                    }

                    ProjectFileTreeNode folderNode = null;

                    if (parentNode != null && subFolder.Name != "ROOT")
                    {
                        folderNode = parentNode.AddChildNode(subFolder.Name);
                        folderNode.IsFolder = true;
                    }

                    if (!string.IsNullOrEmpty(subFolder.IteratorName))
                    {
                        // The folder has an iterator
                        ProviderInfo provider;
                        Type iteratorType = project.GetTypeFromProviders(subFolder.IteratorName, out provider);

                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return fileCount;
                        }

                        if (iteratorType != null)
                        {
                            IEnumerable<IScriptBaseObject> iteratorObjects;

                            if (thisLevelRootObject == null)
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName);
                            }
                            else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                            {
                                iteratorObjects = new[] { thisLevelRootObject };
                            }
                            else
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject);
                            }
                            if (iteratorObjects != null)
                            {
                                foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                                {
                                    if (progressHelper.IsCancellationPending())
                                    {
                                        progressHelper.Cancel();
                                        return fileCount;
                                    }

                                    CurrentRootObject = iteratorObject;

                                    string subFolderName = UpdateScriptName(iteratorObject, subFolder);

                                    if (folderNode != null)
                                    {
                                        folderNode.Text = subFolderName;
                                    }

                                    subFolderName = Path.Combine(folderName, subFolderName);

                                        //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                                    fileCount += GenerateAllFiles(progressHelper, project, subFolderName, subFolder, folderNode, CurrentRootObject, loader, controller);

                                }
                            }
                        }
                        else
                        {
                            throw new Exception(string.Format("The IteratorType could not be found: {0}. Are you missing an assembly?", subFolder.IteratorName));
                        }
                    }
                    else
                    {
                        // The folder doesn't have an iterator
                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return fileCount;
                        }
                        string subFolderName = UpdateScriptName(null, subFolder);

                        if (folderNode != null)
                        {
                            folderNode.Text = subFolderName;
                        }
                        subFolderName = Path.Combine(folderName, subFolderName);
                        //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                        fileCount += GenerateAllFiles(progressHelper, projectInfo, subFolderName, subFolder, folderNode, thisLevelRootObject, loader, controller);
                    }

                    //progressHelper.ReportProgress(20, new GenerateFilesProgress(fileCount));
                }

                //progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));

                foreach (IScript script in folder.Scripts)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return fileCount;
                    }
                    fileCount += CreateScriptFile(progressHelper, folderName, script, parentNode);
                }

                // progressHelper.ReportProgress(80, new GenerateFilesProgress(fileCount));

                foreach (IFile file in folder.Files)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return fileCount;
                    }
                    fileCount += CreateStaticFile(progressHelper, folderName, file, parentNode);
                }

                //progressHelper.ReportProgress(95, new GenerateFilesProgress(fileCount));

                //Application.DoEvents();
            }
            catch(Exception e)
            {
                progressHelper.ReportProgress(100, new GenerateFilesProgress(fileCount, e));
                return fileCount;
            }
            finally
            {
                if (parentNode is ProjectFileTree)
                {
                    ((ProjectFileTree) parentNode).TreeRestructuring = false;
                    parentNode.RaiseNodeChangedEvent(parentNode, true);
                }
            }
            progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));
            return fileCount;
        }
Exemplo n.º 15
0
        public void PopulateVirtualProperties(IScriptBaseObject obj)
        {
            Type type = obj.GetType();

            if (!_VirtualPropertiesForTypes.ContainsKey(type))
            {
                ArchAngelEditorAttribute[] atts = (ArchAngelEditorAttribute[])type.GetCustomAttributes(_ArchAngelEditorAttributeType, false);

                if (atts.Length > 0 && atts[0].VirtualPropertiesAllowed)
                {
                    _VirtualPropertiesForTypes.Add(type, GetVirtualProperties(type));
                }
                else
                {
                    _VirtualPropertiesForTypes.Add(type, null);
                }
            }
            List<IOption> options = _VirtualPropertiesForTypes[type];

            if (options == null)
            {
                return;
            }

            foreach (IOption opt in options)
            {
                object defaultValue = null;
                bool found = false;

                if (obj.Ex == null)
                {
                    obj.Ex = new List<IUserOption>();
                }
                foreach (IUserOption existingOption in obj.Ex)
                {
                    if (existingOption.Name == opt.VariableName)
                    {
                        defaultValue = existingOption.Value;
                        found = true;
                        break;
                    }
                }
                if (!found)
                {
                    obj.AddUserOption(new UserOption(opt.VariableName, opt.VarType, defaultValue));
                }
            }
        }
Exemplo n.º 16
0
 public abstract IEnumerable<IScriptBaseObject> GetAllObjectsOfType(string typeName, IScriptBaseObject rootObject);
Exemplo n.º 17
0
        private void AddIndividualOptions(Node node, List<IOption> options,
		                                  IScriptBaseObject iteratorObject)
        {
            // TODO: Due to the high amount of processing, the Properties node should only be
            // added when the parent node is expanded, not all at once.
            //bool optionsExist = false;

            //foreach (IOption option in options)
            //{
            //    if (ProjectHelper.MyCurrentProject.DisplayOptionToUser(option, iteratorObject))
            //    {
            //        optionsExist = true;
            //        break;
            //    }
            //}
            //if (optionsExist)
            if (options.Count > 0)
            {
                Node optionsNode = AddNode(node, "Properties", options, Images.Option, false, true);
                AddNode(optionsNode, "", "LAZY", Images.Unchecked, true, false);
            }
        }
Exemplo n.º 18
0
        public override IEnumerable<IScriptBaseObject> GetAllObjectsOfType(string typeName, IScriptBaseObject rootObject)
        {
            if (rootObject == MappingSet)
            {
                return GetAllObjectsOfType(typeName);
            }

            if (rootObject is ITable)
            {
                if (typeName == typeof(IColumn).FullName)
                    return ((ITable)rootObject).Columns.ToArray();
                if (typeName == typeof(IKey).FullName)
                    return ((ITable)rootObject).Keys.ToArray();
                if (typeName == typeof(IIndex).FullName)
                    return ((ITable)rootObject).Indexes.ToArray();
            }

            if (rootObject is Entity)
            {
                if (typeName == typeof(Property).FullName)
                    return ((Entity)rootObject).Properties.ToArray();
                if (typeName == typeof(EntityKey).FullName)
                    return new[] { ((Entity)rootObject).Key };
                if (typeName == typeof(Component).FullName)
                    return ((Entity)rootObject).Components.ToArray();
            }

            if (rootObject is IDatabase)
            {
                if (typeName == typeof(ITable).FullName)
                {
                    return ((IDatabase)rootObject).Tables.ToArray();
                }
            }

            throw new NotImplementedException("We do not currently handle " + rootObject.GetType().FullName + " types as root objects or " + typeName + " as objects to get types of.");
        }
Exemplo n.º 19
0
        /// <summary>
        /// Runs through a project and generates the files in it.
        /// </summary>
        /// <param name="progressHelper">The TaskProgressHelper to use to report progress and cancel the operation.</param>
        /// <param name="projectInfo">The Project we are generating files from.</param>
        /// <param name="folderName">The name of the root folder to generate into. Not the full path, just the relative path to the
        /// current folder.</param>
        /// <param name="folder"></param>
        /// <param name="parentNode"></param>
        /// <param name="thisLevelRootObject"></param>
        /// <returns></returns>
        /// <param name="loader"></param>
        /// <param name="controller"></param>
        public int GenerateAllFiles(ITaskProgressHelper <GenerateFilesProgress> progressHelper, IProjectHelper projectInfo, string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, ILoader loader, IController controller)
        {
            if (parentNode is ProjectFileTree)
            {
                ((ProjectFileTree)parentNode).TreeRestructuring = true;
                ((ProjectFileTree)parentNode).Clear();
            }
            int fileCount = 0;

            try
            {
                _Controller       = controller;
                _Loader           = loader;
                _ProgressHelper   = progressHelper;
                project           = projectInfo;
                CurrentRootObject = thisLevelRootObject;
                absoluteBasePath  = controller.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator);


                {
                    Version version         = new Version(loader.GetAssemblyVersionNumber());
                    Version expectedVersion = new Version(1, 1, 9, 49);
                    if (version < expectedVersion)
                    {
                        throw new OldVersionException("The template was compiled with an old version of ArchAngel, and cannot be used in this version of Workbench");
                    }
                }


                foreach (IFolder subFolder in folder.SubFolders)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return(fileCount);
                    }

                    ProjectFileTreeNode folderNode = null;

                    if (parentNode != null && subFolder.Name != "ROOT")
                    {
                        folderNode          = parentNode.AddChildNode(subFolder.Name);
                        folderNode.IsFolder = true;
                    }

                    if (!string.IsNullOrEmpty(subFolder.IteratorName))
                    {
                        // The folder has an iterator
                        ProviderInfo provider;
                        Type         iteratorType = project.GetTypeFromProviders(subFolder.IteratorName, out provider);

                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return(fileCount);
                        }

                        if (iteratorType != null)
                        {
                            IEnumerable <IScriptBaseObject> iteratorObjects;

                            if (thisLevelRootObject == null)
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName);
                            }
                            else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                            {
                                iteratorObjects = new[] { thisLevelRootObject };
                            }
                            else
                            {
                                iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject);
                            }
                            if (iteratorObjects != null)
                            {
                                foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                                {
                                    if (progressHelper.IsCancellationPending())
                                    {
                                        progressHelper.Cancel();
                                        return(fileCount);
                                    }

                                    CurrentRootObject = iteratorObject;

                                    string subFolderName = UpdateScriptName(iteratorObject, subFolder);

                                    if (folderNode != null)
                                    {
                                        folderNode.Text = subFolderName;
                                    }

                                    subFolderName = Path.Combine(folderName, subFolderName);

                                    //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                                    fileCount += GenerateAllFiles(progressHelper, project, subFolderName, subFolder, folderNode, CurrentRootObject, loader, controller);
                                }
                            }
                        }
                        else
                        {
                            throw new Exception(string.Format("The IteratorType could not be found: {0}. Are you missing an assembly?", subFolder.IteratorName));
                        }
                    }
                    else
                    {
                        // The folder doesn't have an iterator
                        if (progressHelper.IsCancellationPending())
                        {
                            progressHelper.Cancel();
                            return(fileCount);
                        }
                        string subFolderName = UpdateScriptName(null, subFolder);

                        if (folderNode != null)
                        {
                            folderNode.Text = subFolderName;
                        }
                        subFolderName = Path.Combine(folderName, subFolderName);
                        //Directory.CreateDirectory(Path.Combine(Controller.Instance.GetTempFilePathForComponent(ComponentKey.WorkbenchFileGenerator), subFolderName));

                        fileCount += GenerateAllFiles(progressHelper, projectInfo, subFolderName, subFolder, folderNode, thisLevelRootObject, loader, controller);
                    }

                    //progressHelper.ReportProgress(20, new GenerateFilesProgress(fileCount));
                }

                //progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));

                foreach (IScript script in folder.Scripts)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return(fileCount);
                    }
                    fileCount += CreateScriptFile(progressHelper, folderName, script, parentNode);
                }

                // progressHelper.ReportProgress(80, new GenerateFilesProgress(fileCount));

                foreach (IFile file in folder.Files)
                {
                    if (progressHelper.IsCancellationPending())
                    {
                        progressHelper.Cancel();
                        return(fileCount);
                    }
                    fileCount += CreateStaticFile(progressHelper, folderName, file, parentNode);
                }

                //progressHelper.ReportProgress(95, new GenerateFilesProgress(fileCount));

                //Application.DoEvents();
            }
            catch (Exception e)
            {
                progressHelper.ReportProgress(100, new GenerateFilesProgress(fileCount, e));
                return(fileCount);
            }
            finally
            {
                if (parentNode is ProjectFileTree)
                {
                    ((ProjectFileTree)parentNode).TreeRestructuring = false;
                    parentNode.RaiseNodeChangedEvent(parentNode, true);
                }
            }
            progressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));
            return(fileCount);
        }
Exemplo n.º 20
0
        public int GenerateAllFiles(string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, string basePath, bool isTopLevel)
        {
            if (isTopLevel)
            {
                SharedData.IsBusyGenerating = true;
                _Project.StartNewFileGenerationRun();

                // Reset the Template before the File name validation run.
                _Loader.CallTemplateFunction(TemplateHelper.ClearTemplateCacheFunctionName);

                // Run the pre generation template function.

                //var data = new PreGenerationData { OutputFolder = _Project.ProjectSettings.OutputPath };

                //foreach (var uo in _Project.Options.Where(o => o.IsVirtualProperty == false))
                //{
                //    var optionValue = _Loader.GetUserOption(uo.VariableName);
                //    data.UserOptions.Add(uo.VariableName, optionValue);
                //}

                //foreach (var provider in _Project.Providers)
                //{
                //    ArchAngel.Interfaces.ProviderInfo[] otherProviders = new ProviderInfo[_Project.Providers.Count];
                //    _Project.Providers.CopyTo(otherProviders);
                //    data.OtherProviderInfos = otherProviders.ToList();
                //    data.OtherProviderInfos.Remove(provider);
                //    provider.InitialisePreGeneration(data);
                //    //_Loader.CallPreGenerationInitialisationFunction(provider, data);
                //}

                IEnumerable <FilenameInfo> duplicates;
                DuplicateFileNameChecker   checker = new DuplicateFileNameChecker(this, _Project, _Project.ProjectSettings.OutputPath);
                bool validates = checker.ValidateFileNames(folderName, folder, thisLevelRootObject, out duplicates);

                if (validates == false)
                {
                    _ProgressHelper.ReportProgress(100, new GenerateFilesProgress(0, new DuplicateFilesException(duplicates)));
                    return(0);
                }

                // Reset the Template again before the real template run.
                object[] parameters = new object[0];
                _Loader.CallTemplateFunction(TemplateHelper.ClearTemplateCacheFunctionName, ref parameters);

                //foreach (var provider in _Project.Providers)
                //{
                //    _Loader.CallPreGenerationInitialisationFunction(provider, data);
                //}
            }

            if (parentNode == null && isTopLevel)
            {
                addToProjectFileTree = false;
            }

            if (_Loader == null)
            {
                return(0);
            }

            if (addToProjectFileTree && parentNode is ProjectFileTree)
            {
                ((ProjectFileTree)parentNode).TreeRestructuring = true;
                ((ProjectFileTree)parentNode).Clear();
            }
            int fileCount = 0;

            try
            {
                CurrentRootObject = thisLevelRootObject;
                absoluteBasePath  = basePath;

                {
                    Version version         = new Version(_Loader.GetAssemblyVersionNumber());
                    Version expectedVersion = new Version(1, 1, 9, 49);
                    if (version < expectedVersion)
                    {
                        throw new OldVersionException("The template was compiled with an old version of ArchAngel, and cannot be used in this version of Workbench");
                    }
                }

                foreach (IFolder subFolder in folder.SubFolders)
                {
                    if (_ProgressHelper.IsCancellationPending())
                    {
                        _ProgressHelper.Cancel();
                        return(fileCount);
                    }

                    ProjectFileTreeNode folderNode = null;

                    if (addToProjectFileTree && parentNode != null && subFolder.Name != "ROOT")
                    {
                        folderNode          = parentNode.AddChildNode(subFolder.Name);
                        folderNode.IsFolder = true;
                    }

                    if (!string.IsNullOrEmpty(subFolder.IteratorName))
                    {
                        // The folder has an iterator
                        ProviderInfo provider;
                        Type         iteratorType = _Project.GetIteratorTypeFromProviders(subFolder.IteratorName, out provider);

                        if (_ProgressHelper.IsCancellationPending())
                        {
                            _ProgressHelper.Cancel();
                            return(fileCount);
                        }

                        object[] iteratorObjects;

                        if (thisLevelRootObject == null)
                        {
                            iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName).ToArray();
                        }
                        else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                        {
                            iteratorObjects = new[] { thisLevelRootObject };
                        }
                        else
                        {
                            iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject).ToArray();
                        }

                        if (iteratorObjects != null)
                        {
                            foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                            {
                                if (_ProgressHelper.IsCancellationPending())
                                {
                                    _ProgressHelper.Cancel();
                                    return(fileCount);
                                }

                                CurrentRootObject = iteratorObject;

                                string subFolderName = UpdateScriptName(iteratorObject, subFolder);

                                if (folderNode != null)
                                {
                                    folderNode.Text = subFolderName;
                                }

                                subFolderName = Path.Combine(folderName, subFolderName);

                                fileCount += GenerateAllFiles(subFolderName, subFolder, folderNode, CurrentRootObject, basePath, false);
                            }
                        }
                    }
                    else
                    {
                        // The folder doesn't have an iterator
                        if (_ProgressHelper.IsCancellationPending())
                        {
                            _ProgressHelper.Cancel();
                            return(fileCount);
                        }
                        string subFolderName = UpdateScriptName(null, subFolder);

                        if (folderNode != null)
                        {
                            folderNode.Text = subFolderName;
                        }
                        subFolderName = Path.Combine(folderName, subFolderName);

                        fileCount += GenerateAllFiles(subFolderName, subFolder, folderNode, thisLevelRootObject, basePath, false);
                    }
                }

                foreach (IScript script in folder.Scripts)
                {
                    if (_ProgressHelper.IsCancellationPending())
                    {
                        _ProgressHelper.Cancel();
                        return(fileCount);
                    }
                    fileCount += CreateScriptFile(folderName, script, parentNode);
                }

                foreach (IFile file in folder.Files)
                {
                    if (_ProgressHelper.IsCancellationPending())
                    {
                        _ProgressHelper.Cancel();
                        return(fileCount);
                    }
                    fileCount += CreateStaticFile(folderName, file, parentNode);
                }
            }
            catch (Exception e)
            {
                _ProgressHelper.ReportProgress(100, new GenerateFilesProgress(fileCount, e));
                return(fileCount);
            }
            finally
            {
                if (addToProjectFileTree && parentNode is ProjectFileTree)
                {
                    ((ProjectFileTree)parentNode).TreeRestructuring = false;
                    parentNode.RaiseNodeChangedEvent(parentNode, true);
                }
            }

            if (isTopLevel)
            {
                SharedData.IsBusyGenerating = false;
            }

            _ProgressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));
            return(fileCount);
        }
Exemplo n.º 21
0
        public int GenerateAllFiles(string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, string basePath, bool isTopLevel)
        {
            if (isTopLevel)
            {
                SharedData.IsBusyGenerating = true;
                _Project.StartNewFileGenerationRun();

                // Reset the Template before the File name validation run.
                _Loader.CallTemplateFunction(TemplateHelper.ClearTemplateCacheFunctionName);

                // Run the pre generation template function.

                //var data = new PreGenerationData { OutputFolder = _Project.ProjectSettings.OutputPath };

                //foreach (var uo in _Project.Options.Where(o => o.IsVirtualProperty == false))
                //{
                //    var optionValue = _Loader.GetUserOption(uo.VariableName);
                //    data.UserOptions.Add(uo.VariableName, optionValue);
                //}

                //foreach (var provider in _Project.Providers)
                //{
                //    ArchAngel.Interfaces.ProviderInfo[] otherProviders = new ProviderInfo[_Project.Providers.Count];
                //    _Project.Providers.CopyTo(otherProviders);
                //    data.OtherProviderInfos = otherProviders.ToList();
                //    data.OtherProviderInfos.Remove(provider);
                //    provider.InitialisePreGeneration(data);
                //    //_Loader.CallPreGenerationInitialisationFunction(provider, data);
                //}

                IEnumerable<FilenameInfo> duplicates;
                DuplicateFileNameChecker checker = new DuplicateFileNameChecker(this, _Project, _Project.ProjectSettings.OutputPath);
                bool validates = checker.ValidateFileNames(folderName, folder, thisLevelRootObject, out duplicates);

                if (validates == false)
                {
                    _ProgressHelper.ReportProgress(100, new GenerateFilesProgress(0, new DuplicateFilesException(duplicates)));
                    return 0;
                }

                // Reset the Template again before the real template run.
                object[] parameters = new object[0];
                _Loader.CallTemplateFunction(TemplateHelper.ClearTemplateCacheFunctionName, ref parameters);

                //foreach (var provider in _Project.Providers)
                //{
                //    _Loader.CallPreGenerationInitialisationFunction(provider, data);
                //}
            }

            if (parentNode == null && isTopLevel)
                addToProjectFileTree = false;

            if (_Loader == null)
                return 0;

            if (addToProjectFileTree && parentNode is ProjectFileTree)
            {
                ((ProjectFileTree)parentNode).TreeRestructuring = true;
                ((ProjectFileTree)parentNode).Clear();
            }
            int fileCount = 0;

            try
            {
                CurrentRootObject = thisLevelRootObject;
                absoluteBasePath = basePath;

                {
                    Version version = new Version(_Loader.GetAssemblyVersionNumber());
                    Version expectedVersion = new Version(1, 1, 9, 49);
                    if (version < expectedVersion)
                    {
                        throw new OldVersionException("The template was compiled with an old version of ArchAngel, and cannot be used in this version of Workbench");
                    }
                }

                foreach (IFolder subFolder in folder.SubFolders)
                {
                    if (_ProgressHelper.IsCancellationPending())
                    {
                        _ProgressHelper.Cancel();
                        return fileCount;
                    }

                    ProjectFileTreeNode folderNode = null;

                    if (addToProjectFileTree && parentNode != null && subFolder.Name != "ROOT")
                    {
                        folderNode = parentNode.AddChildNode(subFolder.Name);
                        folderNode.IsFolder = true;
                    }

                    if (!string.IsNullOrEmpty(subFolder.IteratorName))
                    {
                        // The folder has an iterator
                        ProviderInfo provider;
                        Type iteratorType = _Project.GetIteratorTypeFromProviders(subFolder.IteratorName, out provider);

                        if (_ProgressHelper.IsCancellationPending())
                        {
                            _ProgressHelper.Cancel();
                            return fileCount;
                        }

                        object[] iteratorObjects;

                        if (thisLevelRootObject == null)
                        {
                            iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName).ToArray();
                        }
                        else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                        {
                            iteratorObjects = new[] { thisLevelRootObject };
                        }
                        else
                        {
                            iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject).ToArray();
                        }

                        if (iteratorObjects != null)
                        {
                            foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                            {
                                if (_ProgressHelper.IsCancellationPending())
                                {
                                    _ProgressHelper.Cancel();
                                    return fileCount;
                                }

                                CurrentRootObject = iteratorObject;

                                string subFolderName = UpdateScriptName(iteratorObject, subFolder);

                                if (folderNode != null)
                                {
                                    folderNode.Text = subFolderName;
                                }

                                subFolderName = Path.Combine(folderName, subFolderName);

                                fileCount += GenerateAllFiles(subFolderName, subFolder, folderNode, CurrentRootObject, basePath, false);

                            }
                        }
                    }
                    else
                    {
                        // The folder doesn't have an iterator
                        if (_ProgressHelper.IsCancellationPending())
                        {
                            _ProgressHelper.Cancel();
                            return fileCount;
                        }
                        string subFolderName = UpdateScriptName(null, subFolder);

                        if (folderNode != null)
                        {
                            folderNode.Text = subFolderName;
                        }
                        subFolderName = Path.Combine(folderName, subFolderName);

                        fileCount += GenerateAllFiles(subFolderName, subFolder, folderNode, thisLevelRootObject, basePath, false);
                    }
                }

                foreach (IScript script in folder.Scripts)
                {
                    if (_ProgressHelper.IsCancellationPending())
                    {
                        _ProgressHelper.Cancel();
                        return fileCount;
                    }
                    fileCount += CreateScriptFile(folderName, script, parentNode);
                }

                foreach (IFile file in folder.Files)
                {
                    if (_ProgressHelper.IsCancellationPending())
                    {
                        _ProgressHelper.Cancel();
                        return fileCount;
                    }
                    fileCount += CreateStaticFile(folderName, file, parentNode);
                }
            }
            catch (Exception e)
            {
                _ProgressHelper.ReportProgress(100, new GenerateFilesProgress(fileCount, e));
                return fileCount;
            }
            finally
            {
                if (addToProjectFileTree && parentNode is ProjectFileTree)
                {
                    ((ProjectFileTree)parentNode).TreeRestructuring = false;
                    parentNode.RaiseNodeChangedEvent(parentNode, true);
                }
            }

            if (isTopLevel)
                SharedData.IsBusyGenerating = false;

            _ProgressHelper.ReportProgress(50, new GenerateFilesProgress(fileCount));
            return fileCount;
        }
        public void ProcessScriptBase(IScriptBaseObject scriptBase, XmlNode node)
        {
            var virtualPropertiesNode = node.SelectSingleNode(VirtualPropertyDeserialiser.VirtualPropertiesNodeName);

            if (virtualPropertiesNode != null)
            {
                var deserialiser = new VirtualPropertyDeserialiser();
                scriptBase.Ex = deserialiser.DeserialiseVirtualProperties(virtualPropertiesNode);
            }
        }
Exemplo n.º 23
0
        private void ValidateFolderName(List <FilenameInfo> generatedPaths, IFolder subFolder, IScriptBaseObject thisLevelRootObject, string folderName)
        {
            if (!string.IsNullOrEmpty(subFolder.IteratorName))
            {
                // The folder has an iterator
                ProviderInfo provider;
                Type         iteratorType = _Project.GetIteratorTypeFromProviders(subFolder.IteratorName, out provider);

                object[] iteratorObjects;

                if (thisLevelRootObject == null)
                {
                    iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName).ToArray();
                }
                else if (iteratorType.IsInstanceOfType(thisLevelRootObject))
                {
                    iteratorObjects = new[] { thisLevelRootObject };
                }
                else
                {
                    iteratorObjects = provider.GetAllObjectsOfType(iteratorType.FullName, thisLevelRootObject).ToArray();
                }

                if (iteratorObjects != null)
                {
                    foreach (IScriptBaseObject iteratorObject in iteratorObjects)
                    {
                        string subFolderName = helper.UpdateScriptName(iteratorObject, subFolder);

                        subFolderName = Path.Combine(folderName, subFolderName);
                        log.InfoFormat("<Folder> {0}, {1}", subFolderName, iteratorObject);
                        generatedPaths.Add(new FilenameInfo(subFolderName, subFolder.Name, iteratorObject, FilenameInfo.FilenameTypes.Folder));
                        // Check Subfolders
                        ValidateFileNames(generatedPaths, subFolder, thisLevelRootObject, subFolderName);
                        //fileCount += GenerateAllFiles(subFolderName, subFolder, folderNode, iteratorObjects, basePath, false);
                    }
                }
            }
            else
            {
                string subFolderName = helper.UpdateScriptName(null, subFolder);
                subFolderName = Path.Combine(folderName, subFolderName);
                log.InfoFormat("<Folder> {0}, no iterator", subFolderName);

                generatedPaths.Add(new FilenameInfo(subFolderName, subFolder.Name, null, FilenameInfo.FilenameTypes.Folder));
                // check sub folders
                ValidateFileNames(generatedPaths, subFolder, thisLevelRootObject, subFolderName);
            }
        }
Exemplo n.º 24
0
 public abstract IEnumerable <IScriptBaseObject> GetAllObjectsOfType(string typeName, IScriptBaseObject rootObject);
Exemplo n.º 25
0
 /// <summary>
 /// Runs through a project and generates the files in it.
 /// </summary>
 /// <param name="folderName">The name of the root folder to generate into. Not the full path, just the relative path to the 
 /// current folder.</param>
 /// <param name="folder"></param>
 /// <param name="parentNode">If this is null, the files will just be generated, not </param>
 /// <param name="thisLevelRootObject"></param>
 /// <returns></returns>
 /// <param name="basePath">The path to which the files should be generated</param>
 public int GenerateAllFiles(string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, string basePath)
 {
     return GenerateAllFiles(folderName, folder, parentNode, thisLevelRootObject, basePath, true);
 }
Exemplo n.º 26
0
 /// <summary>
 /// Returns all objects of the specified type that are valid 'beneath' the supplied rootObject. This typically gets called
 /// when analysis and generation begins and the objects get passed to the template to create the output files.
 /// </summary>
 /// <param name="typeName">Fully qualified name of the type of objects to return.</param>
 /// <param name="rootObject">Object by which the results must get filtered.</param>
 /// <returns>An arra of objects of the specified type.</returns>
 public override IEnumerable <IScriptBaseObject> GetAllObjectsOfType(string typeName, IScriptBaseObject rootObject)
 {
     throw new NotImplementedException("We do not currently handle " + rootObject.GetType().FullName + " types as root objects or " + typeName + " as objects to get types of.");
 }
Exemplo n.º 27
0
        public override IEnumerable <IScriptBaseObject> GetAllObjectsOfType(string typeName, IScriptBaseObject rootObject)
        {
            if (rootObject == MappingSet)
            {
                return(GetAllObjectsOfType(typeName));
            }

            if (rootObject is ITable)
            {
                if (typeName == typeof(IColumn).FullName)
                {
                    return(((ITable)rootObject).Columns.ToArray());
                }
                if (typeName == typeof(IKey).FullName)
                {
                    return(((ITable)rootObject).Keys.ToArray());
                }
                if (typeName == typeof(IIndex).FullName)
                {
                    return(((ITable)rootObject).Indexes.ToArray());
                }
            }

            if (rootObject is Entity)
            {
                if (typeName == typeof(Property).FullName)
                {
                    return(((Entity)rootObject).Properties.ToArray());
                }
                if (typeName == typeof(EntityKey).FullName)
                {
                    return new[] { ((Entity)rootObject).Key }
                }
                ;
                if (typeName == typeof(Component).FullName)
                {
                    return(((Entity)rootObject).Components.ToArray());
                }
            }

            if (rootObject is IDatabase)
            {
                if (typeName == typeof(ITable).FullName)
                {
                    return(((IDatabase)rootObject).Tables.ToArray());
                }
            }

            throw new NotImplementedException("We do not currently handle " + rootObject.GetType().FullName + " types as root objects or " + typeName + " as objects to get types of.");
        }
Exemplo n.º 28
0
 /// <summary>
 /// Returns all objects of the specified type that are valid 'beneath' the supplied rootObject. This typically gets called
 /// when analysis and generation begins and the objects get passed to the template to create the output files.
 /// </summary>
 /// <param name="typeName">Fully qualified name of the type of objects to return.</param>
 /// <param name="rootObject">Object by which the results must get filtered.</param>
 /// <returns>An arra of objects of the specified type.</returns>
 public override IEnumerable<IScriptBaseObject> GetAllObjectsOfType(string typeName, IScriptBaseObject rootObject)
 {
     throw new NotImplementedException("We do not currently handle " + rootObject.GetType().FullName + " types as root objects or " + typeName + " as objects to get types of.");
 }
Exemplo n.º 29
0
        private void ValidateFileNames(List <FilenameInfo> generatedPaths, IFolder folder, IScriptBaseObject thisLevelRootObject, string folderName)
        {
            foreach (IFolder subFolder in folder.SubFolders)
            {
                ValidateFolderName(generatedPaths, subFolder, thisLevelRootObject, folderName);
            }

            foreach (IScript script in folder.Scripts)
            {
                // Check script filename
                ValidateScriptName(generatedPaths, script, folderName);
            }

            foreach (IFile file in folder.Files)
            {
                // Check static filename
                ValidateStaticFileName(generatedPaths, file, folderName);
                //fileCount += CreateStaticFile(folderName, file, parentNode);
            }
        }
Exemplo n.º 30
0
 /// <summary>
 /// Runs through a project and generates the files in it.
 /// </summary>
 /// <param name="folderName">The name of the root folder to generate into. Not the full path, just the relative path to the
 /// current folder.</param>
 /// <param name="folder"></param>
 /// <param name="parentNode">If this is null, the files will just be generated, not </param>
 /// <param name="thisLevelRootObject"></param>
 /// <returns></returns>
 /// <param name="basePath">The path to which the files should be generated</param>
 public int GenerateAllFiles(string folderName, IFolder folder, ProjectFileTreeNode parentNode, IScriptBaseObject thisLevelRootObject, string basePath)
 {
     return(GenerateAllFiles(folderName, folder, parentNode, thisLevelRootObject, basePath, true));
 }