Beispiel #1
0
        public static void CreateTask(ProjectWrapper projectWrapper, PackageWrapper packageWrapper, ContainerWrapper containerWrapper,
                                      IonStructure.Task task, List <ScriptProject> globalScriptProjects, ScriptProject referencedGlobalScriptProject = null)
        {
            try
            {
                ExecutableWrapper executableWrapper = null;

                switch (task)
                {
                case DataFlow dataFlow:
                    DataFlowTask dataFlowTask = new DataFlowTask(dataFlow, projectWrapper, packageWrapper, containerWrapper);
                    executableWrapper = dataFlowTask.DataFlowTaskWrapper;
                    break;

                case ExecuteSql executeSql:
                    ExecuteSqlTask executeSqlTask = new ExecuteSqlTask(executeSql, containerWrapper);
                    executableWrapper = executeSqlTask.ExecuteSqlTaskWrapper;
                    break;

                case ExecuteProcess executeProcess:
                    executableWrapper = ExecuteProcessTask.CreateTask(executeProcess, containerWrapper);
                    break;

                case Expression expression:
                    executableWrapper = ExpressionTask.CreateTask(expression, containerWrapper);
                    break;

                case Script script:
                    ScriptTask scriptTask = new ScriptTask(script, projectWrapper, packageWrapper, containerWrapper, referencedGlobalScriptProject);
                    executableWrapper = scriptTask.ScriptTaskWrapper;
                    break;

                case ForLoopContainer forLoopContainer:
                    executableWrapper = ContainerExecutable.CreateForLoopContainer(forLoopContainer, projectWrapper, packageWrapper, containerWrapper, globalScriptProjects);
                    break;

                case ForEachFromVariableLoopContainer forEachFromVarLoopContainer:
                    executableWrapper = ContainerExecutable.CreateForEachFromVariableLoopContainer(forEachFromVarLoopContainer, projectWrapper, packageWrapper, containerWrapper, globalScriptProjects);
                    break;

                case SequenceContainer sequenceContainer:
                    executableWrapper = ContainerExecutable.CreateSequenceContainer(sequenceContainer, projectWrapper, packageWrapper, containerWrapper, globalScriptProjects);
                    break;
                }

                AddPrecedenceConstraints(containerWrapper, executableWrapper, task.PrecedenceConstraints);
            }
            catch (Exception e)
            {
                if (e.Data[Constants.ExceptionTaskKey] == null)
                {
                    e.Data[Constants.ExceptionTaskKey] = task.Name;
                }
                else
                {
                    e.Data[Constants.ExceptionTaskKey] = task.Name + "/" + e.Data[Constants.ExceptionTaskKey];                     // If task is not null then the task being created is a container, and an exception has been thrown in one of its underlying tasks.
                }
                throw;
            }
        }
Beispiel #2
0
        public static void ConstructTask(ProjectWrapper project, PackageWrapper package, ContainerWrapper taskContainer, Task task, ScriptProject innerTask = null)
        {
            try
            {
                ExecutableWrapper executableTask = null;

                switch (task)
                {
                case DataFlow dataflowTask:
                    executableTask = DataFlowTask.ConstructTask(dataflowTask, project, package, taskContainer);
                    break;

                case ExecuteSql executeSqlTask:
                    executableTask = ConstructExecuteSqlTask(executeSqlTask, taskContainer);
                    break;

                case ExecuteProcess executeProcessTask:
                    executableTask = ConstructExecuteProcessTask(executeProcessTask, taskContainer);
                    break;

                case Expression expressionTask:
                    executableTask = ConstructExpressionTask(expressionTask, taskContainer);
                    break;

                case Script scriptTask:
                    executableTask = ConstructScriptTask(scriptTask, project, package, taskContainer, innerTask);
                    break;

                case ForLoopContainer forLoopContainer:
                    executableTask = ContainerExecutable.ConstructForLoopContainer(forLoopContainer, project, package, taskContainer);
                    break;

                case ForEachFromVariableLoopContainer forEachFromVarLoopContainer:
                    executableTask = ContainerExecutable.ConstructForEachFromVariableLoopContainer(forEachFromVarLoopContainer, project, package, taskContainer);
                    break;

                case SequenceContainer sequenceContainer:
                    executableTask = ContainerExecutable.ConstructSequenceContainer(sequenceContainer, project, package, taskContainer);
                    break;
                }

                AddPrecedenceConstraints(taskContainer, executableTask, task.PrecedenceConstraints);
            }
            catch (Exception e)
            {
                if (e.Data[Constants.ExceptionTaskKey] == null)
                {
                    e.Data[Constants.ExceptionTaskKey] = task.Name;
                }
                else
                {
                    e.Data[Constants.ExceptionTaskKey] = task.Name + "/" + e.Data[Constants.ExceptionTaskKey];                     // If task is not null then the task being constructed is a container and an exception has been thrown in one of the underlying tasks.
                }
                throw;
            }
        }
Beispiel #3
0
        private static void AddPrecedenceConstraints(ContainerWrapper taskContainer, ExecutableWrapper task, PrecedenceConstraintList constraints)
        {
            if (constraints != null)
            {
                foreach (InputPath input in constraints.Inputs)
                {
                    ExecutableWrapper sourceTask = taskContainer.FindTask(input.OutputPathName);

                    if (sourceTask == null)
                    {
                        throw new Exception($"Failed to find task {input.OutputPathName}, referenced by {task.Name} in container {taskContainer.Name}!");
                    }

                    string evaluationValue     = input.EvaluationValue.ToString();
                    string evaluationOperation = input.EvaluationOperation.ToString();
                    bool   logicalAnd          = constraints.LogicalType == LogicalOperationEnum.And;

                    taskContainer.AddPrecedenceConstraint(sourceTask, task, input.Expression, evaluationValue, evaluationOperation, logicalAnd);
                }
            }
        }