Beispiel #1
0
        private void ApplyConnectorLayout(
            [NotNull] IEnumerable <LineLayoutInfo> lineLayoutList,
            [NotNull][ItemNotNull] ICollection <DiagramShapeEventBase> events,
            [NotNull] IDictionary <ModelRelationshipId, IDiagramConnector> updatedConnectors)
        {
            foreach (var lineLayoutInfo in lineLayoutList)
            {
                var modelRelationshipIdNodeId = ModelRelationshipId.Parse(lineLayoutInfo.ShapeId);
                var maybeCurrentConnector     = TryGetConnector(modelRelationshipIdNodeId);
                if (!maybeCurrentConnector.HasValue)
                {
                    continue;
                }

                var oldConnector = maybeCurrentConnector.Value;

                var newConnector = oldConnector.WithRoute(lineLayoutInfo.Route);
                updatedConnectors.Add(oldConnector.Id, newConnector);

                if (oldConnector.Route != newConnector.Route)
                {
                    events.Add(new DiagramConnectorRouteChangedEvent(oldConnector, newConnector));
                }
            }
        }
Beispiel #2
0
        private IEnumerable <ModelEventBase> RemoveRelationshipCore(ModelRelationshipId relationshipId)
        {
            var oldRelationship = LatestModel.GetRelationship(relationshipId);

            LatestModel = LatestModel.RemoveRelationship(relationshipId);
            yield return(new ModelRelationshipRemovedEvent(LatestModel, oldRelationship));
        }
 public ModelRelationship(ModelRelationshipId id, ModelNodeId source, ModelNodeId target, ModelRelationshipStereotype stereotype)
 {
     Id         = id;
     Source     = source;
     Target     = target;
     Stereotype = stereotype ?? throw new ArgumentNullException(nameof(stereotype));
 }
 private static ModelRelationship CreateInstance(
     ModelRelationshipId id,
     ModelNodeId source,
     ModelNodeId target,
     ModelRelationshipStereotype stereotype,
     [CanBeNull] object payload)
 => new ModelRelationship(id, source, target, stereotype, payload);
Beispiel #5
0
 private static IModelRelationship CreateRelationship(
     ModelNodeId sourceId,
     ModelNodeId targetId,
     ModelRelationshipStereotype stereotype,
     [CanBeNull] object payload)
 {
     return(new ModelRelationship(ModelRelationshipId.Create(), sourceId, targetId, stereotype, payload));
 }
Beispiel #6
0
 public ILayoutGroup RemoveConnector(ModelRelationshipId connectorId)
 {
     return(_graph.TryGetEdge(connectorId).Match(
                i => CreateInstance(_graph.RemoveEdge(connectorId)),
                () => CreateInstance(
                    _graph.UpdateVertices(j => j is IContainerDiagramNode, j => (j as IContainerDiagramNode).RemoveConnector(connectorId)))
                ));
 }
Beispiel #7
0
        public ModelEvent RemoveRelationship(ModelRelationshipId relationshipId)
        {
            var itemEvents = new List <ModelItemEventBase>();
            var newGraph   = RemoveRelationshipCore(relationshipId, _graph, itemEvents);

            var newModel = CreateInstance(newGraph);

            return(ModelEvent.Create(newModel, itemEvents));
        }
Beispiel #8
0
 public void RemoveRelationship(ModelRelationshipId relationshipId)
 {
     lock (ModelUpdateLockObject)
     {
         var oldRelationship = Model.GetRelationship(relationshipId);
         Model = Model.RemoveRelationship(relationshipId);
         ModelChanged?.Invoke(new ModelRelationshipRemovedEvent(Model, oldRelationship));
     }
 }
Beispiel #9
0
 private IEnumerable <ModelEventBase> RemoveRelationshipCore(ModelRelationshipId relationshipId)
 {
     lock (ModelUpdateLockObject)
     {
         var oldRelationship = Model.GetRelationship(relationshipId);
         Model = Model.RemoveRelationship(relationshipId);
         yield return(new ModelRelationshipRemovedEvent(Model, oldRelationship));
     }
 }
Beispiel #10
0
 private DiagramOperationResult RemoveConnectorCore(ModelRelationshipId relationshipId, DiagramOperationResult diagramOperationResult)
 {
     return(TryGetConnector(relationshipId)
            .Match(
                some => diagramOperationResult
                .Remove(some)
                .Add(new DiagramConnectorRemovedEvent(some)),
                () => diagramOperationResult
                ));
 }
Beispiel #11
0
        private IModelRelationship CreateModelRelationship(
            [NotNull] string sourceNodeName,
            [NotNull] string targetNodeName,
            ModelRelationshipStereotype?stereotype = null)
        {
            var sourceNodeId = GetNodeIdByName(sourceNodeName);
            var targetNodeId = GetNodeIdByName(targetNodeName);

            return(new ModelRelationship(ModelRelationshipId.Create(), sourceNodeId, targetNodeId, stereotype ?? ModelRelationshipStereotype.Default));
        }
Beispiel #12
0
        private IModelGraph RemoveRelationshipCore(
            ModelRelationshipId relationshipId,
            [NotNull] IModelGraph modelGraph,
            [NotNull][ItemNotNull] ICollection <ModelItemEventBase> itemEvents)
        {
            var oldRelationship = GetRelationship(relationshipId);

            itemEvents.Add(new ModelRelationshipRemovedEvent(oldRelationship));
            return(modelGraph.RemoveEdge(relationshipId));
        }
Beispiel #13
0
        public ModelEvent RemoveRelationship(ModelRelationshipId relationshipId)
        {
            var itemEvents = new List <ModelItemEventBase>();

            var(newGraph, newPayloadToModelRelationshipMap) = RemoveRelationshipCore(relationshipId, _graph, _payloadToModelRelationshipMap, itemEvents);

            var newModel = CreateInstance(newGraph, _payloadToModelNodeMap, newPayloadToModelRelationshipMap);

            return(ModelEvent.Create(newModel, itemEvents));
        }
Beispiel #14
0
        private IEnumerable <DiagramEventBase> RemoveConnectorCore(ModelRelationshipId relationshipId)
        {
            if (!LatestDiagram.ConnectorExists(relationshipId))
            {
                yield break;
            }

            var oldConnector = LatestDiagram.GetConnector(relationshipId);

            LatestDiagram = LatestDiagram.RemoveConnector(relationshipId);
            yield return(new DiagramConnectorRemovedEvent(LatestDiagram, oldConnector));
        }
        public ModelRelationship(ModelRelationshipId id, IModelNode source, IModelNode target, ModelRelationshipStereotype stereotype)
        {
            Id         = id;
            Source     = source ?? throw new ArgumentNullException(nameof(source));
            Target     = target ?? throw new ArgumentNullException(nameof(target));
            Stereotype = stereotype ?? throw new ArgumentNullException(nameof(stereotype));

            if (!IsValidSourceAndTargetType(source, target))
            {
                throw new ArgumentException($"{source.Stereotype} and {target.Stereotype} can not be in {Stereotype} relationship.");
            }
        }
Beispiel #16
0
        public void RemoveConnector(ModelRelationshipId relationshipId)
        {
            if (!DiagramConnectorExists(relationshipId))
            {
                return;
            }

            var oldConnector = GetDiagramConnector(relationshipId);

            _connectors.Remove(relationshipId);

            _shapeEvents.Add(new DiagramConnectorRemovedEvent(oldConnector));
        }
Beispiel #17
0
        public void RemoveConnector(ModelRelationshipId relationshipId)
        {
            if (!_connectors.ContainsKey(relationshipId))
            {
                return;
            }

            var oldConnector = _connectors[relationshipId];

            _connectors.Remove(relationshipId);

            _shapeEvents.Add(new DiagramConnectorRemovedEvent(oldConnector));
        }
 public ModelRelationship(
     ModelRelationshipId id,
     ModelNodeId source,
     ModelNodeId target,
     ModelRelationshipStereotype stereotype,
     [CanBeNull] object payload = null)
 {
     Id         = id;
     Source     = source;
     Target     = target;
     Stereotype = stereotype;
     Payload    = payload;
 }
Beispiel #19
0
        public void UpdateConnectorRoute(ModelRelationshipId relationshipId, Route newRoute)
        {
            if (!_connectors.ContainsKey(relationshipId))
            {
                return;
            }

            var oldConnector = _connectors[relationshipId];
            var newConnector = oldConnector.WithRoute(newRoute);

            _connectors[relationshipId] = newConnector;

            _shapeEvents.Add(new DiagramConnectorRouteChangedEvent(oldConnector, newConnector));
        }
Beispiel #20
0
        public void RemoveConnector(ModelRelationshipId connectorId)
        {
            lock (_diagramUpdateLockObject)
            {
                if (!Diagram.ConnectorExists(connectorId))
                {
                    return;
                }

                var oldConnector = Diagram.GetConnector(connectorId);
                Diagram = Diagram.RemoveConnector(connectorId);
                DiagramChanged?.Invoke(new DiagramConnectorRemovedEvent(Diagram, oldConnector));
            }
        }
Beispiel #21
0
        private IEnumerable <DiagramEventBase> UpdateRouteCore(ModelRelationshipId relationshipId, Route newRoute)
        {
            var maybeDiagramConnector = LatestDiagram.TryGetConnector(relationshipId);

            if (!maybeDiagramConnector.HasValue)
            {
                throw new InvalidOperationException($"Connector {relationshipId} does not exist.");
            }

            var oldConnector = maybeDiagramConnector.Value;
            var newConnector = oldConnector.WithRoute(newRoute);

            LatestDiagram = LatestDiagram.UpdateConnector(newConnector);
            yield return(new DiagramConnectorRouteChangedEvent(LatestDiagram, oldConnector, newConnector));
        }
Beispiel #22
0
        public DiagramEvent UpdateConnectorRoute(ModelRelationshipId relationshipId, Route newRoute)
        {
            var maybeDiagramConnector = TryGetConnector(relationshipId);

            if (!maybeDiagramConnector.HasValue)
            {
                throw new InvalidOperationException($"Connector {relationshipId} does not exist.");
            }

            var oldConnector = maybeDiagramConnector.Value;
            var newConnector = oldConnector.WithRoute(newRoute);
            var newDiagram   = CreateInstance(Model, _nodes, _connectors.SetItem(relationshipId, newConnector));

            return(DiagramEvent.Create(newDiagram, new DiagramConnectorRouteChangedEvent(oldConnector, newConnector)));
        }
        public TestModelBuilder AddProperty(string typeName, string propertyName, string propertyTypeName)
        {
            var ownerTypeNode = GetNodeByName(typeName);
            var propertyNode  = new PropertyNode(ModelNodeId.Create(), propertyName);

            ModelService.AddNode(propertyNode, ownerTypeNode);
            ModelService.AddItemToCurrentGroup(propertyNode);

            var propertyTypeNode = GetNodeByName(propertyTypeName);
            var association      = new AssociationRelationship(ModelRelationshipId.Create(), propertyNode, propertyTypeNode);

            ModelService.AddRelationship(association);

            return(this);
        }
Beispiel #24
0
 public void UpdateConnectorRoute(ModelRelationshipId connectorId, Route newRoute)
 {
     lock (_diagramUpdateLockObject)
     {
         Diagram
         .TryGetConnector(connectorId)
         .Match(
             oldConnector =>
         {
             var newConnector = oldConnector.WithRoute(newRoute);
             Diagram          = Diagram.UpdateConnector(newConnector);
             DiagramChanged?.Invoke(new DiagramConnectorRouteChangedEvent(Diagram, oldConnector, newConnector));
         },
             () => throw new InvalidOperationException($"Connector {connectorId} does not exist."));
     }
 }
        public static ModelRelationship CreateRoslynRelationship(IRoslynModelNode sourceNode, IRoslynModelNode targetNode, ModelRelationshipStereotype stereotype)
        {
            var id = ModelRelationshipId.Create();

            if (stereotype == ModelRelationshipStereotypes.Inheritance)
            {
                return(new InheritanceRelationship(id, sourceNode, targetNode));
            }

            if (stereotype == ModelRelationshipStereotypes.Implementation)
            {
                return(new ImplementationRelationship(id, sourceNode, targetNode));
            }

            throw new InvalidOperationException($"Unexpected relationship type {stereotype.Name}");
        }
