Ejemplo n.º 1
0
        public void Test5(Store store)
        {
            myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "FullyAbsorbed");

            myTestServices.LogMessage("Separate a one-to-main objectification");
            ORMModel   model              = store.ElementDirectory.FindElements <ORMModel>()[0];
            ObjectType birthObjectType    = (ObjectType)model.ObjectTypesDictionary.GetElement("Birth").FirstElement;
            FactType   factTypeToSeparate = birthObjectType.PreferredIdentifier.RoleCollection[0].Proxy.FactType;
            MappingCustomizationModel customizationModel;

            using (Transaction t = store.TransactionManager.BeginTransaction("Separate assimilated objectification"))
            {
                customizationModel = new MappingCustomizationModel(store);
                AssimilationMapping mapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate));
                new AssimilationMappingCustomizesFactType(mapping, factTypeToSeparate);
                mapping.Model = customizationModel;
                t.Commit();
            }
            myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateObjectification");

            myTestServices.LogMessage("Add a longer assimilation chain with a separate end point");
            ObjectType          partyObjectType = (ObjectType)model.ObjectTypesDictionary.GetElement("Party").FirstElement;
            AssimilationMapping partyIsThingAssimilationMapping;

            using (Transaction t = store.TransactionManager.BeginTransaction("Longer assimilation chain"))
            {
                partyObjectType.ReferenceModeDisplay = "";                 // Using ReferenceModeDisplay instead of ReferenceModeString to automatically kill Party_id
                ObjectType thingObjectType = new ObjectType(store, new PropertyAssignment(ObjectType.NameDomainPropertyId, "Thing"), new PropertyAssignment(ObjectType.IsIndependentDomainPropertyId, true));
                thingObjectType.Model = model;
                thingObjectType.ReferenceModeString = "id";
                SubtypeFact partyIsThingSubtypeFact = SubtypeFact.Create(partyObjectType, thingObjectType);
                partyIsThingAssimilationMapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate));
                new AssimilationMappingCustomizesFactType(partyIsThingAssimilationMapping, partyIsThingSubtypeFact);
                partyIsThingAssimilationMapping.Model = customizationModel;
                t.Commit();
            }

            myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateRemoteSupertype");

            myTestServices.LogMessage("Remove the remote separation");
            using (Transaction t = store.TransactionManager.BeginTransaction(""))
            {
                partyIsThingAssimilationMapping.AbsorptionChoice = AssimilationAbsorptionChoice.Absorb;
                t.Commit();
            }
        }
Ejemplo n.º 2
0
		/// <summary>
		/// Constructor
		/// Creates a AssimilationMappingCustomizesFactType link in the same Partition as the given AssimilationMapping
		/// </summary>
		/// <param name="source">AssimilationMapping to use as the source of the relationship.</param>
		/// <param name="target">FactType to use as the target of the relationship.</param>
		public AssimilationMappingCustomizesFactType(AssimilationMapping source, global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType target)
			: base((source != null ? source.Partition : null), new DslModeling::RoleAssignment[]{new DslModeling::RoleAssignment(AssimilationMappingCustomizesFactType.AssimilationMappingDomainRoleId, source), new DslModeling::RoleAssignment(AssimilationMappingCustomizesFactType.FactTypeDomainRoleId, target)}, null)
		{
		}
Ejemplo n.º 3
0
		public static void SetModel(AssimilationMapping element, MappingCustomizationModel newModel)
		{
			DslModeling::DomainRoleInfo.SetLinkedElement(element, AssimilationMappingDomainRoleId, newModel);
		}
Ejemplo n.º 4
0
		public static MappingCustomizationModel GetModel(AssimilationMapping element)
		{
			return DslModeling::DomainRoleInfo.GetLinkedElement(element, AssimilationMappingDomainRoleId) as MappingCustomizationModel;
		}
Ejemplo n.º 5
0
		/// <summary>
		/// Constructor
		/// Creates a MappingCustomizationModelHasAssimilationMapping link in the same Partition as the given MappingCustomizationModel
		/// </summary>
		/// <param name="source">MappingCustomizationModel to use as the source of the relationship.</param>
		/// <param name="target">AssimilationMapping to use as the target of the relationship.</param>
		public MappingCustomizationModelHasAssimilationMapping(MappingCustomizationModel source, AssimilationMapping target)
			: base((source != null ? source.Partition : null), new DslModeling::RoleAssignment[]{new DslModeling::RoleAssignment(MappingCustomizationModelHasAssimilationMapping.ModelDomainRoleId, source), new DslModeling::RoleAssignment(MappingCustomizationModelHasAssimilationMapping.AssimilationMappingDomainRoleId, target)}, null)
		{
		}
Ejemplo n.º 6
0
		public static void SetFactType(AssimilationMapping element, global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType newFactType)
		{
			DslModeling::DomainRoleInfo.SetLinkedElement(element, AssimilationMappingDomainRoleId, newFactType);
		}
Ejemplo n.º 7
0
		public static global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType GetFactType(AssimilationMapping element)
		{
			return DslModeling::DomainRoleInfo.GetLinkedElement(element, AssimilationMappingDomainRoleId) as global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType;
		}
