Ejemplo n.º 1
0
 /// <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;
 }
Ejemplo n.º 2
0
        /// <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();
        }
Ejemplo n.º 3
0
        /// <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;
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }