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)); } } }
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);
private static IModelRelationship CreateRelationship( ModelNodeId sourceId, ModelNodeId targetId, ModelRelationshipStereotype stereotype, [CanBeNull] object payload) { return(new ModelRelationship(ModelRelationshipId.Create(), sourceId, targetId, stereotype, payload)); }
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))) )); }
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)); }
public void RemoveRelationship(ModelRelationshipId relationshipId) { lock (ModelUpdateLockObject) { var oldRelationship = Model.GetRelationship(relationshipId); Model = Model.RemoveRelationship(relationshipId); ModelChanged?.Invoke(new ModelRelationshipRemovedEvent(Model, oldRelationship)); } }
private IEnumerable <ModelEventBase> RemoveRelationshipCore(ModelRelationshipId relationshipId) { lock (ModelUpdateLockObject) { var oldRelationship = Model.GetRelationship(relationshipId); Model = Model.RemoveRelationship(relationshipId); yield return(new ModelRelationshipRemovedEvent(Model, oldRelationship)); } }
private DiagramOperationResult RemoveConnectorCore(ModelRelationshipId relationshipId, DiagramOperationResult diagramOperationResult) { return(TryGetConnector(relationshipId) .Match( some => diagramOperationResult .Remove(some) .Add(new DiagramConnectorRemovedEvent(some)), () => diagramOperationResult )); }
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)); }
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)); }
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)); }
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."); } }
public void RemoveConnector(ModelRelationshipId relationshipId) { if (!DiagramConnectorExists(relationshipId)) { return; } var oldConnector = GetDiagramConnector(relationshipId); _connectors.Remove(relationshipId); _shapeEvents.Add(new DiagramConnectorRemovedEvent(oldConnector)); }
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; }
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)); }
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)); } }
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)); }
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); }
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}"); }
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) ); }
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)); }
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)); }
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)); }
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))); }