コード例 #1
0
        protected override void SetElement(VisualElement element)
        {
            TaskElement taskElement = element as TaskElement;

            _taskElement = taskElement;
            base.SetElement(element);
        }
コード例 #2
0
        public void DescriptionIsCorrect()
        {
            var expected = Guid.NewGuid().ToString();
            var sut      = new TaskElement(arbitraryName, expected, arbitraryValue);

            Assert.Equal(expected, sut.Description);
        }
コード例 #3
0
        public AddWorkLog(TaskElement taskElement)
        {
            InitializeComponent();

            try
            {
                user             = MainController.Instance.User;
                this.taskElement = taskElement;
                task             = taskDAO.Read(taskElement.taskID);

                date.Text = DateTime.Now.Date.ToString();

                if (!task.Completed)
                {
                    taskList = (StackPanel)taskElement.Parent;
                    StackPanel lastStackPanel = (StackPanel)((StackPanel)taskElement.Parent).Children[taskList.Children.Count - 1];
                    completedTaskList = ((StackPanel)lastStackPanel.Children[lastStackPanel.Children.Count - 1]);
                }
                else
                {
                    completedTaskList = (StackPanel)taskElement.Parent;
                    taskList          = ((StackPanel)((StackPanel)completedTaskList.Parent).Parent);
                }

                if (task.Completed)
                {
                    CompleteTask.Content    = "Start Opgave";
                    CompleteTask.Background = new Utilities().GetColor("#FF2196F3");
                }
            }
            catch (Exception exception)
            {
                utilities.GetNotifier().ShowError(utilities.HandleException(exception));
            }
        }
コード例 #4
0
        public ViewTask(TaskElement taskElement)
        {
            InitializeComponent();
            try
            {
                this.taskElement = taskElement;
                task             = new TaskDAO().Read(taskElement.taskID);


                worklogs = workLogDAO.GetList(task.Id);

                foreach (WorkLog workLog in worklogs)
                {
                    workLogsItems.Add(new WorkLogItems()
                    {
                        Work = workLog.Work, Name = workLog.AssignedUser.Firstname + " " + workLog.AssignedUser.Lastname, Date = workLog.CreatedAt.Day.ToString() + "-" + workLog.CreatedAt.Month.ToString() + "-" + workLog.CreatedAt.Year.ToString()
                    });
                }

                workloads.ItemsSource = workLogsItems;
            }
            catch (Exception exception)
            {
                utilities.GetNotifier().ShowError(utilities.HandleException(exception));
            }
        }
コード例 #5
0
        public TaskConfigurationModel CreateModel(TaskElement element)
        {
            var item = new TaskConfigurationModel
            {
                TaskId      = element.Id,
                TaskName    = element.Name,
                DisplayName = element.DisplayName,
                ClientId    = element.ClientId ?? 1,
            };

            if (!string.IsNullOrEmpty(element.LogName))
            {
                item.LogName = element.LogName;
            }

            if (element.HasMetaData)
            {
                foreach (var metaItem in element.MetaData)
                {
                    item.AddMetaData(metaItem.Key, metaItem.Value);
                }
            }

            if (element.IsContainer)
            {
                foreach (var taskElement in element.SubTasks)
                {
                    var child = CreateModel(taskElement);
                    item.AddSubTask(child);
                }
            }

            return(item);
        }
コード例 #6
0
        public void NameIsCorrect()
        {
            var expected = Guid.NewGuid().ToString();
            var sut      = new TaskElement(expected, arbitraryValue);

            Assert.Equal(expected, sut.Name);
        }
