Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        /// <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);
            }
        }