Ejemplo n.º 8
0
		public static void SetAssimilationMapping(global::ORMSolutions.ORMArchitect.Core.ObjectModel.FactType element, AssimilationMapping newAssimilationMapping)
		{
			DslModeling::DomainRoleInfo.SetLinkedElement(element, FactTypeDomainRoleId, newAssimilationMapping);
		}
        /// <summary>
        /// Get a minimal unique identifier for a column based on mapped roles. The identifer
        /// will stop as soon as the fact type is used in a single column or in a partitioned
        /// or separated column.
        /// </summary>
        /// <param name="column">The <see cref="Column"/> to analyze</param>
        /// <param name="idList">Scratch list used to determine keys</param>
        /// <param name="minKeySize">The minimum number of ids that uniquely
        /// identify this column. The actually key may be longer than this
        /// minimimum for partitioned and separated tables. Key comparisons
        /// may be performed down to this minimum size.</param>
        /// <returns><see langword="true"/> if the key was available.</returns>
        private static bool BuildKey(Column column, List <Guid> idList, out int minKeySize)
        {
            idList.Clear();
            int uniqueUseIndex = -1;

            minKeySize = 0;
            LinkedElementCollection <ConceptTypeChild> childNodes = ColumnHasConceptTypeChild.GetConceptTypeChildPath(column);

            for (int i = childNodes.Count - 1; i >= 0; --i)
            {
                ConceptTypeChild child       = childNodes[i];
                bool             uniqueChild = ColumnHasConceptTypeChild.GetLinksToColumn(child).Count == 1;
                LinkedElementCollection <FactType> pathFactTypes = ConceptTypeChildHasPathFactType.GetPathFactTypeCollection(child);
                int             factTypeCount = pathFactTypes.Count;
                InformationType infoType;
                ObjectType      objectType;
                if (0 != (factTypeCount = pathFactTypes.Count))
                {
                    for (int j = factTypeCount - 1; j >= 0; --j)
                    {
                        FactType factType = pathFactTypes[j];
                        idList.Add(FactTypeMapsTowardsRole.GetTowardsRole(factType).Id);
                        if (-1 == uniqueUseIndex &&
                            uniqueChild &&
                            ConceptTypeChildHasPathFactType.GetLinksToConceptTypeChild(factType).Count == 1)
                        {
                            minKeySize     = idList.Count;
                            uniqueUseIndex = minKeySize - 1;
                        }
                    }
                    ConceptTypeAssimilatesConceptType assimilation;
                    if (uniqueUseIndex != -1 &&
                        null != (assimilation = child as ConceptTypeAssimilatesConceptType) &&
                        AssimilationMapping.GetAbsorptionChoiceFromAssimilation(assimilation) != AssimilationAbsorptionChoice.Absorb)
                    {
                        uniqueUseIndex = idList.Count - 1;
                    }
                }
                else if (null != (infoType = child as InformationType) &&
                         null != (objectType = ConceptTypeIsForObjectType.GetObjectType(infoType.ConceptType)))
                {
                    // Happens for a value column in an object type table, which has one concept type child
                    idList.Add(objectType.Id);
                }
            }
            int count = idList.Count;

            if (0 == count)
            {
                return(false);
            }
            if (uniqueUseIndex != -1 &&
                (uniqueUseIndex + 1) < count)
            {
                idList.RemoveRange(uniqueUseIndex + 1, count - uniqueUseIndex - 1);
            }
            if (minKeySize == 0)
            {
                minKeySize = idList.Count;
            }
            return(true);
        }
Ejemplo n.º 10
0
		public void Test5(Store store)
		{
			myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "FullyAbsorbed");

			myTestServices.LogMessage("Separate a one-to-main objectification");
			ORMModel model = store.ElementDirectory.FindElements<ORMModel>()[0];
			ObjectType birthObjectType = (ObjectType)model.ObjectTypesDictionary.GetElement("Birth").FirstElement;
			FactType factTypeToSeparate = birthObjectType.PreferredIdentifier.RoleCollection[0].Proxy.FactType;
			MappingCustomizationModel customizationModel;
			using (Transaction t = store.TransactionManager.BeginTransaction("Separate assimilated objectification"))
			{
				customizationModel = new MappingCustomizationModel(store);
				AssimilationMapping mapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate));
				new AssimilationMappingCustomizesFactType(mapping, factTypeToSeparate);
				mapping.Model = customizationModel;
				t.Commit();
			}
			myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateObjectification");

			myTestServices.LogMessage("Add a longer assimilation chain with a separate end point");
			ObjectType partyObjectType = (ObjectType)model.ObjectTypesDictionary.GetElement("Party").FirstElement;
			AssimilationMapping partyIsThingAssimilationMapping;
			using (Transaction t = store.TransactionManager.BeginTransaction("Longer assimilation chain"))
			{
				partyObjectType.ReferenceModeDisplay = ""; // Using ReferenceModeDisplay instead of ReferenceModeString to automatically kill Party_id
				ObjectType thingObjectType = new ObjectType(store, new PropertyAssignment(ObjectType.NameDomainPropertyId, "Thing"), new PropertyAssignment(ObjectType.IsIndependentDomainPropertyId, true));
				thingObjectType.Model = model;
				thingObjectType.ReferenceModeString = "id";
				SubtypeFact partyIsThingSubtypeFact = SubtypeFact.Create(partyObjectType, thingObjectType);
				partyIsThingAssimilationMapping = new AssimilationMapping(store, new PropertyAssignment(AssimilationMapping.AbsorptionChoiceDomainPropertyId, AssimilationAbsorptionChoice.Separate));
				new AssimilationMappingCustomizesFactType(partyIsThingAssimilationMapping, partyIsThingSubtypeFact);
				partyIsThingAssimilationMapping.Model = customizationModel;
				t.Commit();
			}

			myTestServices.Compare(store, (MethodInfo)MethodInfo.GetCurrentMethod(), "SeparateRemoteSupertype");

			myTestServices.LogMessage("Remove the remote separation");
			using (Transaction t = store.TransactionManager.BeginTransaction(""))
			{
				partyIsThingAssimilationMapping.AbsorptionChoice = AssimilationAbsorptionChoice.Absorb;
				t.Commit();
			}
		}