コード例 #7
0
    public void SimulateTask(IAI _enemy, float _time, int index)
    {
        GameObject _go    = new GameObject();
        DummyEnemy _dummy = _go.AddComponent <DummyEnemy>();

        _dummy.Startup(_enemy, _time);
        for (int i = index; i < _taskElements.Count; i++)
        {
            TaskElement _taskElement = _taskElements[i];
            switch (_taskElement.Action)
            {
            case AIActions.MoveFoward:
                AAMoveForward.SimulateAction(_dummy, _taskElement.GetTarget(), i);
                break;

            case AIActions.LookAt:
                AARotate.SimulateAction(_dummy, _taskElement.GetTarget(), i);
                break;

            case AIActions.Wait:
                AAWait.SimulateAction(_dummy, _taskElement.Value, i);
                break;

            case AIActions.MoveTo:
                AAMoveTo.SimulateAction(_dummy, _taskElement.GetTarget(), i);
                break;
            }
        }
        //_enemy.SetAction(new TaskAction(ActionType.UnsetTask, this, _dummy.Time));
        GameObject.Destroy(_go);
    }
コード例 #8
0
 private void cloneTaskElement(TaskElement taskElement)
 {
     id               = taskElement.id;
     title            = taskElement.title;
     taskDifficulties = taskElement.taskDifficulties;
     reward           = taskElement.reward;
     story            = taskElement.story;
 }
コード例 #9
0
        public void AcceptCallsVisitor()
        {
            var sut         = new TaskElement(arbitraryName, arbitraryValue);
            var visitorStub = new Mock <ITaskVisitor>();

            sut.Accept(visitorStub.Object);

            visitorStub.Verify(v => v.Visit(sut));
        }
コード例 #10
0
 public void RemoveTask(TaskElement task)
 {
     task.Minimize();
     task.SetOpacity(0, () =>
     {
         tasks.Remove(task);
         Destroy(task.gameObject);
     });
 }
コード例 #11
0
    public void FinishTask(TaskElement task, TaskElement.TaskState state, Action callback)
    {
        audioSource.clip = state == TaskElement.TaskState.Success ? success : error;
        audioSource.Play();

        task.SetIcon(state);
        task.SetOpacity();
        task.Minimize(callback);
    }
コード例 #12
0
        public override void ProcessActivity(Activity activity, IBaseElement baseElement)
        {
            TaskElement taskElement = GetType <TaskElement>(baseElement);

            activity.Name = taskElement.Name;
            Implementation implementation = new Implementation();
            Task           task           = new Task();

            implementation.Item = task;
            activity.Item       = implementation;
        }
コード例 #13
0
        public void addTask(Element elem)
        {
            var element = new TaskElement(elem.Type, elem.Id);

            element.setPosition(x, (int)positionTask + 10);
            FileElements.Add(element);
            element.Generate();
            element.Display(this.canvas);
            x += (int)element.width + 15;
            count++;
        }
コード例 #14
0
        public TaskElement CreateTask(XElement element)
        {
            var item = new TaskElement
            {
                Id          = (string)element.Attribute("id"),
                Name        = (string)element.Attribute("id"),
                DisplayName = (string)element.Attribute("displayName"),
                ClientId    = (int?)element.Attribute("clientId"),
            };

            if (element.Attribute("name") != null)
            {
                item.Name = (string)element.Attribute("name");
            }

            if (element.Attribute("logName") != null)
            {
                item.LogName = (string)element.Attribute("logName");
            }

            if (element.HasElements && element.Element("Meta") != null)
            {
                CreateTaskMetaData(item, element);
            }

            if (item.ClientId.HasValue)
            {
                item.Id = string.Format("client.{0}.{1}", item.ClientId, item.Id);
                return(item);
            }

            if (!metaData.HasEntries)
            {
                return(item);
            }

            string metaClientId;

            if (!metaData.TryGetEntry("ClientId", out metaClientId))
            {
                return(item);
            }

            int clientId;

            if (int.TryParse(metaClientId, out clientId))
            {
                item.ClientId = clientId;
            }

            return(item);
        }
