private SourceFieldNode ToSourceExpressionNode(SourceFieldList expressionObject, Connection connection) { if (!expressionObject.IsValid) throw new IncompleteTreeException(expressionObject); var field = expressionObject.GetSourceFieldForConnection(connection.Source); var fieldName = field.GetName(); if (_values.ContainsKey(fieldName)) { var value = _values[fieldName]; return new SourceFieldNode(field.DataType, fieldName, value, field.SetName, field.InnerName, field.SystemName); } return new SourceFieldNode(field.DataType, fieldName, null, field.SetName, field.InnerName, field.SystemName); }
/// <summary> /// Converts to source. /// </summary> /// <param name="name">The name.</param> /// <param name="sourceType">Type of the source.</param> /// <param name="propertyFilter">The property filter.</param> /// <param name="setName">Name of the set.</param> /// <returns>SourceFieldList.</returns> public static SourceFieldList ConvertToSource(string name, Type sourceType, Func<PropertyInfo, bool> propertyFilter, string setName) { var result = new SourceFieldList {ExpressionName = name}; var properties = sourceType.GetProperties(); foreach (var property in properties.Where(propertyFilter)) { var sf = new SourceField(result) { Name = property.Name, ConnectorOut = {DataType = GetDataType(property.PropertyType), Name = property.Name}, SetName = setName, InnerName = property.Name }; sf.Id = sf.ConnectorOut.Id; result.Fields.Add(sf); } return result; }
public void AddIdFieldsFromPublishedProcessInfoTest() { // Arrange. const string ObjectName = "testObject"; const string SetName = "TestItem"; var vm = new ExpressionDesignerWindowViewModelBase(); var accessor = new PrivateAccessor(vm); var baseProcess = Mock.Create<PublishedProcessInfo>(); Mock.Arrange(() => baseProcess.BaseProcess).Returns((PublishedProcessInfo)null); var derivedProcess = Mock.Create<PublishedProcessInfo>(); Mock.Arrange(() => derivedProcess.BaseProcess).Returns(baseProcess); var baseFields = new SourceFieldList(); var derivedFields = new SourceFieldList(); // Act. accessor.CallMethod("AddIdFields", baseProcess, baseFields, ObjectName, SetName); accessor.CallMethod("AddIdFields", derivedProcess, derivedFields, ObjectName, SetName); // Assert. //Assert.AreEqual(1, baseFields.Fields.Count); //var idField = baseFields.Fields.First(f => f.SystemName == Constants.IdColumnName); //Assert.AreEqual(NodeDataType.Int, idField.DataType); //Assert.AreEqual("Id", idField.Name); //Assert.AreEqual(Constants.IdColumnName, idField.SystemName); //Assert.AreEqual(Constants.IdColumnName, idField.InnerName); //Assert.AreEqual(SetName, idField.SetName); //Assert.AreEqual(ObjectName, idField.ObjectName); Assert.AreEqual(1, derivedFields.Fields.Count); //idField = derivedFields.Fields.First(f => f.SystemName == Constants.IdColumnName); var baseIdField = derivedFields.Fields.First(f => f.SystemName == Constants.BaseIdColumnName); //Assert.AreEqual(NodeDataType.Int, idField.DataType); //Assert.AreEqual("Id", idField.Name); //Assert.AreEqual(Constants.IdColumnName, idField.SystemName); //Assert.AreEqual(Constants.IdColumnName, idField.InnerName); //Assert.AreEqual(SetName, idField.SetName); //Assert.AreEqual(ObjectName, idField.ObjectName); Assert.AreEqual(NodeDataType.Int, baseIdField.DataType); Assert.AreEqual("Base Id", baseIdField.Name); Assert.AreEqual(Constants.BaseIdColumnName, baseIdField.SystemName); Assert.AreEqual(Constants.BaseIdColumnName, baseIdField.InnerName); Assert.AreEqual(SetName, baseIdField.SetName); Assert.AreEqual(ObjectName, baseIdField.ObjectName); }
/// <summary> /// Adds state-related system fields. /// </summary> /// <param name="process">The process.</param> /// <param name="source">The source field list.</param> /// <param name="objectName">The source object name.</param> /// <param name="sourceFieldsSetName">The source fields set name.</param> /// <exception cref="System.ArgumentNullException"> /// process /// or /// source /// </exception> /// <exception cref="ArgumentNullException">The <paramref name="process" /> parameter is null.</exception> /// <exception cref="ArgumentNullException">The <paramref name="source" /> parameter is null.</exception> protected void AddStateFields(IProcessEdit process, SourceFieldList source, string objectName, string sourceFieldsSetName) { const string CurrentStateName = "Current State"; const string CurrentStateSystemName = "CurrentStateName"; if (process == null) throw new ArgumentNullException("process"); if (source == null) throw new ArgumentNullException("source"); if (!process.IsStateEnabled) return; var dataType = SourceNodeFactory.GetDataType(typeof(string)); var sf = new SourceField(source) { DataType = dataType, Name = CurrentStateName, ConnectorOut = { DataType = dataType, Name = CurrentStateName }, ObjectName = objectName, SetName = sourceFieldsSetName, InnerName = CurrentStateSystemName, SystemName = CurrentStateSystemName }; source.Fields.Add(sf); dataType = SourceNodeFactory.GetDataType(typeof(DateTime)); sf = new SourceField(source) { DataType = dataType, Name = Constants.StateModifiedDisplayName, ConnectorOut = { DataType = dataType, Name = Constants.StateModifiedDisplayName }, ObjectName = objectName, SetName = sourceFieldsSetName, InnerName = Constants.StateModifiedColumnName, SystemName = Constants.StateModifiedColumnName }; source.Fields.Add(sf); }
/// <summary> /// Converts to source. /// </summary> /// <param name="name">The name.</param> /// <param name="fieldList">The field list.</param> /// <param name="setName">Name of the set.</param> /// <returns>SourceFieldList.</returns> public static SourceFieldList ConvertToSource(string name, IEnumerable<Expressions.FieldInfo> fieldList, string setName) { var result = new SourceFieldList {ExpressionName = name}; foreach (var field in fieldList) { var sf = new SourceField(result) { DataType = GetDataType(field.DataType), Name = field.Name, InnerName = field.InnerName, ConnectorOut = {DataType = GetDataType(field.DataType), Name = field.Name}, SetName = setName, SystemName = field.SystemName }; sf.Id = sf.ConnectorOut.Id; result.Fields.Add(sf); } return result; }
/// <summary> /// Adds the fields as connectors. /// </summary> /// <param name="diagramViewModel">The diagram view model.</param> /// <param name="expressionObject">The expression object.</param> private void AddFieldsAsConnectors(IDiagramViewModel diagramViewModel, SourceFieldList expressionObject) { ConnectorsOut.Clear(); foreach (var node in expressionObject.Fields.OrderBy(x => x.Name)) { var connector = new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.Out, node), diagramViewModel); ConnectorsOut.Add(connector); ExpandSubconnectors(connector, false, true); } }
/// <summary> /// Begins the load process fields. /// </summary> /// <param name="publishedProcessId">The published process identifier.</param> /// <param name="sourceField">The source field.</param> /// <param name="action">The action.</param> protected async void BeginLoadProcessFields( int publishedProcessId, IExpressionField sourceField, Action<IExpressionField, IEnumerable<IExpressionField>> action) { var result = new SourceFieldList(); try { var processRetriever = await PublishedProcessFieldsRetriever.GetPublishedProcessFieldsAsync(publishedProcessId); AddIdFields(processRetriever.Process, result, null, SourceFieldSetNames.Item); AddStateFields(processRetriever.Process, result, null, SourceFieldSetNames.Item); AddVersionFields(processRetriever.Process, result, null, SourceFieldSetNames.Item); foreach (var field in processRetriever.Fields) { result.Fields.Add(CreateSourceField(new ProcessFieldInfoWrapper(field), sourceField.Connector.Owner)); } } catch (DataPortalException) { } finally { if (action != null) action(sourceField, result.Fields); } }
public void AddSourceVersionFieldsFromPublishedProcessInfoTest() { // Arrange. const string ObjectName = "testObject"; const string SetName = "TestItem"; var vm = new ExpressionDesignerWindowViewModelBase(); var accessor = new PrivateAccessor(vm); var process1 = Mock.Create<PublishedProcessInfo>(); Mock.Arrange(() => process1.ProcessOption).Returns(ProcessOption.VersionEnabled); var process2 = Mock.Create<PublishedProcessInfo>(); Mock.Arrange(() => process2.ProcessOption).Returns(ProcessOption.None); var source1 = new SourceFieldList(); var source2 = new SourceFieldList(); // Act. accessor.CallMethod("AddVersionFields", process1, source1, ObjectName, SetName); accessor.CallMethod("AddVersionFields", process2, source2, ObjectName, SetName); // Assert. Assert.AreEqual(3, source1.Fields.Count); var versionNumber = source1.Fields.FirstOrDefault(f => f.SystemName == Constants.VersionNumber); var versionDate = source1.Fields.FirstOrDefault(f => f.SystemName == Constants.VersionDate); var versionMasterId = source1.Fields.FirstOrDefault(f => f.SystemName == Constants.VersionMasterId); Assert.IsNotNull(versionNumber); Debug.Assert(versionNumber != null, "versionNumber != null"); Assert.AreEqual(NodeDataType.String, versionNumber.DataType); Assert.AreEqual(Constants.VersionNumberName, versionNumber.Name); Assert.AreEqual(Constants.VersionNumber, versionNumber.InnerName); Assert.AreEqual(Constants.VersionNumber, versionNumber.SystemName); Assert.AreEqual(SetName, versionNumber.SetName); Assert.AreEqual(ObjectName, versionNumber.ObjectName); Assert.IsNotNull(versionDate); Debug.Assert(versionDate != null, "versionDate != null"); Assert.AreEqual(NodeDataType.DateTime, versionDate.DataType); Assert.AreEqual("Version Date", versionDate.Name); Assert.AreEqual(Constants.VersionDate, versionDate.InnerName); Assert.AreEqual(Constants.VersionDate, versionDate.SystemName); Assert.AreEqual(SetName, versionDate.SetName); Assert.AreEqual(ObjectName, versionDate.ObjectName); Assert.IsNotNull(versionMasterId); Debug.Assert(versionMasterId != null, "versionMasterId != null"); Assert.AreEqual(NodeDataType.Int, versionMasterId.DataType); Assert.AreEqual("Version Master Id", versionMasterId.Name); Assert.AreEqual(Constants.VersionMasterId, versionMasterId.InnerName); Assert.AreEqual(Constants.VersionMasterId, versionMasterId.SystemName); Assert.AreEqual(SetName, versionMasterId.SetName); Assert.AreEqual(ObjectName, versionMasterId.ObjectName); Assert.AreEqual(0, source2.Fields.Count); }
public void ToSourceExpressionNodeShouldThrowExceptionIdSourceFieldListIsInvalid() { var obj = new ExpressionNodeFactory(); var connection = new Connection(); connection.Source = new ConnectorOut(connection); connection.Sink = new ConnectorIn(connection); var destination = new DestinationFieldList { UniqueName = "Destination" }; destination.Fields.Add(new DestinationField(destination)); var source = new SourceFieldList(); source.Fields.Add(new SourceField(source) { Name = "Field" }); destination.Fields[0].ConnectorIn.Id = connection.Sink.Id; source.Fields[0].ConnectorOut.Id = connection.Source.Id; Mock.Arrange(() => source.IsValid).Returns(true).InSequence().Returns(true).InSequence().Returns(false).InSequence(); var objects = new List<IExpressionObjectBase> { source, destination, connection }; obj.CreateExpressionNodes(objects); }
/// <summary> /// Finalizes the update. /// </summary> /// <param name="sourceFieldList">The source field list.</param> /// <param name="fieldList">The field list.</param> /// <param name="source">The source.</param> /// <param name="expressions">The expressions.</param> /// <param name="parentWindow">The parent window.</param> private void FinalizeUpdate(SourceFieldList sourceFieldList, List<IExpressionField> fieldList, SourceFieldList source, List<IExpressionObjectBase> expressions, ITopLevelWindow parentWindow) { sourceFieldList.Fields.Clear(); foreach (var field in fieldList) { sourceFieldList.Fields.Add((SourceField)field); } // delete obsolete fields (removed from process) var sourceListArray = sourceFieldList.Fields.ToArray(); foreach (var field in sourceListArray) { if (source.Fields.All(t => t.Name != field.Name)) { var removed = sourceFieldList.Fields.First(t => t.Name == field.Name); expressions.Remove(removed.ConnectorOut.Connection); sourceFieldList.Fields.Remove(removed); } } this.expressionDesigner.LoadFromExpressionObjects(expressions); WindowManager.Value.ShowChildWindow(parentWindow, this); }
/// <summary> /// The edit expression. /// </summary> /// <param name="parentWindow"> /// The parent window. /// </param> /// <param name="variableList"> /// The variable list. /// </param> /// <param name="connection"> /// The connection. /// </param> /// <param name="expressionDesignerString"> /// The expression designer string. /// </param> /// <param name="saveAction"> /// The save action. /// </param> /// <param name="cancelAction"> /// The cancel action. /// </param> /// <param name="removeAction"> /// The remove action. /// </param> public void EditExpression( ITopLevelWindow parentWindow, DataVariableEditList variableList, ConnectionSetupEdit connection, string expressionDesignerString, Action saveAction, Action cancelAction, Action removeAction) { const string expressionResult = "Expression Result"; this.saveAction = saveAction; this.cancelAction = cancelAction; this.removeAction = removeAction; var source = new SourceFieldList { ExpressionName = "Received Data", Top = 10, Left = 10 }; source.Fields.Add(new SourceField(null) { DataType = NodeDataType.String, Name = "Data", SetName = "Data", SystemName = "Data", ConnectorOut = { DataType = NodeDataType.String, Name = "Data" } }); var expressions = new List<IExpressionObjectBase>(); var isNew = true; ExpressionContainer expressionsContainer; try { expressionsContainer = Serializer.Deserialize(expressionDesignerString); } catch { expressionsContainer = null; } if (!string.IsNullOrWhiteSpace(expressionDesignerString) && expressionsContainer != null) { isNew = false; var destinationFieldList = expressionsContainer.Expressions.FirstOrDefault(x => x.ExpressionName == expressionResult) as DestinationFieldList; if (destinationFieldList != null) { var newVariablesField = GetVariableList(variableList, expressionResult).Fields; var oldEdited = from f in newVariablesField where destinationFieldList.Fields.Select(x => x.SystemName).Contains(f.SystemName) select f; if (oldEdited.Any()) { foreach (var field in oldEdited) { var nf = destinationFieldList.Fields.First(x => x.SystemName == field.SystemName); nf.DataType = field.DataType; nf.Name = field.Name; } } foreach (var field in newVariablesField) { if (destinationFieldList.Fields.All(x => x.SystemName != field.SystemName)) { destinationFieldList.Fields.Add(field); } } //remove old field var oldList = new HashSet<string>(); foreach (var des in destinationFieldList.Fields) { if (newVariablesField.All(x => x.SystemName != des.SystemName)) { oldList.Add(des.SystemName); } } if (oldList.Any()) { foreach (var item in oldList) { var remove = destinationFieldList.Fields.FirstOrDefault(x => x.SystemName == item); if (remove != null) { destinationFieldList.Fields.Remove(remove); } } } } expressions.AddRange(expressionsContainer.Expressions); } else { expressions.Add(source); expressions.Add(GetVariableList(variableList, expressionResult)); } if (expressionsContainer != null) { var sourceFieldList = (from fl in expressions where fl is SourceFieldList select fl).Cast<SourceFieldList>().FirstOrDefault(); if (sourceFieldList != null) { var fieldList = sourceFieldList.Fields.Cast<IExpressionField>().ToList(); UpdateStoredFields(fieldList, source.Fields, (sf) => FinalizeUpdate(sourceFieldList, fieldList, source, expressions, parentWindow)); // Here we load all subtypes async that's why we need reload window after all subtypes are loaded } } if (!isNew) { return; } this.expressionDesigner.Diagram.Items.Clear(); ExpressionTranslator.TranslateToDiagram(expressions, this.expressionDesigner.Diagram); WindowManager.Value.ShowChildWindow(parentWindow, this); }
/// <summary> /// Adds the field node. /// </summary> /// <param name="item">The item.</param> /// <param name="diagramViewModel">The diagram view model.</param> private static void AddFieldNode(SourceFieldList item, IDiagramViewModel diagramViewModel) { var sfl = new SourceFieldsExpressionNode(diagramViewModel, item); diagramViewModel.Items.Add(new NodeViewModel<SourceFieldsExpressionNode, ExpressionConnection>(sfl, diagramViewModel)); }
/// <summary> /// The add last modified date field. /// </summary> /// <param name="process"> The process. </param> /// <param name="source"> The source. </param> /// <param name="objectName"> The object name. </param> /// <param name="sourceFieldsSetName"> The source fields set name. </param> /// <exception cref="ArgumentNullException"> </exception> protected void AddLastModifiedOnField(IProcessEdit process, SourceFieldList source, string objectName, string sourceFieldsSetName) { const string LastModifiedOnDisplayName = "Last Modified On"; if (process == null) throw new ArgumentNullException("process"); if (source == null) throw new ArgumentNullException("source"); var dataType = SourceNodeFactory.GetDataType(typeof(DateTime)); var sf = new SourceField(source) { DataType = dataType, Name = LastModifiedOnDisplayName, ConnectorOut = { DataType = dataType, Name = LastModifiedOnDisplayName }, SetName = sourceFieldsSetName, InnerName = LastModifiedOnDisplayName, SystemName = LastModifiedOnDisplayName, ObjectName = objectName }; source.Fields.Add(sf); }
/// <summary> /// Adds version-related system fields. /// </summary> /// <param name="process">The process.</param> /// <param name="source">The source field list.</param> /// <param name="objectName">The source object name.</param> /// <param name="sourceFieldsSetName">The source fields set name.</param> /// <exception cref="System.ArgumentNullException"> /// process /// or /// source /// </exception> /// <exception cref="ArgumentNullException">The <paramref name="process" /> parameter is null.</exception> /// <exception cref="ArgumentNullException">The <paramref name="source" /> parameter is null.</exception> protected void AddVersionFields(IProcessEdit process, SourceFieldList source, string objectName, string sourceFieldsSetName) { if (process == null) throw new ArgumentNullException("process"); if (source == null) throw new ArgumentNullException("source"); if (process.ProcessOptionChoose != ProcessOption.VersionEnabled) return; var dataType = SourceNodeFactory.GetDataType(typeof(string)); var sf = new SourceField(source) { DataType = dataType, Name = Constants.VersionNumberName, ConnectorOut = { DataType = dataType, Name = Constants.VersionNumberName }, ObjectName = objectName, SetName = sourceFieldsSetName, InnerName = Constants.VersionNumber, SystemName = Constants.VersionNumber }; source.Fields.Add(sf); dataType = SourceNodeFactory.GetDataType(typeof(DateTime)); sf = new SourceField(source) { DataType = dataType, Name = VersionDateDisplayName, ConnectorOut = { DataType = dataType, Name = VersionDateDisplayName }, ObjectName = objectName, SetName = sourceFieldsSetName, InnerName = Constants.VersionDate, SystemName = Constants.VersionDate }; source.Fields.Add(sf); dataType = SourceNodeFactory.GetDataType(typeof(int)); sf = new SourceField(source) { DataType = dataType, Name = VersionMasterIdDisplayName, ConnectorOut = { DataType = dataType, Name = VersionMasterIdDisplayName }, ObjectName = objectName, SetName = sourceFieldsSetName, InnerName = Constants.VersionMasterId, SystemName = Constants.VersionMasterId }; source.Fields.Add(sf); }
public void AddStateFieldsFromPublishedProcessInfoTest() { // Arrange. const string ObjectName = "testObject"; const string SetName = "TestItem"; var process1 = Mock.Create<PublishedProcessInfo>(); Mock.Arrange(() => process1.IsStateEnabled).Returns(false); var process2 = Mock.Create<PublishedProcessInfo>(); Mock.Arrange(() => process2.IsStateEnabled).Returns(true); var fields1 = new SourceFieldList(); var fields2 = new SourceFieldList(); var vm = new ExpressionDesignerWindowViewModelBase(); var accessor = new PrivateAccessor(vm); // Act. accessor.CallMethod("AddStateFields", process1, fields1, ObjectName, SetName); accessor.CallMethod("AddStateFields", process2, fields2, ObjectName, SetName); // Assert. Assert.AreEqual(0, fields1.Fields.Count); Assert.AreEqual(2, fields2.Fields.Count); var currentStateField = fields2.Fields.First(f => f.SystemName == Constants.CurrentStateName); Assert.AreEqual(NodeDataType.String, currentStateField.DataType); Assert.AreEqual(Constants.CurrentStateDisplayName, currentStateField.Name); Assert.AreEqual(Constants.CurrentStateName, currentStateField.SystemName); Assert.AreEqual(Constants.CurrentStateName, currentStateField.InnerName); Assert.AreEqual(SetName, currentStateField.SetName); Assert.AreEqual(ObjectName, currentStateField.ObjectName); var stateModifiedOnField = fields2.Fields.First(f => f.SystemName == Constants.StateModifiedColumnName); Assert.AreEqual(NodeDataType.DateTime, stateModifiedOnField.DataType); Assert.AreEqual(Constants.StateModifiedDisplayName, stateModifiedOnField.Name); Assert.AreEqual(Constants.StateModifiedColumnName, stateModifiedOnField.SystemName); Assert.AreEqual(Constants.StateModifiedColumnName, stateModifiedOnField.InnerName); Assert.AreEqual(SetName, stateModifiedOnField.SetName); Assert.AreEqual(ObjectName, stateModifiedOnField.ObjectName); }
public void AddLastModifiedOnField4() { var vm = new ExpressionDesignerWindowViewModelBase(); var privateAccessor = new PrivateAccessor(vm); var source = new SourceFieldList(); privateAccessor.CallMethod("AddLastModifiedOnField", source, "oldItem", SourceFieldSetNames.Item); var lastModifiedOnFieldIsAdded = source.Fields.Any(f => f.SystemName == Constants.LastModifiedOn); Assert.IsTrue(lastModifiedOnFieldIsAdded); }
public void ToSourceExpressionNodeShouldReturnFieldWithValue() { var obj = new ExpressionNodeFactory(); var connection = new Connection(); connection.Source = new ConnectorOut(connection); connection.Sink = new ConnectorIn(connection); var destination = new DestinationFieldList { UniqueName = "Destination" }; destination.Fields.Add(new DestinationField(destination)); var source = new SourceFieldList(); source.Fields.Add(new SourceField(source) { Name = "Field" }); destination.Fields[0].ConnectorIn.Id = connection.Sink.Id; source.Fields[0].ConnectorOut.Id = connection.Source.Id; var objects = new List<IExpressionObjectBase> { source, destination, connection }; var destNode = obj.CreateExpressionNodes(objects, new Dictionary<string, object> { { "Field", "Value" } }); var sourceNode = destNode.ResultNodes.FirstOrDefault().Expression as SourceFieldNode; Assert.AreEqual("Field", sourceNode.FieldName); Assert.AreEqual("Value", sourceNode.Value); }
/// <summary> /// Creates the source item. /// </summary> /// <param name="process">The process.</param> /// <param name="expressionName">Name of the expression.</param> /// <param name="uniqueName">Name of the unique.</param> /// <param name="objectName">Name of the object.</param> /// <param name="left">The left position.</param> /// <param name="top">The top position.</param> /// <returns>List of Source Fields.</returns> private static SourceFieldList CreateSourceItem( IProcessEdit process, string expressionName, string uniqueName, string objectName, int left, int top) { var result = new SourceFieldList { ExpressionName = expressionName, Top = top, Left = left, UniqueName = uniqueName }; AddIdFields(process, result, objectName); AddStateFields(process, result, objectName); AddVersionFields(process, result, objectName); AddLastModifiedOnField(result, objectName); foreach (var field in process.GetAllFields()) { var sourceField = CreateSourceField(new ProcessFieldEditWrapper(field), result); sourceField.ObjectName = objectName; result.Fields.Add(sourceField); } return result; }
public void CheckMultipleDestinationsInAddDestinationNode() { var obj = new ExpressionNodeFactory(); var connection1 = new Connection(); connection1.Source = new ConnectorOut(connection1); connection1.Sink = new ConnectorIn(connection1); var connection2 = new Connection(); connection2.Source = new ConnectorOut(connection2); connection2.Sink = new ConnectorIn(connection2); var destination = new DestinationFieldList { UniqueName = "Destination" }; destination.Fields.Add(new DestinationField(destination) { SystemName = "Field" }); destination.Fields[0].Subfields.Add(new DestinationField(destination) { SystemName = "Subfield", ParentField = destination.Fields[0] }); var source = new SourceFieldList(); source.Fields.Add(new SourceField(source) { Name = "Field" }); var func = new OneInOneOutExpression(ExpressionNodeType.Count) { UniqueName = "Function" }; func.ConnectorIn.Id = connection1.Sink.Id; source.Fields[0].ConnectorOut.Id = connection1.Source.Id; ((DestinationField)destination.Fields[0].Subfields[0]).ConnectorIn.Id = connection2.Sink.Id; func.ConnectorOut.Id = connection2.Source.Id; var objects = new List<IExpressionObjectBase> { source, destination, func, connection1, connection2 }; var destNode = obj.CreateExpressionNodes(objects); Assert.AreEqual("Field.Subfield", destNode.ResultNodes.ToArray()[0].FieldName); }
/// <summary> /// Initializes a new instance of the <see cref="SourceFieldsExpressionNode"/> class. /// </summary> /// <param name="diagramViewModel">The diagram view model.</param> /// <param name="expressionObject">The expression object.</param> public SourceFieldsExpressionNode(IDiagramViewModel diagramViewModel, SourceFieldList expressionObject) : base(expressionObject) { _diagramViewModel = diagramViewModel; _connectorsOut.CollectionChanged += ConnectorsOutCollectionChanged; IsValidFunc = n => true; UpdateAction = n => { }; AddFieldsAsConnectors(diagramViewModel, expressionObject); }
public void ToExpressionNode_SetChecklistData_Test() { // Arrange. var nodeFactory = new ExpressionNodeFactory(); var connection1 = new Connection(); connection1.Source = new ConnectorOut(connection1); connection1.Sink = new ConnectorIn(connection1); var connection2 = new Connection(); connection2.Source = new ConnectorOut(connection2); connection2.Sink = new ConnectorIn(connection2); var connection3 = new Connection(); connection3.Source = new ConnectorOut(connection3); connection3.Sink = new ConnectorIn(connection3); var destination = new DestinationFieldList { UniqueName = "Destination" }; destination.Fields.Add(new DestinationField(destination)); destination.Fields.Add(new DestinationField(destination)); var source = new SourceFieldList(); source.Fields.Add(new SourceField(source) { Name = "Field" }); var func = new SetChecklistDataExpression { UniqueName = "Function" }; func.ConnectorIn.Id = connection1.Sink.Id; source.Fields[0].ConnectorOut.Id = connection1.Source.Id; destination.Fields[0].ConnectorIn.Id = connection2.Sink.Id; func.Connector1Out.Id = connection2.Source.Id; destination.Fields[1].ConnectorIn.Id = connection3.Sink.Id; func.Connector2Out.Id = connection3.Source.Id; var objects = new List<IExpressionObjectBase> { source, destination, func, connection1, connection2, connection3 }; // Act. var destNode = nodeFactory.CreateExpressionNodes(objects); // Assert. Assert.IsTrue(destNode.ResultNodes.ElementAt(0).Expression is SetChecklistDataFunctionNode); Assert.IsTrue(destNode.ResultNodes.ElementAt(1).Expression is GetContextValueFunctionNode); }
/// <summary> /// Converts to source. /// </summary> /// <param name="name">The name.</param> /// <param name="fieldList">The field list.</param> /// <param name="setName">Name of the set.</param> /// <returns>SourceFieldList.</returns> public static SourceFieldList ConvertToSource(string name, IDictionary<string, object> fieldList, string setName) { var result = new SourceFieldList {ExpressionName = name}; foreach (var field in fieldList) { var sf = new SourceField(result) { DataType = GetDataType(field.Value.GetType()), Name = field.Key, ConnectorOut = {DataType = GetDataType(field.Value.GetType()), Name = field.Key}, SetName = setName, }; sf.Id = sf.ConnectorOut.Id; result.Fields.Add(sf); } return result; }
private void ToExpressionNodeThreeInOneOutFunctionTest(ExpressionNodeType nodeType, Type functionNode) { var obj = new ExpressionNodeFactory(); var connection1 = new Connection(); connection1.Source = new ConnectorOut(connection1); connection1.Sink = new ConnectorIn(connection1); var connection2 = new Connection(); connection2.Source = new ConnectorOut(connection2); connection2.Sink = new ConnectorIn(connection2); var connection3 = new Connection(); connection3.Source = new ConnectorOut(connection3); connection3.Sink = new ConnectorIn(connection3); var connection4 = new Connection(); connection4.Source = new ConnectorOut(connection4); connection4.Sink = new ConnectorIn(connection4); var destination = new DestinationFieldList { UniqueName = "Destination" }; destination.Fields.Add(new DestinationField(destination)); var source = new SourceFieldList(); source.Fields.Add(new SourceField(source) { Name = "Field" }); source.Fields.Add(new SourceField(source) { Name = "Field" }); source.Fields.Add(new SourceField(source) { Name = "Field" }); var func = new ThreeInOneOutExpression(nodeType) { UniqueName = "Function" }; func.Connector1In.Id = connection1.Sink.Id; source.Fields[0].ConnectorOut.Id = connection1.Source.Id; func.Connector2In.Id = connection2.Sink.Id; source.Fields[1].ConnectorOut.Id = connection2.Source.Id; func.Connector3In.Id = connection3.Sink.Id; source.Fields[2].ConnectorOut.Id = connection3.Source.Id; destination.Fields[0].ConnectorIn.Id = connection4.Sink.Id; func.ConnectorOut.Id = connection4.Source.Id; var objects = new List<IExpressionObjectBase> { source, destination, func, connection1, connection2, connection3, connection4 }; var destNode = obj.CreateExpressionNodes(objects); Assert.AreEqual(functionNode, destNode.ResultNodes.FirstOrDefault().Expression.GetType()); }
/// <summary> /// Creates the user information item. /// </summary> /// <param name="uniqueName"> /// The unique name. /// </param> /// <returns> /// The user information item. /// </returns> public static SourceFieldList CreateUserInformationItem(string uniqueName) { var userInfoSource = new SourceFieldList { ExpressionName = "Current User Information", UniqueName = uniqueName }; userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "User Name", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserName", SystemName = "Utils.CurrentUserName", ConnectorOut = { DataType = NodeDataType.String, Name = "User Name" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "Full Name", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserFullName", SystemName = "Utils.CurrentUserFullName", ConnectorOut = { DataType = NodeDataType.String, Name = "Full Name" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.Int, Name = "Person ID", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserPersonId", SystemName = "Utils.CurrentUserPersonId", ConnectorOut = { DataType = NodeDataType.String, Name = "Person ID" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "Email Address", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserEmailAddress", SystemName = "Utils.CurrentUserEmailAddress", ConnectorOut = { DataType = NodeDataType.String, Name = "Email Address" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "First Name", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserFirstName", SystemName = "Utils.CurrentUserFirstName", ConnectorOut = { DataType = NodeDataType.String, Name = "First Name" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "Last Name", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserLastName", SystemName = "Utils.CurrentUserLastName", ConnectorOut = { DataType = NodeDataType.String, Name = "Last Name" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.Int, Name = "Business Unit Id", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserBusinessUnitId", SystemName = "Utils.CurrentUserBusinessUnitId", ConnectorOut = { DataType = NodeDataType.Int, Name = "Business Unit Id" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "Business Unit", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserBusinessUnit", SystemName = "Utils.CurrentUserBusinessUnit", ConnectorOut = { DataType = NodeDataType.String, Name = "Business Unit" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "User IP", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserClientIP", SystemName = "Utils.CurrentUserClientIP", ConnectorOut = { DataType = NodeDataType.String, Name = "User IP" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "Device Name", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserDeviceName", SystemName = "Utils.CurrentUserDeviceName", ConnectorOut = { DataType = NodeDataType.String, Name = "Device Name" } }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.List, Name = "Roles", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserRolesList", SystemName = "Utils.CurrentUserRolesList", ConnectorOut = { DataType = NodeDataType.List, Name = "Roles Id" }, SubfieldsRetriever = new RolesRetriever() }); userInfoSource.Fields.Add( new SourceField(null) { DataType = NodeDataType.String, Name = "Locale", SetName = SourceFieldSetNames.CurrentUserInfo, InnerName = "CurrentUserLocale", SystemName = "Utils.CurrentUserLocale", ConnectorOut = { DataType = NodeDataType.String, Name = "Locale" } }); return userInfoSource; }
private static void SetupExpressionsDiagram(DiagramViewModel vm) { vm.Palette.Add(new NodeGroup("String Functions", new INodeViewModel[] { new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.ToUpper) { ExpressionName = "Uppercase", ConnectorIn = { DataType = NodeDataType.String, Name = "String" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ), new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.ToLower) { ExpressionName = "Lowercase", ConnectorIn = { DataType = NodeDataType.String, Name = "String" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ), new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.Trim) { ExpressionName = "Trim", ConnectorIn = { DataType = NodeDataType.String, Name = "String" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.Concat) { ExpressionName = "Concat", Connector1In = { DataType = NodeDataType.String, Name = "String 1" }, Connector2In = { DataType = NodeDataType.String, Name = "String 2" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.Left) { ExpressionName = "Left", Connector1In = { DataType = NodeDataType.String, Name = "String 1" }, Connector2In = { DataType = NodeDataType.String, Name = "String 2" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.Right) { ExpressionName = "Right", Connector1In = { DataType = NodeDataType.String, Name = "String 1" }, Connector2In = { DataType = NodeDataType.String, Name = "String 2" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ) })); vm.Palette.Add(new NodeGroup("Date Functions", new INodeViewModel[] { new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.AddDays) { ExpressionName = "Add Days", Connector1In = { DataType = NodeDataType.DateTime, Name = "Date" }, Connector2In = { DataType = NodeDataType.Int, Name = "Days Count" }, ConnectorOut = { DataType = NodeDataType.DateTime, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.DateDiffDays) { ExpressionName = "DateDiff Days", Connector1In = { DataType = NodeDataType.DateTime, Name = "Date 1" }, Connector2In = { DataType = NodeDataType.DateTime, Name = "Date 2" }, ConnectorOut = { DataType = NodeDataType.Int, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.DateDiffHours) { ExpressionName = "DateDiff Hours", Connector1In = { DataType = NodeDataType.DateTime, Name = "Date 1" }, Connector2In = { DataType = NodeDataType.DateTime, Name = "Date 2" }, ConnectorOut = { DataType = NodeDataType.Double, Name = "Result" } }), vm ), new NodeViewModel<FunctionExpressionNode, ExpressionConnection>( new FunctionExpressionNode(vm, new FunctionExpression(ExpressionNodeType.CustomFunction) { ExpressionName = "Current Date", FunctionName = "DateTime.Now", ConnectorOut = { DataType = NodeDataType.DateTime, Name = "Result" } }), vm ), new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.DateYear) { ExpressionName = "Date Year", ConnectorIn = { DataType = NodeDataType.DateTime, Name = "Date" }, ConnectorOut = { DataType = NodeDataType.Int, Name = "Year" } }), vm ), new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.DateQuarter) { ExpressionName = "Date Quarter", ConnectorIn = { DataType = NodeDataType.DateTime, Name = "Date" }, ConnectorOut = { DataType = NodeDataType.Int, Name = "Quarter" } }), vm ), new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.DateMonth) { ExpressionName = "Date Month", ConnectorIn = { DataType = NodeDataType.DateTime, Name = "Date" }, ConnectorOut = { DataType = NodeDataType.Int, Name = "Month" } }), vm ), new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.DateMonthName) { ExpressionName = "Date Month Name", ConnectorIn = { DataType = NodeDataType.DateTime, Name = "Date" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Month Name" } }), vm ), new NodeViewModel<OneInOneOutExpressionNode, ExpressionConnection>( new OneInOneOutExpressionNode(vm, new OneInOneOutExpression(ExpressionNodeType.DateWeek) { ExpressionName = "Date Week", ConnectorIn = { DataType = NodeDataType.DateTime, Name = "Date" }, ConnectorOut = { DataType = NodeDataType.Int, Name = "Week" } }), vm ), })); vm.Palette.Add(new NodeGroup("Logical Functions", new INodeViewModel[] { new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.IsLess) { ExpressionName = "Less", Connector1In = { DataType = NodeDataType.Double, Name = "a" }, Connector2In = { DataType = NodeDataType.Double, Name = "b" }, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.IsGreater) { ExpressionName = "Greater", Connector1In = { DataType = NodeDataType.Double, Name = "a" }, Connector2In = { DataType = NodeDataType.Double, Name = "b" }, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.AreEqual) { ExpressionName = "Equals", Connector1In = { DataType = NodeDataType.String, Name = "a" }, Connector2In = { DataType = NodeDataType.String, Name = "b" }, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result" } }), vm ), new NodeViewModel<ThreeInOneOutExpressionNode, ExpressionConnection>( new ThreeInOneOutExpressionNode(vm, new ThreeInOneOutExpression(ExpressionNodeType.If) { ExpressionName = "Condition", Connector1In = { DataType = NodeDataType.Boolean, Name = "Condition" }, Connector2In = { DataType = NodeDataType.String, Name = "When True" }, Connector3In = { DataType = NodeDataType.String, Name = "When False" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ), })); vm.Palette.Add(new NodeGroup("Aggregate Functions", new INodeViewModel[] { new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.Add) { ExpressionName = "Add", Connector1In = { DataType = NodeDataType.Double, Name = "Value1"}, Connector2In = { DataType = NodeDataType.Double, Name = "Value2"}, ConnectorOut = { DataType = NodeDataType.Double, Name = "Result"} }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.Subtract) { ExpressionName = "Subtract", Connector1In = { DataType = NodeDataType.Double, Name = "Value1" }, Connector2In = { DataType = NodeDataType.Double, Name = "Value2" }, ConnectorOut = { DataType = NodeDataType.Double, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.Multiply) { ExpressionName = "Multiply", Connector1In = { DataType = NodeDataType.Double, Name = "Value1" }, Connector2In = { DataType = NodeDataType.Double, Name = "Value2" }, ConnectorOut = { DataType = NodeDataType.Double, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.Divide) { ExpressionName = "Divide", Connector1In = { DataType = NodeDataType.Double, Name = "Value1" }, Connector2In = { DataType = NodeDataType.Double, Name = "Value2" }, ConnectorOut = { DataType = NodeDataType.Double, Name = "Result" } }), vm ), new NodeViewModel<TwoInOneOutExpressionNode, ExpressionConnection>( new TwoInOneOutExpressionNode(vm, new TwoInOneOutExpression(ExpressionNodeType.CustomFunction) { ExpressionName = "Custom Multiply", FunctionName = "?1 * ?2", Connector1In = { DataType = NodeDataType.Double, Name = "Value1" }, Connector2In = { DataType = NodeDataType.Double, Name = "Value2" }, ConnectorOut = { DataType = NodeDataType.Double, Name = "Result" } }), vm ), })); vm.Palette.Add(new NodeGroup("SPC Functions", new INodeViewModel[] { new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.AboveCenterLine) { ExpressionName = "Above Center Line", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.BelowCenterLine) { ExpressionName = "Below Center Line", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.GoingDown) { ExpressionName = "Going Down", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.GoingUp) { ExpressionName = "Going Up", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.AlternatingUpAndDown) { ExpressionName = "Alternating Up and Down", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<SixInOneOutExpressionNode, ExpressionConnection>( new SixInOneOutExpressionNode(vm, new SixInOneOutExpression(ExpressionNodeType.LessThanLowerLimits) { ExpressionName = "Less Than LCL/LSL", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Double, Name = "LCL/LSL"}, Connector4In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector5In = { DataType = NodeDataType.Int, Name = "Y Number"}, Connector6In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<SixInOneOutExpressionNode, ExpressionConnection>( new SixInOneOutExpressionNode(vm, new SixInOneOutExpression(ExpressionNodeType.GreaterThanUpperLimits) { ExpressionName = "Greater Than UCL/USL", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Double, Name = "UCL/USL"}, Connector4In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector5In = { DataType = NodeDataType.Int, Name = "Y Number"}, Connector6In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.Same) { ExpressionName = "Same", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<SixInOneOutExpressionNode, ExpressionConnection>( new SixInOneOutExpressionNode(vm, new SixInOneOutExpression(ExpressionNodeType.Between) { ExpressionName = "Between", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.Double, Name = "Low Value"}, Connector5In = { DataType = NodeDataType.Double, Name = "High Value"}, Connector6In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FiveInOneOutExpressionNode, ExpressionConnection>( new FiveInOneOutExpressionNode(vm, new FiveInOneOutExpression(ExpressionNodeType.ZoneAorBeyond) { ExpressionName = "Zone A or beyond", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.Int, Name = "Y Number"}, Connector5In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FiveInOneOutExpressionNode, ExpressionConnection>( new FiveInOneOutExpressionNode(vm, new FiveInOneOutExpression(ExpressionNodeType.ZoneBorBeyond) { ExpressionName = "Zone B or beyond", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.Int, Name = "Y Number"}, Connector5In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FiveInOneOutExpressionNode, ExpressionConnection>( new FiveInOneOutExpressionNode(vm, new FiveInOneOutExpression(ExpressionNodeType.ZoneCorBeyond) { ExpressionName = "Zone C or beyond", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Sub-group Size"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.Int, Name = "Y Number"}, Connector5In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.FailedNumber) { ExpressionName = "Failed Number (attribute)", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Number of samples"}, Connector3In = { DataType = NodeDataType.Int, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), new NodeViewModel<FourInOneOutExpressionNode, ExpressionConnection>( new FourInOneOutExpressionNode(vm, new FourInOneOutExpression(ExpressionNodeType.FailedPercent) { ExpressionName = "Failed Percent (attribute)", Connector1In = { DataType = NodeDataType.SPCChart, Name = "SPC Field"}, Connector2In = { DataType = NodeDataType.Int, Name = "Number of samples"}, Connector3In = { DataType = NodeDataType.Double, Name = "X Number"}, Connector4In = { DataType = NodeDataType.ChartType, Name = "Chart Type"}, ConnectorOut = { DataType = NodeDataType.Boolean, Name = "Result"} }), vm ), })); vm.Palette.Add(new NodeGroup("Constants", new INodeViewModel[] { new NodeViewModel<ConstantExpressionNode, ExpressionConnection>( new ConstantExpressionNode(vm, new ConstantExpression() { ExpressionName = "Constant", ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }), vm ) })); var uis = new SourceFieldList {ExpressionName = "Current User Information", Left = 10, Top = 400}; uis.Fields.Add(new SourceField(null) { DataType = NodeDataType.String, Name = "User Name", SetName = SourceFieldSetNames.CurrentUserInfo, SystemName = "Utils.CurrentUserName", ConnectorOut = { DataType = NodeDataType.String, Name = "User Name" } }); uis.Fields.Add(new SourceField(null) { DataType = NodeDataType.String, Name = "Full Name", SetName = SourceFieldSetNames.CurrentUserInfo, SystemName = "Utils.CurrentUserFullName", ConnectorOut = { DataType = NodeDataType.String, Name = "Full Name" } }); uis.Fields.Add(new SourceField(null) { DataType = NodeDataType.Int, Name = "Person ID", SetName = SourceFieldSetNames.CurrentUserInfo, SystemName = "Utils.CurrentUserPersonId", ConnectorOut = { DataType = NodeDataType.String, Name = "Person ID" } }); uis.Fields.Add(new SourceField(null) { DataType = NodeDataType.String, Name = "Email Address", SetName = SourceFieldSetNames.CurrentUserInfo, SystemName = "Utils.CurrentUserEmailAddress", ConnectorOut = { DataType = NodeDataType.String, Name = "Email Address" } }); uis.Fields.Add(new SourceField(null) { DataType = NodeDataType.String, Name = "Last Name", SetName = SourceFieldSetNames.CurrentUserInfo, SystemName = "Utils.CurrentUserLastName", ConnectorOut = { DataType = NodeDataType.String, Name = "Last Name" } }); uis.Fields.Add(new SourceField(null) { DataType = NodeDataType.String, Name = "Business Unit", SetName = SourceFieldSetNames.CurrentUserInfo, SystemName = "Utils.CurrentUserBusinessUnitId", ConnectorOut = { DataType = NodeDataType.String, Name = "Business Unit" } }); // source //var fieldList = new Dictionary<string, object>(); //fieldList["Name"] = "Name"; //fieldList["Title"] = "Title"; //fieldList["PublishDate"] = DateTime.Now; //fieldList["Author"] = "Author"; var sourceNodeList = new SourceFieldList(); //Func<IExpressionField, ICollection<IExpressionField>> sfRetriever = f => GetCRFields(f, sourceNodeList); sourceNodeList.ExpressionName = "Album"; sourceNodeList.Top = 10; sourceNodeList.Left = 10; sourceNodeList.Fields.Add(new SourceField(sourceNodeList) { DataType = NodeDataType.String, Name = "Name", SetName = SourceFieldSetNames.Item, SystemName = "Name", ConnectorOut = { DataType = NodeDataType.String, Name = "Name" } }); sourceNodeList.Fields.Add(new SourceField(sourceNodeList) { DataType = NodeDataType.String, Name = "Title", SetName = SourceFieldSetNames.Item, SystemName = "Title", ConnectorOut = { DataType = NodeDataType.String, Name = "Title" } }); sourceNodeList.Fields.Add(new SourceField(sourceNodeList) { DataType = NodeDataType.String, Name = "PublishDate", SetName = SourceFieldSetNames.Item, SystemName = "PublishDate", ConnectorOut = { DataType = NodeDataType.String, Name = "PublishDate" } }); sourceNodeList.Fields.Add(new SourceField(sourceNodeList) { DataType = NodeDataType.String, Name = "Author", SetName = SourceFieldSetNames.Item, SystemName = "Author", ConnectorOut = { DataType = NodeDataType.String, Name = "Author" }, SubfieldsRetriever = new CRSubfieldsRetriever() }); //var sourceNodes = SourceNodeFactory.ConvertToSource("Album", fieldList, SourceFieldSetNames.Item); //sourceNodes.Top = 10; //sourceNodes.Left = 10; //sourceNodes.Width = 200; // destination var destinationNodes = DestinationNodeFactory.ConvertToSource(typeof(ExpressionResult)); destinationNodes.Top = 200; destinationNodes.Left = 600 ; var expressions = new List<IExpressionObjectBase>(); expressions.Add(sourceNodeList); //expressions.Add(uis); expressions.Add(destinationNodes); // connection var connection = new Connection { Id = Guid.NewGuid(), Source = new ConnectorOut(null) { Id = sourceNodeList.ConnectorsOut[0].Id }, Sink = new ConnectorIn(null) { Id = destinationNodes.ConnectorsIn[0].Id } }; //expressions.Add(connection); // constant var constantExpr = new ConstantExpression { ExpressionName = "Constant", Top = 10, Left = 250, Value = 10, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }; //expressions.Add(constantExpr); // oneinoneout var oneinoneoutExpr = new OneInOneOutExpression(ExpressionNodeType.ToUpper) { ExpressionName = "Uppercase", Top = 60, Left = 250, ConnectorIn = {DataType = NodeDataType.String, Name = "String"}, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }; //expressions.Add(oneinoneoutExpr); // twoinoneout var twoinoneoutExpr = new TwoInOneOutExpression(ExpressionNodeType.Concat) { ExpressionName = "Concat", Top = 110, Left = 250, Connector1In = { DataType = NodeDataType.String, Name = "String" }, Connector2In = { DataType = NodeDataType.String, Name = "String" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }; //expressions.Add(twoinoneoutExpr); // threeinoneout var threeinoneoutExpr = new ThreeInOneOutExpression(ExpressionNodeType.If) { ExpressionName = "Condition", Top = 180, Left = 250, Connector1In = { DataType = NodeDataType.Boolean, Name = "Condition" }, Connector2In = { DataType = NodeDataType.String, Name = "If True" }, Connector3In = { DataType = NodeDataType.String, Name = "If False" }, ConnectorOut = { DataType = NodeDataType.String, Name = "Result" } }; expressions.Add(threeinoneoutExpr); // function var functionExpr = new FunctionExpression(ExpressionNodeType.CustomFunction) { ExpressionName = "Current Date", Top = 280, Left = 250, Width = 100, Height = 45, FunctionName = "DateTime.Now", ConnectorOut = {DataType = NodeDataType.DateTime, Name="Result"}}; //expressions.Add(functionExpr); ExpressionTranslator.TranslateToDiagram(expressions, vm); }
/// <summary> /// Determines whether [is valid mapping] [the specified field list]. /// </summary> /// <param name="fieldList">The field list.</param> /// <param name="connector">The connector.</param> /// <param name="sourceContext">The source context.</param> /// <returns><c>true</c> if [is valid mapping] [the specified field list]; otherwise, <c>false</c>.</returns> private bool IsValidMapping(SourceFieldList fieldList, IConnectorOut connector, SourceField sourceContext) { var sourceField = FindSourceField(fieldList.Fields, connector); if (sourceField == null) return false; return CanAccess(sourceField, sourceContext); }
/// <summary> /// Adds the 'Id' and 'Base Id' fields to the specified <see cref="SourceFieldList" />. /// </summary> /// <param name="process">The source process.</param> /// <param name="source">The source field list.</param> /// <param name="objectName">The source object name.</param> /// <param name="sourceFieldsSetName">The source fields set name.</param> /// <exception cref="System.ArgumentNullException"> /// process /// or /// source /// </exception> protected void AddIdFields(IProcessEdit process, SourceFieldList source, string objectName, string sourceFieldsSetName) { const string IdName = "Id"; const string BaseIdName = "Base Id"; if (process == null) throw new ArgumentNullException("process"); if (source == null) throw new ArgumentNullException("source"); var dataType = SourceNodeFactory.GetDataType(typeof(int)); var sf = new SourceField(source) { DataType = dataType, Name = IdName, ConnectorOut = { DataType = dataType, Name = IdName }, ObjectName = objectName, SetName = sourceFieldsSetName, InnerName = Constants.IdColumnName, SystemName = Constants.IdColumnName, }; source.Fields.Add(sf); if (process.BaseProcess == null) return; sf = new SourceField(source) { DataType = dataType, Name = BaseIdName, ConnectorOut = { DataType = dataType, Name = BaseIdName }, ObjectName = objectName, SetName = sourceFieldsSetName, InnerName = Constants.BaseIdColumnName, SystemName = Constants.BaseIdColumnName, }; source.Fields.Add(sf); }