Beispiel #26
0
        private (IModelGraph, ImmutableDictionary <object, IModelRelationship>) RemoveRelationshipCore(
            ModelRelationshipId relationshipId,
            [NotNull] IModelGraph modelGraph,
            [NotNull] ImmutableDictionary <object, IModelRelationship> payloadToModelRelationshipMap,
            [NotNull][ItemNotNull] ICollection <ModelItemEventBase> itemEvents)
        {
            var oldRelationship = GetRelationship(relationshipId);

            itemEvents.Add(new ModelRelationshipRemovedEvent(oldRelationship));

            return(
                modelGraph.RemoveEdge(relationshipId),
                oldRelationship.Payload == null
                    ? payloadToModelRelationshipMap
                    : payloadToModelRelationshipMap.Remove(oldRelationship.Payload)
                );
        }
Beispiel #27
0
        private static IDiagramConnector CreateConnector(
            [NotNull] IImmutableSet <IDiagramNode> nodes,
            [NotNull] string sourceNodeName,
            [NotNull] string targetNodeName)
        {
            var sourceNode       = nodes.Single(i => i.Name == sourceNodeName);
            var targetNode       = nodes.Single(i => i.Name == targetNodeName);
            var relationshipName = $"{sourceNodeName}->{targetNodeName}";

            var relationship = new ModelRelationship(
                ModelRelationshipId.Create(),
                sourceNode.Id,
                targetNode.Id,
                ModelRelationshipStereotype.Default,
                relationshipName);

            return(new DiagramConnector(relationship, ConnectorTypes.Dependency));
        }
Beispiel #28
0
        public void AddConnector(ModelRelationshipId relationshipId)
        {
            if (_connectors.ContainsKey(relationshipId))
            {
                return;
            }

            var maybeRelationship = _model.TryGetRelationship(relationshipId);

            if (!maybeRelationship.HasValue)
            {
                throw new InvalidOperationException($"Relationship {relationshipId} does not exist.");
            }

            var newConnector = CreateConnector(maybeRelationship.Value);

            _connectors.Add(relationshipId, newConnector);

            _shapeEvents.Add(new DiagramConnectorAddedEvent(newConnector));
        }
Beispiel #29
0
        private IEnumerable <DiagramEventBase> AddConnectorCore(ModelRelationshipId relationshipId)
        {
            var maybeConnector = LatestDiagram.TryGetConnector(relationshipId);

            if (maybeConnector.HasValue)
            {
                yield break;
            }

            var maybeRelationship = LatestDiagram.Model.TryGetRelationship(relationshipId);

            if (!maybeRelationship.HasValue)
            {
                throw new InvalidOperationException($"Relationship {relationshipId} does not exist.");
            }

            var connector = CreateConnector(maybeRelationship.Value);

            LatestDiagram = LatestDiagram.AddConnector(connector);
            yield return(new DiagramConnectorAddedEvent(LatestDiagram, connector));
        }
Beispiel #30
0
        public DiagramEvent AddConnector(ModelRelationshipId relationshipId)
        {
            var maybeConnector = TryGetConnector(relationshipId);

            if (maybeConnector.HasValue)
            {
                return(DiagramEvent.None(this));
            }

            var maybeRelationship = Model.TryGetRelationship(relationshipId);

            if (!maybeRelationship.HasValue)
            {
                throw new InvalidOperationException($"Relationship {relationshipId} does not exist.");
            }

            var newConnector = CreateConnector(maybeRelationship.Value);
            var newDiagram   = CreateInstance(Model, _nodes, _connectors.Add(newConnector.Id, newConnector));

            return(DiagramEvent.Create(newDiagram, new DiagramConnectorAddedEvent(newConnector)));
        }