コード例 #15
0
ファイル: TaskService.cs プロジェクト: hmtylmz/ossdemo
        public async Task <TaskElementDto> AddAsync(TaskElementDto taskElementDto)
        {
            var taskElement = new TaskElement();

            _mapper.Map(taskElementDto, taskElement);
            taskElement.LastUpdatedTime = DateTime.UtcNow;
            var taskElementDtoResult = _mapper.Map <TaskElementDto>(taskElement);
            await _taskTransportRepository.Send(SocketConstants.TaskAdd, taskElementDtoResult);

            await _taskRepository.InsertAsync(taskElement);

            return(taskElementDtoResult);
        }
コード例 #16
0
        void PreTask()
        {
            foreach (BricRoboTask br in _taskList)
            {
                TaskElement ele = new TaskElement(br);
                tasks.Add(ele);
            }

            masterTimer = new MicroTimer(oneMsTick);
            masterTimer.MicroTimerElapsed += new MicroTimer.MicroTimerElapsedEventHandler(
                delegate {
                Tick();
            });
        }
コード例 #17
0
    public TaskElement Add(string text, TaskElement.TaskState state = TaskElement.TaskState.Active)
    {
        audioSource.clip = added;
        audioSource.Play();
        GameObject  instance = Instantiate(template.gameObject, body.transform);
        TaskElement element  = instance.GetComponent <TaskElement>();

        element.SetText(text);
        element.SetIcon(state);

        tasks.Add(element);

        return(element);
    }
コード例 #18
0
        public void CreateTaskMetaData(TaskElement item, XElement element)
        {
            var metaElement = element.Element("Meta");

            if (metaElement == null)
            {
                return;
            }

            var entries = metaElement.Elements("Entry")
                          .Where(x => x.Attribute("key") != null && x.Attribute("value") != null);

            foreach (var entry in entries)
            {
                item.AddMetaData((string)entry.Attribute("key"), (string)entry.Attribute("value"));
            }
        }
コード例 #19
0
        public void ValueIsCorrect(decimal value1, decimal value2, decimal value3)
        {
            var expected = value1 + value2 + value3;
            var e1       = new TaskElement(arbitraryName, value1);
            var e2       = new TaskElement(arbitraryName, value2);
            var e3       = new TaskElement(arbitraryName, value3);
            var c1       = new TaskComposite(arbitraryName, components: new List <ITaskComponent> {
                e2, e3
            });
            var rootComposite = new TaskComposite(arbitraryName, components: new List <ITaskComponent> {
                e1, c1
            });
            var sut = new ValueTaskVisitor();

            rootComposite.Accept(sut);

            Assert.Equal(expected, sut.Value);
        }
コード例 #20
0
        public EditTask(TaskElement taskElement)
        {
            this.taskElement = taskElement;
            task             = taskDAO.Read(taskElement.taskID);
            InitializeComponent();

            title.Text       = task.Name;
            description.Text = task.Description;
            deadline.Text    = task.DueDate.ToString("dd-MM-yyyy");
            estimation.Text  = task.EstimatedTime.ToString();
            priority.Text    = task.Priority.ToString();

            try
            {
                StackPanel projectUsers = (StackPanel)FindName("ProjectUsers");

                section = new SectionDAO().Read(task.SectionID);

                List <User> users = new ProjectDAO().GetProjectUsers(section.ProjectId);

                foreach (User user in users)
                {
                    UserAvatar userAvatar = new UserAvatar(this, user.Id);

                    userAvatar.Uid = user.Id.ToString();
                    userAvatar.UserImage.ImageSource = new BitmapImage(new Uri(user.Picture));
                    userAvatar.ToolTip = user.Firstname + " " + user.Lastname;

                    if (task.AssignedUser != null)
                    {
                        if (task.AssignedUser.Id == user.Id)
                        {
                            AssignUser(userAvatar, user.Id);
                        }
                    }

                    projectUsers.Children.Add(userAvatar);
                }
            }
            catch (Exception exception)
            {
                utilities.GetNotifier().ShowError(utilities.HandleException(exception));
            }
        }
