/// <summary> /// Customize childshape create to set an initial location for a <see cref="TableShape"/> /// </summary> protected override ShapeElement CreateChildShape(ModelElement element) { object tablePositionsObject; Dictionary <Guid, PointD> tablePositions; PointD initialLocation; ReferenceConstraintTargetsTable referenceConstraintTargetsTable; Table table; ConceptType conceptType; ObjectType objectType; if (null != (table = element as Table)) { if (element.Store.TransactionManager.CurrentTransaction.TopLevelTransaction.Context.ContextInfo.TryGetValue(TablePositionDictionaryKey, out tablePositionsObject) && null != (tablePositions = tablePositionsObject as Dictionary <Guid, PointD>) && null != (conceptType = TableIsPrimarilyForConceptType.GetConceptType(table)) && null != (objectType = ConceptTypeIsForObjectType.GetObjectType(conceptType)) && tablePositions.TryGetValue(objectType.Id, out initialLocation)) { return(new TableShape( this.Partition, new PropertyAssignment(TableShape.AbsoluteBoundsDomainPropertyId, new RectangleD(initialLocation, new SizeD(1, 0.3))))); } } else if (null != (referenceConstraintTargetsTable = element as ReferenceConstraintTargetsTable)) { return(new ForeignKeyConnector(Partition)); } return(base.CreateChildShape(element)); }
/// <summary> /// DeletingRule: typeof(ORMSolutions.ORMArchitect.ORMAbstractionToConceptualDatabaseBridge.TableIsPrimarilyForConceptType) /// Cache the position of the <see cref="TableShape"/> corresponding to the object type being deleted /// </summary> private static void ConceptTypeDetachingFromTableRule(ElementDeletingEventArgs e) { TableIsPrimarilyForConceptType link = (TableIsPrimarilyForConceptType)e.ModelElement; ObjectType objectType; if (null != (objectType = ConceptTypeIsForObjectType.GetObjectType(link.ConceptType)) && !objectType.IsDeleting) { RememberTableShapeLocations(objectType, link.Table); } }
/// <summary> /// DeletingRule: typeof(ORMSolutions.ORMArchitect.ORMToORMAbstractionBridge.ConceptTypeIsForObjectType) /// Cache the position of the <see cref="TableShape"/> corresponding to the object type being deleted /// </summary> private static void ConceptTypeDetachingFromObjectTypeRule(ElementDeletingEventArgs e) { ConceptTypeIsForObjectType link = (ConceptTypeIsForObjectType)e.ModelElement; ObjectType objectType = link.ObjectType; Table table; if (!objectType.IsDeleting && null != (table = TableIsPrimarilyForConceptType.GetTable(link.ConceptType))) { RememberTableShapeLocations(objectType, table); } }
private static void UpdateTablesForConceptType(ConceptType conceptType, Predicate <ConceptType> conceptTypeFilter, Predicate <Table> tableFilter) { Table primaryTable = TableIsPrimarilyForConceptType.GetTable(conceptType); LinkedElementCollection <Table> secondaryTables = TableIsAlsoForConceptType.GetTable(conceptType); if (primaryTable != null && (tableFilter == null || !tableFilter(primaryTable))) { UpdateTablePresentationSize(primaryTable); } foreach (Table secondaryTable in secondaryTables) { if (tableFilter == null || !tableFilter(secondaryTable)) { UpdateTablePresentationSize(secondaryTable); } } Predicate <ConceptType> recurseConceptTypeFilter = delegate(ConceptType testConceptType) { return(testConceptType == conceptType || (conceptTypeFilter != null && conceptTypeFilter(testConceptType))); }; Predicate <Table> recurseTableFilter = delegate(Table testTable) { return(testTable == primaryTable || secondaryTables.Contains(testTable)); }; foreach (ConceptType relatingConceptType in ConceptTypeRelatesToConceptType.GetRelatingConceptTypeCollection(conceptType)) { if (relatingConceptType == conceptType || (conceptTypeFilter != null && conceptTypeFilter(relatingConceptType))) { continue; } UpdateTablesForConceptType( relatingConceptType, recurseConceptTypeFilter, recurseTableFilter); } foreach (ConceptType assimilatedConceptType in ConceptTypeAssimilatesConceptType.GetAssimilatedConceptTypeCollection(conceptType)) { if (assimilatedConceptType == conceptType || (conceptTypeFilter != null && conceptTypeFilter(assimilatedConceptType))) { continue; } UpdateTablesForConceptType( assimilatedConceptType, recurseConceptTypeFilter, recurseTableFilter); } }