Exemple #1
0
        /// <summary>
        /// Update All <see cref="CDP4Common.DTO.ActualFiniteStateList"/> related to a modified <see cref="CDP4Common.DTO.PossibleFiniteStateList"/>
        /// </summary>
        /// <param name="possibleFiniteStateList">
        /// The container instance of the <see cref="CDP4Common.DTO.PossibleFiniteStateList"/> that is inspected.
        /// </param>
        /// <param name="transaction">
        /// The current transaction to the database.
        /// </param>
        /// <param name="partition">
        /// The database partition (schema) where the requested resource will be stored.
        /// </param>
        /// <param name="securityContext">
        /// The security Context used for permission checking.
        /// </param>
        public void UpdateAllRelevantActualFiniteStateList(PossibleFiniteStateList possibleFiniteStateList, NpgsqlTransaction transaction, string partition, ISecurityContext securityContext)
        {
            // redirect out the iteration partition to the engineeringmodel one, as that contains the iteration information
            var engineeringModelPartition = partition.Replace(
                CDP4Orm.Dao.Utils.IterationSubPartition,
                CDP4Orm.Dao.Utils.EngineeringModelPartition);

            var iteration =
                this.IterationService.GetShallow(transaction, engineeringModelPartition, null, securityContext)
                .Where(i => i is Iteration).Cast <Iteration>()
                .SingleOrDefault();

            if (iteration == null)
            {
                throw new InvalidOperationException("The iteration could not be found.");
            }

            // get all actual finite state list
            var actualFiniteStateList         = this.ActualFiniteStateListService.GetShallow(transaction, partition, null, securityContext).Cast <ActualFiniteStateList>();
            var actualFiniteStateListToUpdate = actualFiniteStateList.Where(x => x.PossibleFiniteStateList.Select(item => Guid.Parse(item.V.ToString())).Contains(possibleFiniteStateList.Iid));

            foreach (var finiteStateList in actualFiniteStateListToUpdate)
            {
                this.UpdateActualFinisteStateList(finiteStateList, iteration, transaction, partition, securityContext);
            }
        }
        /// <summary>
        /// Modify the <see cref="CDP4Common.DTO.ActualFiniteState.Kind"/> state of the potential new default actual state to "Mandatory"
        /// </summary>
        /// <param name="possibleFiniteStateList">The updated <see cref="PossibleFiniteStateList"/></param>
        /// <returns>A <see cref="IEnumerable{T}"/> of new <see cref="Operation"/>s</returns>
        private IEnumerable <Operation> ModifyActualStateKindOnDefaultPossibleStateUpdate(PossibleFiniteStateList possibleFiniteStateList)
        {
            var operations     = new List <Operation>();
            var defaultStateId = possibleFiniteStateList.DefaultState;

            if (!defaultStateId.HasValue)
            {
                return(operations);
            }

            // gets the actualList that uses the updated possible list
            var actualLists = this.session.Assembler.Cache.Select(x => x.Value)
                              .Select(x => x.Value)
                              .OfType <ActualFiniteStateList>()
                              .Where(x => x.PossibleFiniteStateList.Select(pl => pl.Iid).Contains(possibleFiniteStateList.Iid))
                              .ToList();

            foreach (var actualFiniteStateList in actualLists)
            {
                var possibleLists = actualFiniteStateList.PossibleFiniteStateList.Where(x => x.Iid != possibleFiniteStateList.Iid).ToList();
                if (possibleLists.Any(x => x.DefaultState == null))
                {
                    // one of the possible list has no default state
                    continue;
                }

                var defaultPossibleStatesIds = possibleLists.Select(x => x.DefaultState.Iid).ToList();
                defaultPossibleStatesIds.Add(defaultStateId.Value);

                // get the "default" actual state
                var defaultActualState =
                    actualFiniteStateList.ActualState.SingleOrDefault(
                        x =>
                        x.PossibleState.Select(ps => ps.Iid).Intersect(defaultPossibleStatesIds).Count() ==
                        defaultPossibleStatesIds.Count);

                if (defaultActualState == null || defaultActualState.Kind == ActualFiniteStateKind.MANDATORY)
                {
                    continue;
                }

                // the new default is forbidden, send update with mandatory
                var actualStateDto = (ActualFiniteState)defaultActualState.ToDto();
                actualStateDto.Kind = ActualFiniteStateKind.MANDATORY;
                var newOperation = new Operation(defaultActualState.ToDto(), actualStateDto, OperationKind.Update);
                operations.Add(newOperation);
            }

            return(operations);
        }
Exemple #3
0
        /// <summary>
        /// Instantiate and deserialize the properties of a <paramref name="PossibleFiniteStateList"/>
        /// </summary>
        /// <param name="jObject">The <see cref="JObject"/> containing the data</param>
        /// <returns>The <see cref="PossibleFiniteStateList"/> to instantiate</returns>
        public static CDP4Common.DTO.PossibleFiniteStateList FromJsonObject(JObject jObject)
        {
            var iid                     = jObject["iid"].ToObject <Guid>();
            var revisionNumber          = jObject["revisionNumber"].IsNullOrEmpty() ? 0 : jObject["revisionNumber"].ToObject <int>();
            var possibleFiniteStateList = new CDP4Common.DTO.PossibleFiniteStateList(iid, revisionNumber);

            if (!jObject["alias"].IsNullOrEmpty())
            {
                possibleFiniteStateList.Alias.AddRange(jObject["alias"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["category"].IsNullOrEmpty())
            {
                possibleFiniteStateList.Category.AddRange(jObject["category"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["defaultState"].IsNullOrEmpty())
            {
                possibleFiniteStateList.DefaultState = jObject["defaultState"].ToObject <Guid?>();
            }

            if (!jObject["definition"].IsNullOrEmpty())
            {
                possibleFiniteStateList.Definition.AddRange(jObject["definition"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["excludedDomain"].IsNullOrEmpty())
            {
                possibleFiniteStateList.ExcludedDomain.AddRange(jObject["excludedDomain"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["excludedPerson"].IsNullOrEmpty())
            {
                possibleFiniteStateList.ExcludedPerson.AddRange(jObject["excludedPerson"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["hyperLink"].IsNullOrEmpty())
            {
                possibleFiniteStateList.HyperLink.AddRange(jObject["hyperLink"].ToObject <IEnumerable <Guid> >());
            }

            if (!jObject["modifiedOn"].IsNullOrEmpty())
            {
                possibleFiniteStateList.ModifiedOn = jObject["modifiedOn"].ToObject <DateTime>();
            }

            if (!jObject["name"].IsNullOrEmpty())
            {
                possibleFiniteStateList.Name = jObject["name"].ToObject <string>();
            }

            if (!jObject["owner"].IsNullOrEmpty())
            {
                possibleFiniteStateList.Owner = jObject["owner"].ToObject <Guid>();
            }

            if (!jObject["possibleState"].IsNullOrEmpty())
            {
                possibleFiniteStateList.PossibleState.AddRange(jObject["possibleState"].ToOrderedItemCollection());
            }

            if (!jObject["shortName"].IsNullOrEmpty())
            {
                possibleFiniteStateList.ShortName = jObject["shortName"].ToObject <string>();
            }

            if (!jObject["thingPreference"].IsNullOrEmpty())
            {
                possibleFiniteStateList.ThingPreference = jObject["thingPreference"].ToObject <string>();
            }

            return(possibleFiniteStateList);
        }