private static void FixRoles(VisioConnector Connector, DomainRelationship Relationship) { String SourceName = new VisioClass(Connector.Source).Name; String TargetName = new VisioClass(Connector.Target).Name; //if (Relationship.Source.RolePlayer == SourceName && // Relationship.Target.RolePlayer == TargetName) return; String SourceText = Connector.SourceText == String.Empty ? SourceName : Connector.SourceText; String TargetText = Connector.TargetText == String.Empty ? TargetName : Connector.TargetText; DomainRole source = Relationship.Source; source.SetAttribute("Name", "s" + SourceName + "Name"); source.SetAttribute("DisplayName", SourceText); source.SetAttribute("PropertyName", "s" + TargetName + "Prop"); source.SetAttribute("PropertyDisplayName", TargetText); source.Multiplicity = MultiplicityHelper.Compatible(Connector.SourceMultiplicity); DomainRole target = Relationship.Target; target.SetAttribute("Name", "t" + TargetName + "Name"); target.SetAttribute("DisplayName", TargetText); target.SetAttribute("PropertyName", "t" + SourceName + "Prop"); target.SetAttribute("PropertyDisplayName", SourceText); target.Multiplicity = MultiplicityHelper.Compatible(Connector.TargetMultiplicity); }
private static bool ExistsSame(VisioPage Page, VisioConnector VisioConnector, String Name) { foreach (VisioConnector vc in Page.Relationships) { if (!VisioConnector.Equals(vc) && vc.Name == Name) { return true; } } return false; }
public static Shape DropConnection( Shape source, Shape target, string masterNameU, ClassConnections sourcePoint, ClassConnections targetPoint) { VisioConnector connector = new VisioConnector( Drop(source.Document, masterNameU, 0, 0) ); connector.SetSource(source, sourcePoint); connector.SetTarget(target, targetPoint); return connector.Shape; }
public static String UniqueName(VisioPage Page, VisioConnector VisioConnector) { String Name = VisioConnector.Name; Regex regex = new Regex(@"^(.*?)([0-9]+)$"); Match m = regex.Match(Name); String BaseName = m.Success ? m.Groups[1].Value : Name; int index = m.Success ? int.Parse(m.Groups[2].Value) : 1; while (ExistsSame(Page, VisioConnector, Name)) { Name = BaseName + (++index); } Trace.WriteLine(Name); return Name; }
private void SynchronizeRelationships(List<DomainRelationship> implementationOnlyRelationships) { Trace.WriteLine("Synchronizing Relationships"); Trace.Indent(); foreach (DomainRelationship dr in Doc.Dsl.Relationships) { Shape shape = Page.Find(dr.GUID); //if (dr.Properties.Count > 0) //{ // // Create a new class for this relationship // // and associate it with an existing Dsl relationship // VisioClass vc = new VisioClass( // shape == null ? VisioMaster.Drop(Page.Document, "Class") : shape); // vc.GUID = dr.GUID; // vc.IsDslRelationClass = true; // vc.Name = dr.Xml.GetAttribute("Name"); // vc.DisplayName = dr.Xml.GetAttribute("DisplayName"); // VisioConnector ingoingConnector = new VisioConnector(VisioMaster.Drop(Page.Document, (dr.IsEmbedding ? Constants.Composition : Constants.Association))); // ingoingConnector.SetSourceMultiplicity(dr.Source.Multiplicity); // ingoingConnector.SetTargetMultiplicity(Multiplicity.One); // Shape sourceShape = Page.Find(Doc.Dsl.Classes[dr.Source.RolePlayer].GUID); // ingoingConnector.Source = sourceShape; // ingoingConnector.Target = vc.Shape; // VisioConnector outgoingConnector = new VisioConnector(VisioMaster.Drop(Page.Document, (dr.IsEmbedding ? Constants.Composition : Constants.Association))); // outgoingConnector.SetSourceMultiplicity(Multiplicity.One); // outgoingConnector.SetTargetMultiplicity(dr.Target.Multiplicity); // outgoingConnector.Source = vc.Shape; // Shape targetShape = Page.Find(Doc.Dsl.Classes[dr.Target.RolePlayer].GUID); // outgoingConnector.Target = targetShape; //} //else if (!implementationOnlyRelationships.Contains(dr)) { VisioConnector vc = new VisioConnector( shape == null ? VisioMaster.Drop(Page.Document, (dr.IsEmbedding ? Constants.Composition : Constants.Association)) : shape ); vc.GUID = dr.GUID; vc.Name = dr.Xml.GetAttribute("Name"); vc.DisplayName = dr.Xml.GetAttribute("DisplayName"); vc.SourceText = dr.Source.Xml.GetAttribute("DisplayName"); vc.TargetText = dr.Target.Xml.GetAttribute("DisplayName"); vc.SetSourceMultiplicity(dr.Source.Multiplicity); vc.SetTargetMultiplicity(dr.Target.Multiplicity); shape = Page.Find(Doc.Dsl.Classes[dr.Source.RolePlayer].GUID); if (vc.Source != shape) vc.Source = shape; shape = Page.Find(Doc.Dsl.Classes[dr.Target.RolePlayer].GUID); if (vc.Target != shape) vc.Target = shape; } } Trace.Unindent(); }
private void SynchronizeClasses(List<DomainClass> implementationOnlyClasses) { Trace.WriteLine("Synchronizing Classes"); Trace.Indent(); foreach (DomainClass dc in Doc.Dsl.Classes) { if (!implementationOnlyClasses.Contains(dc)) { Shape shape = Page.Find(dc.GUID); VisioClass vc = new VisioClass(shape == null ? VisioMaster.Drop(Page.Document, "Class") : shape); vc.GUID = dc.GUID; vc.Name = dc.Xml.GetAttribute("Name"); vc.DisplayName = dc.Xml.GetAttribute("DisplayName"); String attrs = ""; foreach (DomainProperty prop in dc.Properties) { attrs += prop.Xml.GetAttribute("Name") + "\n"; } vc.Attributes = attrs.Trim(); } } foreach (DomainClass dc in Doc.Dsl.Classes) { if (!implementationOnlyClasses.Contains(dc)) { if (dc.BaseClass != null) { Shape vc = Page.Find(dc.GUID); Shape bc = Page.Find(Doc.Dsl.Classes[dc.BaseClass].GUID); VisioList<VisioConnector> connectors = new VisioList<VisioConnector>( Page.Shapes, delegate(Shape shape) { VisioConnector conn = new VisioConnector(shape); return conn.Source == vc && conn.Target == bc; } ); if (connectors.Count == 0) { VisioMaster.DropConnection(vc, bc, Constants.Generalization); } } } } Trace.Unindent(); }
public AssociationAction(VisioConnector targetShape) { Connector = targetShape.ToStaticConnector(); }
public AssociationDeleted(VisioConnector targetShape) : base(targetShape) { }