コード例 #21
0
        private void ButtnCreateTask_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (ValidateInput())
                {
                    string   taskName        = title.Text;
                    string   taskDescription = description.Text;
                    double   taskEstimation  = Double.Parse(estimation.Text);
                    int      taskPriority    = int.Parse(priority.Text);
                    DateTime taskDeadline    = DateTime.Parse(deadline.Text);

                    User assignedUser = assignedUserID != 0 ? new UserDAO().Read(assignedUserID) : null;

                    Task task = new Task(null, null, assignedUser, sectionID, taskName, taskDescription, taskEstimation, taskPriority, taskDeadline);

                    int taskID = taskDAO.CreateTask(task);

                    if (taskDAO.Read(taskID) != null)
                    {
                        TaskElement taskElement = new TaskElement(taskID);

                        taskElement.TaskID.Name = "Task" + taskID;

                        taskElement.title.Text       = taskName;
                        taskElement.description.Text = taskDescription;

                        if (assignedUser != null)
                        {
                            taskElement.avatar.ImageSource = new BitmapImage(new Uri(assignedUser.Picture));
                            taskElement.UserButton.ToolTip = assignedUser.Firstname + " " + assignedUser.Lastname;
                        }

                        currentSection.Children.Insert(currentSection.Children.Count - 1, taskElement);
                        MainController.Instance.Dashboard.UpdatePage();
                        this.Close();
                    }
                }
            }
            catch (Exception exception)
            {
                utilities.GetNotifier().ShowError(utilities.HandleException(exception));
            }
        }
コード例 #22
0
ファイル: ElementControl.cs プロジェクト: PxAndy/Autotask
        public void SetElement(TaskElement element)
        {
            _element = element;

            for (int i = 0; i < comboBoxTag.Items.Count; i++)
            {
                if (comboBoxTag.Items[i].ToString() == element.TagName)
                {
                    comboBoxTag.SelectedIndex = i;
                    break;
                }
            }
            textBoxCss.Text     = element.CssSelector;
            textBoxId.Text      = element.Id;
            textBoxName.Text    = element.Name;
            textBoxClass.Text   = element.Class;
            textBoxType.Text    = element.Type;
            textBoxContent.Text = element.Content;
        }
コード例 #23
0
 public void Initialize(string path, bool force = false)
 {
     try {
         if (force)
         {
             TaskList = new List <Task>();
         }
         XmlDocument XMLDoc = new XmlDocument();
         XMLDoc.Load(path);
         Name = System.IO.Path.GetFileNameWithoutExtension(path);
         foreach (XmlNode TaskElement in XMLDoc.DocumentElement.SelectNodes("task"))
         {
             XmlNode ID                  = TaskElement.SelectSingleNode("id"),
                          Name           = TaskElement.SelectSingleNode("name"),
                          Source         = TaskElement.SelectSingleNode("source"),
                          Destination    = TaskElement.SelectSingleNode("destination"),
                          ExtensionRegex = TaskElement.SelectSingleNode("extensionRegex"),
                          NameRegex      = TaskElement.SelectSingleNode("nameRegex"),
                          AttributeMatch = TaskElement.SelectSingleNode("attributeMatch"),
                          NameFormat     = TaskElement.SelectSingleNode("format"),
                          Perform        = TaskElement.SelectSingleNode("perform"),
                          FileTypeIndex  = TaskElement.SelectSingleNode("fileType"),
                          Enabled        = TaskElement.SelectSingleNode("enabled");
             if (ID != null && Source != null && Destination != null && ExtensionRegex != null && NameRegex != null && NameFormat != null && FileTypeIndex != null)
             {
                 TaskList.Add(new Task(Convert.ToInt32(ID.InnerText),
                                       Name != null ? Name.InnerText : "Unknown",
                                       Source.InnerText,
                                       Destination.InnerText,
                                       ExtensionRegex.InnerText,
                                       NameRegex.InnerText,
                                       AttributeMatch.InnerText,
                                       NameFormat.InnerText,
                                       Perform != null ? Perform.InnerText : "Copy",
                                       Convert.ToInt16(FileTypeIndex.InnerText),
                                       Enabled != null ? Convert.ToBoolean(Enabled.InnerText) : true));
             }
         }
     } catch (Exception ex) {
         Log.Write("TaskCollection::ReadGroup() Error -> Failed To Read TaskCollection XML Path - " + path + " [" + ex.Message + "]");
     }
 }
