/// <summary> /// The get counterpart. /// </summary> /// <param name="connector">The connector.</param> /// <returns>The <see cref="ExpressionConnector" />.</returns> public ExpressionConnector GetCounterpart(ExpressionConnector connector) { return (ExpressionConnector)SourceItem == connector ? (ExpressionConnector)DestinationItem : (ExpressionConnector)SourceItem; }
/// <summary> /// Deletes the subconnectors. /// </summary> /// <param name="connector">The connector.</param> /// <param name="loadWhenNecessary">if set to <c>true</c> [load when necessary].</param> /// <param name="item">The item.</param> private void DeleteSubconnectors(ExpressionConnectorViewModel connector, bool loadWhenNecessary, ExpressionConnector item) { foreach (var sc in item.GetSubconnectors().OrderBy(x => x.Name)) { var node = ConnectorsOut.FirstOrDefault(x => x.Item.Id == sc.Id); if (node != null) { if (sc.HasSubfields) { var newConnector = new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.Out, sc), _diagramViewModel) { IndentLevel = connector.IndentLevel }; CollapseSubconnectors(newConnector, loadWhenNecessary); } item.SubconnectorsLoaded = false; ConnectorsOut.Remove(node); } } item.IsConnectorsGroupCollapsed = !item.SubconnectorsLoaded; item.ClearSubconnectors(); }
/// <summary> /// Inserts the subconnectors. /// </summary> /// <param name="connector">The connector.</param> /// <param name="loadWhenNecessary">if set to <c>true</c> [load when necessary].</param> /// <param name="recursiveExpand">if set to <c>true</c> [recursive expand].</param> /// <param name="item">The item.</param> private void InsertSubconnectors(ExpressionConnectorViewModel connector, bool loadWhenNecessary, bool recursiveExpand, ExpressionConnector item) { var idx = ConnectorsOut.IndexOf(connector); var newConnectors = new List<ExpressionConnectorViewModel>(); foreach (var sc in item.GetSubconnectors().OrderBy(x => x.Name)) { item.SubconnectorsLoaded = true; var newConnector = new ExpressionConnectorViewModel(new ExpressionConnector(ConnectorType.Out, sc), _diagramViewModel) { IndentLevel = connector.IndentLevel + 1 }; ConnectorsOut.Insert(++idx, newConnector); newConnectors.Add(newConnector); } if (recursiveExpand) { foreach (var newConnector in newConnectors) { var connectorItem = newConnector.Item as ExpressionConnector; if (connectorItem != null && connectorItem.IsConnectorsGroup && connectorItem.IsConnectorsGroupCollapsed) { continue; } ExpandSubconnectors(newConnector, loadWhenNecessary, true); } } item.Refresh(); _diagramViewModel.RaiseForceRelayout(); }
/// <summary> /// Initializes a new instance of the <see cref="ExpressionConnectorViewModel"/> class. /// </summary> /// <param name="item">The item.</param> /// <param name="diagramViewModel">The diagram view model.</param> public ExpressionConnectorViewModel(ExpressionConnector item, IDiagramViewModel diagramViewModel) { _item = item; _diagramViewModel = diagramViewModel; }
public void WhenConnectorDataTypeChanges_ExpressionConnectorDataTypeIsUpdated() { // Arrange. var expression = new ConstantExpression { ConnectorOut = { DataType = NodeDataType.String } }; var expressionConnector = new ExpressionConnector(ConnectorType.Out, expression.ConnectorOut); Assert.AreEqual(NodeDataType.String, expressionConnector.DataType); // Act. expression.ConnectorOut.DataType = NodeDataType.Int; // Assert. Assert.AreEqual(NodeDataType.Int, expressionConnector.DataType); }
public void PropertiesTests() { var vm = new ExpressionConnector(ConnectorType.In, Mock.Create<IConnector>()); TestsHelper.TestPublicDeclaredPropertiesGetSet(vm, true, x => x.IsKey, x => x.SubconnectorsLoaded, x => x.IsConnectorsGroupCollapsed); }
public void CanConnectTo_WhenConnectionValidatorIsUsed_Disallow() { var diagramViewModel = Mock.Create<IDiagramViewModel>(); var sourceConnector = new ExpressionConnector(ConnectorType.Out, new ConnectorOut(Mock.Create<ExpressionObjectBase>())); sourceConnector.DataType = NodeDataType.CrossReference; Mock.Arrange(() => sourceConnector.Connector).Returns(Mock.Create<IConnectorOut>); var vm = new ExpressionConnectorViewModel(sourceConnector, diagramViewModel); var destinationItemMock = Mock.Create<IConnectorViewModel>(); var destinationConnector = new ExpressionConnector(ConnectorType.In, new ConnectorIn(Mock.Create<ExpressionObjectBase>())); destinationConnector.DataType = NodeDataType.CrossReference; var connector = Mock.Create<IConnectorIn>(); var validator = new CommonConnectionValidator(); Mock.Arrange(() => validator.CanConnect(Arg.IsAny<IConnectorOut>(), Arg.IsAny<IConnectorIn>())) .Returns(ConnectivityState.Define(false, "Validation failed")); Mock.Arrange(() => connector.Validator).Returns(validator); Mock.Arrange(() => destinationConnector.Connector).Returns(connector); Mock.Arrange(() => destinationItemMock.Item).Returns(destinationConnector); var state = vm.CanConnectTo(destinationItemMock, Mock.Create<ICollection<IDiagramItemViewModel>>()); Assert.IsFalse(state.CanConnect); Assert.AreEqual("Validation failed", state.JustificationMessage); }
public void CanConnectTo_WhenTypeMismatch_Disallow() { var diagramViewModel = Mock.Create<IDiagramViewModel>(); var sourceConnector = new ExpressionConnector(ConnectorType.Out, new ConnectorOut(Mock.Create<ExpressionObjectBase>())); sourceConnector.DataType = NodeDataType.Choice; var vm = new ExpressionConnectorViewModel(sourceConnector, diagramViewModel); var destinationItemMock = Mock.Create<IConnectorViewModel>(); var destinationConnector = new ExpressionConnector(ConnectorType.In, new ConnectorIn(Mock.Create<ExpressionObjectBase>())); destinationConnector.DataType = NodeDataType.CrossReference; Mock.Arrange(() => destinationItemMock.Item).Returns(destinationConnector); var state = vm.CanConnectTo(destinationItemMock, Mock.Create<ICollection<IDiagramItemViewModel>>()); Assert.IsFalse(state.CanConnect); Assert.AreEqual( string.Format(CultureInfo.InvariantCulture, LanguageService.Translate("Warn_ExpressionBuilder_TypesAreIncompatible"), sourceConnector.DataType, destinationConnector.DataType), state.JustificationMessage); }