コード例 #24
0
    private void FetchConfigBoardWithTaskElement(int currentTE_ID)
    {
        TaskElement taskElement = taskElements[currentTE_ID];

        storyText.text = taskElement.story;

        for (int id = 0; id < taskElement.taskDifficulties.Count; id++)
        {
            string dif    = taskElement.taskDifficulties[id];
            int    reward = taskElement.reward[id];

            GameObject dS = UIHelper.PushAndGetPrefabToParent(diffPrefab, diffList.transform, 30);
            dS.GetComponent <Button>().onClick.AddListener(delegate { DiffSelect(currentTE_ID, id); });
            dS.transform.GetChild(0).GetComponent <Text>().text             = dif;
            dS.transform.GetChild(1).GetChild(0).GetComponent <Text>().text = reward.ToString();
            dS.transform.GetChild(1).GetChild(1).GetComponent <Text>().text = difString[id];

            StartCoroutine(ContentSizeUpdate(dS, dS.transform.GetChild(0).GetComponent <Text>().gameObject));
        }
    }
コード例 #25
0
ファイル: TaskSelectCore.cs プロジェクト: BlenDMinh/App-WECO
    void Start()
    {
        //tempo read
        string             json   = (Resources.Load("taskSelect") as TextAsset).ToString();
        List <TaskElement> teList =
            TaskSelectDataManager.Instance.taskElements = JsonConvert.DeserializeObject <List <TaskElement> >(json);

        int i = 0;

        foreach (TaskElement te in teList)
        {
            GameObject taskElementObj = UIHelper.PushAndGetPrefabToParent(taskElementPrefab, taskBoard.transform, 0); // offset is 0 because Canvas Group is doing everything for us OwO

            TaskElement taskElement = taskElementObj.GetComponent <TaskElement>();
            te.id = i++;
            taskElement.UpdateTaskElement_ALL(te);
            // Init selection (default -1 for this TE)
            TaskSelectDataManager.Instance.selection.Add(-1);
        }
    }
コード例 #26
0
 public void DoTaskElement(TaskElement element)
 {
     Debug.WriteLine("Current taskelement:");
     Debug.WriteLine("ID: " + element.Id + "\n Name:" + element.Name + "\n Description: " + element.Description);
     if (element.TypeId != null)
     {
         Models.Type type = typeController.GetTypeAsync(element.TypeId).Result;
         Debug.WriteLine("Required type: " + type.Name + "\n" + type.Description);
         Debug.WriteLine("+++++++++++++");
         List <ContainerPartContent> cpcList = containerPartContentController.GetContainerPartContentAsync(type.Id).Result;
         if (cpcList != null)
         {
             var           cpc           = cpcList.FirstOrDefault();
             ContainerPart containerPart = containerPartController.GetContainerPartAsync(cpc.ContainerPartId).Result;
             Debug.WriteLine("There is/are " + cpc.Amount + " in the " + containerPart.Name + " containerpart.");
         }
         else
         {
             throw new Exception("There isn't containerpart which contains the given type.");
         }
     }
 }
コード例 #27
0
        public TaskElement CreateTask(TaskElement parent, XElement element)
        {
            var item = new TaskElement
            {
                Id          = (string)element.Attribute("id"),
                Name        = (string)element.Attribute("id"),
                DisplayName = (string)element.Attribute("displayName"),
                ClientId    = parent.ClientId,
            };

            if (element.Attribute("name") != null)
            {
                item.Name = (string)element.Attribute("name");
            }

            if (element.Attribute("logName") != null)
            {
                item.LogName = (string)element.Attribute("logName");
            }
            else
            {
                item.LogName = parent.LogName;
            }

            if (element.HasElements && element.Element("Meta") != null)
            {
                CreateTaskMetaData(item, element);
            }

            if (item.ClientId.HasValue)
            {
                item.Id = string.Format("client.{0}.{1}", item.ClientId, item.Id);
            }

            return(item);
        }
コード例 #28
0
        /// <summary>
        /// Generate HTML documentation for all the tasks
        /// </summary>
        /// <param name="NameToTask">Map of task name to implementation</param>
        /// <param name="OutputFile">Output file</param>
        static void GenerateDocumentation(Dictionary <string, ScriptTask> NameToTask, FileReference OutputFile)
        {
            // Find all the assemblies containing tasks
            Assembly[] TaskAssemblies = NameToTask.Values.Select(x => x.ParametersClass.Assembly).Distinct().ToArray();

            // Read documentation for each of them
            Dictionary <string, XmlElement> MemberNameToElement = new Dictionary <string, XmlElement>();

            foreach (Assembly TaskAssembly in TaskAssemblies)
            {
                string XmlFileName = Path.ChangeExtension(TaskAssembly.Location, ".xml");
                if (File.Exists(XmlFileName))
                {
                    // Read the document
                    XmlDocument Document = new XmlDocument();
                    Document.Load(XmlFileName);

                    // Parse all the members, and add them to the map
                    foreach (XmlElement Element in Document.SelectNodes("/doc/members/member"))
                    {
                        string Name = Element.GetAttribute("name");
                        MemberNameToElement.Add(Name, Element);
                    }
                }
            }

            // Create the output directory
            if (FileReference.Exists(OutputFile))
            {
                FileReference.MakeWriteable(OutputFile);
            }
            else
            {
                DirectoryReference.CreateDirectory(OutputFile.Directory);
            }

            // Write the output file
            LogInformation("Writing {0}...", OutputFile);
            using (StreamWriter Writer = new StreamWriter(OutputFile.FullName))
            {
                Writer.WriteLine("<html>");
                Writer.WriteLine("  <head>");
                Writer.WriteLine("    <style>");
                Writer.WriteLine("      table { border-collapse: collapse }");
                Writer.WriteLine("      table, th, td { border: 1px solid black; }");
                Writer.WriteLine("    </style>");
                Writer.WriteLine("  </head>");
                Writer.WriteLine("  <body>");
                Writer.WriteLine("    <h1>BuildGraph Tasks</h1>");
                foreach (string TaskName in NameToTask.Keys.OrderBy(x => x))
                {
                    // Get the task object
                    ScriptTask Task = NameToTask[TaskName];

                    // Get the documentation for this task
                    XmlElement TaskElement;
                    if (MemberNameToElement.TryGetValue("T:" + Task.TaskClass.FullName, out TaskElement))
                    {
                        // Write the task heading
                        Writer.WriteLine("    <h2>{0}</h2>", TaskName);
                        Writer.WriteLine("    <p>{0}</p>", TaskElement.SelectSingleNode("summary").InnerXml.Trim());

                        // Start the parameter table
                        Writer.WriteLine("    <table>");
                        Writer.WriteLine("      <tr>");
                        Writer.WriteLine("        <th>Attribute</th>");
                        Writer.WriteLine("        <th>Type</th>");
                        Writer.WriteLine("        <th>Usage</th>");
                        Writer.WriteLine("        <th>Description</th>");
                        Writer.WriteLine("      </tr>");

                        // Document the parameters
                        foreach (string ParameterName in Task.NameToParameter.Keys)
                        {
                            // Get the parameter data
                            ScriptTaskParameter Parameter = Task.NameToParameter[ParameterName];

                            // Get the documentation for this parameter
                            XmlElement ParameterElement;
                            if (MemberNameToElement.TryGetValue("F:" + Parameter.FieldInfo.DeclaringType.FullName + "." + Parameter.Name, out ParameterElement))
                            {
                                string TypeName = Parameter.FieldInfo.FieldType.Name;
                                if (Parameter.ValidationType != TaskParameterValidationType.Default)
                                {
                                    StringBuilder NewTypeName = new StringBuilder(Parameter.ValidationType.ToString());
                                    for (int Idx = 1; Idx < NewTypeName.Length; Idx++)
                                    {
                                        if (Char.IsLower(NewTypeName[Idx - 1]) && Char.IsUpper(NewTypeName[Idx]))
                                        {
                                            NewTypeName.Insert(Idx, ' ');
                                        }
                                    }
                                    TypeName = NewTypeName.ToString();
                                }

                                Writer.WriteLine("      <tr>");
                                Writer.WriteLine("         <td>{0}</td>", ParameterName);
                                Writer.WriteLine("         <td>{0}</td>", TypeName);
                                Writer.WriteLine("         <td>{0}</td>", Parameter.bOptional? "Optional" : "Required");
                                Writer.WriteLine("         <td>{0}</td>", ParameterElement.SelectSingleNode("summary").InnerXml.Trim());
                                Writer.WriteLine("      </tr>");
                            }
                        }

                        // Always include the "If" attribute
                        Writer.WriteLine("     <tr>");
                        Writer.WriteLine("       <td>If</td>");
                        Writer.WriteLine("       <td>Condition</td>");
                        Writer.WriteLine("       <td>Optional</td>");
                        Writer.WriteLine("       <td>Whether to execute this task. It is ignored if this condition evaluates to false.</td>");
                        Writer.WriteLine("     </tr>");

                        // Close the table
                        Writer.WriteLine("    <table>");
                    }
                }
                Writer.WriteLine("  </body>");
                Writer.WriteLine("</html>");
            }
        }
コード例 #29
0
        /// <summary>
        /// Generate HTML documentation for all the tasks
        /// </summary>
        /// <param name="NameToTask">Map of task name to implementation</param>
        /// <param name="OutputFile">Output file</param>
        static void GenerateDocumentation(Dictionary <string, ScriptTask> NameToTask, FileReference OutputFile)
        {
            // Find all the assemblies containing tasks
            Assembly[] TaskAssemblies = NameToTask.Values.Select(x => x.ParametersClass.Assembly).Distinct().ToArray();

            // Read documentation for each of them
            Dictionary <string, XmlElement> MemberNameToElement = new Dictionary <string, XmlElement>();

            foreach (Assembly TaskAssembly in TaskAssemblies)
            {
                string XmlFileName = Path.ChangeExtension(TaskAssembly.Location, ".xml");
                if (File.Exists(XmlFileName))
                {
                    // Read the document
                    XmlDocument Document = new XmlDocument();
                    Document.Load(XmlFileName);

                    // Parse all the members, and add them to the map
                    foreach (XmlElement Element in Document.SelectNodes("/doc/members/member"))
                    {
                        string Name = Element.GetAttribute("name");
                        MemberNameToElement.Add(Name, Element);
                    }
                }
            }

            // Create the output directory
            DirectoryReference.CreateDirectory(OutputFile.Directory);
            FileReference.MakeWriteable(OutputFile);
            Log("Writing {0}...", OutputFile);

            // Parse the engine version
            BuildVersion Version;

            if (!BuildVersion.TryRead(BuildVersion.GetDefaultFileName(), out Version))
            {
                throw new AutomationException("Couldn't read Build.version");
            }

            // Write the output file
            using (StreamWriter Writer = new StreamWriter(OutputFile.FullName))
            {
                Writer.WriteLine("Availability: NoPublish");
                Writer.WriteLine("Title: BuildGraph Predefined Tasks");
                Writer.WriteLine("Crumbs: %ROOT%, Programming, Programming/Development, Programming/Development/BuildGraph, Programming/Development/BuildGraph/BuildGraphScriptTasks");
                Writer.WriteLine("Description: This is a procedurally generated markdown page.");
                Writer.WriteLine("version: {0}.{1}", Version.MajorVersion, Version.MinorVersion);
                Writer.WriteLine("parent:Programming/Development/BuildGraph/BuildGraphScriptTasks");
                Writer.WriteLine();
                foreach (string TaskName in NameToTask.Keys.OrderBy(x => x))
                {
                    // Get the task object
                    ScriptTask Task = NameToTask[TaskName];

                    // Get the documentation for this task
                    XmlElement TaskElement;
                    if (MemberNameToElement.TryGetValue("T:" + Task.TaskClass.FullName, out TaskElement))
                    {
                        // Write the task heading
                        Writer.WriteLine("### {0}", TaskName);
                        Writer.WriteLine();
                        Writer.WriteLine(ConvertToMarkdown(TaskElement.SelectSingleNode("summary")));
                        Writer.WriteLine();

                        // Document the parameters
                        List <string[]> Rows = new List <string[]>();
                        foreach (string ParameterName in Task.NameToParameter.Keys)
                        {
                            // Get the parameter data
                            ScriptTaskParameter Parameter = Task.NameToParameter[ParameterName];

                            // Get the documentation for this parameter
                            XmlElement ParameterElement;
                            if (MemberNameToElement.TryGetValue("F:" + Parameter.FieldInfo.DeclaringType.FullName + "." + Parameter.Name, out ParameterElement))
                            {
                                string TypeName = Parameter.FieldInfo.FieldType.Name;
                                if (Parameter.ValidationType != TaskParameterValidationType.Default)
                                {
                                    StringBuilder NewTypeName = new StringBuilder(Parameter.ValidationType.ToString());
                                    for (int Idx = 1; Idx < NewTypeName.Length; Idx++)
                                    {
                                        if (Char.IsLower(NewTypeName[Idx - 1]) && Char.IsUpper(NewTypeName[Idx]))
                                        {
                                            NewTypeName.Insert(Idx, ' ');
                                        }
                                    }
                                    TypeName = NewTypeName.ToString();
                                }

                                string[] Columns = new string[4];
                                Columns[0] = ParameterName;
                                Columns[1] = TypeName;
                                Columns[2] = Parameter.bOptional? "Optional" : "Required";
                                Columns[3] = ConvertToMarkdown(ParameterElement.SelectSingleNode("summary"));
                                Rows.Add(Columns);
                            }
                        }

                        // Always include the "If" attribute
                        string[] IfColumns = new string[4];
                        IfColumns[0] = "If";
                        IfColumns[1] = "Condition";
                        IfColumns[2] = "Optional";
                        IfColumns[3] = "Whether to execute this task. It is ignored if this condition evaluates to false.";
                        Rows.Add(IfColumns);

                        // Get the width of each column
                        int[] Widths = new int[4];
                        for (int Idx = 0; Idx < 4; Idx++)
                        {
                            Widths[Idx] = Rows.Max(x => x[Idx].Length);
                        }

                        // Format the markdown table
                        string Format = String.Format("| {{0,-{0}}} | {{1,-{1}}} | {{2,-{2}}} | {{3,-{3}}} |", Widths[0], Widths[1], Widths[2], Widths[3]);
                        Writer.WriteLine(Format, "", "", "", "");
                        Writer.WriteLine(Format, new string('-', Widths[0]), new string('-', Widths[1]), new string('-', Widths[2]), new string('-', Widths[3]));
                        for (int Idx = 0; Idx < Rows.Count; Idx++)
                        {
                            Writer.WriteLine(Format, Rows[Idx][0], Rows[Idx][1], Rows[Idx][2], Rows[Idx][3]);
                        }

                        // Blank line before next task
                        Writer.WriteLine();
                    }
                }
            }
        }
コード例 #30
0
 public override void StartPhase()
 {
     base.StartPhase();
     tasksController = TasksController.GetInstance();
     task            = tasksController?.Add(info);
 }