Exemplo n.º 1
0
        /// <summary>
        /// Finds the instance that represents this object in persistance tier. For this reaseon it is used the data component
        /// </summary>
        public ONInstance Find(ONFilterList onFilterList)
        {
            ONData       lData       = ONContext.GetComponent_Data(ClassName, OnContext);
            ONCollection lCollection = lData.ExecuteQuery(new ONLinkedToList(), onFilterList, null, null, null, 0);

            ONInstance lInstance = null;

            if (lCollection.Count > 0)
            {
                lInstance = lCollection[0];
                Copy(lInstance);
            }
            return(lInstance);
        }
Exemplo n.º 2
0
        /// <summary>
        /// PostProcess method of the AOP
        /// </summary>
        /// <param name="inst">Instance</param>
        /// <param name="msg">Message</param>
        /// <param name="msgReturn">Return Message</param>
        public void Postprocess(MarshalByRefObject inst, IMessage msg, ref IMessage msgReturn)
        {
            IMethodCallMessage   lMsgIn  = msg as IMethodCallMessage;
            IMethodReturnMessage lMsgOut = msgReturn as IMethodReturnMessage;

            // Extract Action
            ONAction lAction = inst as ONAction;

            // Update Data
            if ((ServiceType == ServiceTypeEnumeration.New) || (ServiceType == ServiceTypeEnumeration.Destroy))
            {
                // Add ModifiedClass
                lAction.OnContext.AddModifiedClass(lAction);
            }
            else
            {
                if ((ServiceType == ServiceTypeEnumeration.Carrier) || (ServiceType == ServiceTypeEnumeration.Liberator))
                {
                    // Add ModifiedClass
                    lAction.OnContext.AddModifiedClass(lAction);
                }
                else if (lAction.Instance.Modified)
                {
                    // Update Instance
                    ONData lData = ONContext.GetComponent_Data(lAction.ClassName, lAction.OnContext);
                    lData.UpdateEdited(lAction.Instance);

                    // Add ModifiedClass
                    lAction.OnContext.AddModifiedClass(lAction);
                }
                lAction.Instance.ModifiedInTransaction = false;

                // Update Inheritance net data
                foreach (ONInstance lNetInstance in lAction.Instance.GetFacets())
                {
                    if (((object)lNetInstance != null) && (lNetInstance.ClassName != lAction.Instance.ClassName) && lNetInstance.Modified)
                    {
                        // Update inheritance net Instance
                        ONData lData = ONContext.GetComponent_Data(lNetInstance.ClassName, lNetInstance.OnContext);
                        lData.UpdateEdited(lNetInstance);

                        // Create action class
                        ONAction lNetAction = ONContext.GetComponent_Action(lNetInstance.ClassName, lNetInstance.OnContext);
                        lNetAction.Instance = lNetInstance;

                        // Add inheritance net ModifiedClass
                        lAction.OnContext.AddModifiedClass(lNetAction);
                    }

                    if ((object)lNetInstance != null)
                    {
                        lNetInstance.ModifiedInTransaction = false;
                    }
                }

                if (lAction.OnContext.ModifiedClass.ContainsKey(lAction.Instance.Oid))
                {
                    ONAction lNetAction = ONContext.GetComponent_Action(lAction.Instance.Root().ClassName, lAction.Instance.Root().OnContext);
                    lNetAction.Instance = lAction.Instance.Root();

                    lAction.OnContext.AddUnmodifiedClass(lNetAction);
                }
            }

            lAction.Instance.CleanDerivationCache();

            // Calculate OutboundArgumets
            object[] lArgs = lMsgOut.Args;
            mServiceCacheItem.InvoqueOutboundArguments(lAction, lArgs);

            // Pop the OID from Class Stack
            lAction.OnContext.TransactionStack.Pop();
            mInStack = false;

            // Restoing the old context of the This instance
            if (mThisOnContext != null)
            {
                lAction.Instance.OnContext = mThisOnContext;
            }

            msgReturn = new ReturnMessage(lMsgOut.ReturnValue, lArgs, lArgs.Length, lMsgOut.LogicalCallContext, lMsgIn);
            if (lAction.OnContext.TransactionStack.Count == 0)
            {
                // Check triggers
                lAction.OnContext.CheckTriggers();

                // Check integrity constraints
                lAction.OnContext.CheckIntegrityConstraints();
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Adds an instance to the collection in the order that the Order Criteria sets.
        /// </summary>
        /// <param name="instance">Instance to add</param>
        /// <param name="comparer">Order criteria to apply</param>
        /// <param name="onContext">context of the query</param>
        public void AddOrdered(ONInstance instance, ONOrderCriteria comparer, ONContext onContext)
        {
            // Empty lists
            if (Count == 0)
            {
                Add(instance);
                return;
            }

            int i            = 0;
            int j            = 0;
            int lComparation = 0;

            // Clone and clear collection
            ONCollection lList = Clone() as ONCollection;

            this.Clear();

            // Create data component for default comparation
            ONData lData = null;

            if (comparer == null)
            {
                lData = ONContext.GetComponent_Data(ClassName, onContext);
            }

            ONInstance lInstance1 = lList.Array[i];

            while ((i < lList.Count) && (j < 1))
            {
                if (comparer != null)
                {
                    lComparation = comparer.CompareUnion(lInstance1, instance);
                }
                else
                {
                    lComparation = lData.CompareUnionOID(lInstance1, instance);
                }

                if (lComparation < 0)
                {
                    Add(lInstance1);
                    i += 1;
                    if (lList.Count > i)
                    {
                        lInstance1 = lList.Array[i];
                    }
                }
                else if (lComparation > 0)
                {
                    Add(instance);
                    j += 1;
                }
                else
                {
                    Add(lInstance1);
                    Add(instance);
                    i += 1;
                    j += 1;
                }
            }

            AddRange(lList);
            if (j == 0)
            {
                Add(instance);
            }
        }
        public void Postprocess(MarshalByRefObject inst, IMessage msg, ref IMessage msgReturn)
        {
            IMethodCallMessage   lMsgIn  = msg as IMethodCallMessage;
            IMethodReturnMessage lMsgOut = msgReturn as IMethodReturnMessage;
            int lIndex = 0;

            // Extract Action
            ONAction lAction = inst as ONAction;

            // Shared Event Control
            if (mReflexivePrincipal == false) // No-Principal Shared Event
            {
                return;
            }
            lAction.OnContext.InSharedContext = false;

            if ((ServiceType != ServiceTypeEnumeration.Destroy) && (ServiceType != ServiceTypeEnumeration.New))
            {
                if (mReflexiveClass.Key.Instance.Modified)
                {
                    // Update Instance
                    ONData lData = ONContext.GetComponent_Data(mReflexiveClass.Key.ClassName, lAction.OnContext);
                    lData.UpdateEdited(mReflexiveClass.Key.Instance);

                    // Add ModifiedClass
                    lAction.OnContext.AddModifiedClass(mReflexiveClass.Key);
                }
                else if (ServiceType == ServiceTypeEnumeration.Insertion || ServiceType == ServiceTypeEnumeration.Deletion)
                {
                    // Add ModifiedClass
                    lAction.OnContext.AddUnmodifiedClass(mReflexiveClass.Key);
                }

                // Update Inheritance net data
                foreach (ONInstance lNetInstance in mReflexiveClass.Key.Instance.GetFacets())
                {
                    if (((object)lNetInstance != null) && (lNetInstance.ClassName != mReflexiveClass.Key.ClassName) && lNetInstance.Modified)
                    {
                        // Update inheritance net Instance
                        ONData lData = ONContext.GetComponent_Data(lNetInstance.ClassName, lNetInstance.OnContext);
                        lData.UpdateEdited(lNetInstance);

                        // Create action class
                        ONAction lNetAction = ONContext.GetComponent_Action(lNetInstance.ClassName, lNetInstance.OnContext);
                        lNetAction.Instance = lNetInstance;

                        // Add inheritance net ModifiedClass
                        lAction.OnContext.AddModifiedClass(mReflexiveClass.Key);
                    }
                }
            }

            if ((ServiceType != ServiceTypeEnumeration.Destroy) && (ServiceType != ServiceTypeEnumeration.New))
            {
                if (lAction.Instance.Modified)
                {
                    // Update Instance
                    ONData lData = ONContext.GetComponent_Data(lAction.ClassName, lAction.OnContext);
                    lData.UpdateEdited(lAction.Instance);

                    // Add ModifiedClass
                    lAction.OnContext.AddModifiedClass(lAction);
                }
                else
                {
                    // Add ModifiedClass
                    lAction.OnContext.AddUnmodifiedClass(lAction);
                }

                // Update Inheritance net data
                foreach (ONInstance lNetInstance in lAction.Instance.GetFacets())
                {
                    if (((object)lNetInstance != null) && (lNetInstance.ClassName != lAction.ClassName) && lNetInstance.Modified)
                    {
                        // Update inheritance net Instance
                        ONData lData = ONContext.GetComponent_Data(lNetInstance.ClassName, lNetInstance.OnContext);
                        lData.UpdateEdited(lNetInstance);

                        // Create action class
                        ONAction lNetAction = ONContext.GetComponent_Action(lNetInstance.ClassName, lNetInstance.OnContext);
                        lNetAction.Instance = lNetInstance;

                        // Add inheritance net ModifiedClass
                        lAction.OnContext.AddModifiedClass(lAction);
                    }
                }
            }

            // Calculate Shared OutboundArguments
            lIndex = 0;
            object[] lArgs = lMsgOut.Args;
            mServiceCacheItems[lIndex++].InvoqueOutboundArguments(mReflexiveClass.Key, mReflexiveClass.Value);

            // Copy outbound arguments (only not initialized)
            for (int i = lMsgOut.ArgCount - lMsgOut.OutArgCount; i < lMsgOut.ArgCount; i++)
            {
                if (new ONBool(mReflexiveClass.Value[i] as ONSimpleType != null) || mReflexiveClass.Value[i] as ONOid != null)
                {
                    lArgs[i] = mReflexiveClass.Value[i];
                }
            }

            // Pop the Shared OID from Class Stack
            lAction.OnContext.TransactionStack.Pop();

            // Calculate OutboundArgumets
            mServiceCacheItem.InvoqueOutboundArguments(lAction, lArgs);

            // Pop the OID from Class Stack
            lAction.OnContext.TransactionStack.Pop();
            mInStack = false;

            // Restoing the old context of the This instance
            if (mThisOnContext != null)
            {
                lAction.Instance.OnContext = mThisOnContext;
            }

            msgReturn = new ReturnMessage(lMsgOut.ReturnValue, lArgs, lArgs.Length, lMsgOut.LogicalCallContext, lMsgIn);
            if (lAction.OnContext.TransactionStack.Count == 0)
            {
                // Check triggers
                lAction.OnContext.CheckTriggers();

                // Check integrity constraints
                lAction.OnContext.CheckIntegrityConstraints();
            }

            lAction.OnContext.InstancesInitialValues.Clear();
        }
Exemplo n.º 5
0
        /// <summary>
        /// Checks if a determinate instance exists
        /// </summary>
        /// <param name="onContext">Context</param>
        /// <param name="onFilterList">Filters to theck</param>
        /// <returns>If exists</returns>
        public bool Exist(ONContext onContext, ONFilterList onFilterList)
        {
            ONData lData = ONContext.GetComponent_Data(ClassName, onContext);

            return(lData.Exist(this, onFilterList));
        }
Exemplo n.º 6
0
        public void Postprocess(MarshalByRefObject inst, IMessage msg, ref IMessage msgReturn)
        {
            IMethodCallMessage   lMsgIn  = msg as IMethodCallMessage;
            IMethodReturnMessage lMsgOut = msgReturn as IMethodReturnMessage;

            // Extract Action
            ONAction lAction = inst as ONAction;

            if ((lAction.Instance != null) && (lAction.Instance.ModifiedInTransaction))
            {
                foreach (string lActiveFacet in lAction.Instance.LeafActiveFacets())
                {
                    ONInstance lInstanceToModify;
                    if (lActiveFacet == lAction.ClassName)
                    {
                        lInstanceToModify = lAction.Instance;
                    }
                    else
                    {
                        lInstanceToModify = lAction.Instance.GetFacet(lActiveFacet);
                    }
                    // Update Instance
                    if (lInstanceToModify.ModifiedInTransaction)
                    {
                        ONData lData = ONContext.GetComponent_Data(lInstanceToModify.ClassName, lInstanceToModify.OnContext);
                        lData.UpdateEdited(lInstanceToModify);
                    }
                }
                foreach (ONInstance lInstance in lAction.Instance.GetFacets())
                {
                    if (lInstance != null)
                    {
                        lInstance.ModifiedInTransaction = false;
                    }
                }

                lAction.Instance.ModifiedInTransaction = false;
            }

            // Calculate OutputArgumets
            object[] lArgs = lMsgOut.Args;
            mServiceCacheItem.InvoqueOutboundArguments(lAction, lArgs);

            // Pop the OID from Class Stack
            lAction.OnContext.TransactionStack.Pop();
            mInStack = false;

            // Restoing the old context of the This instance
            if (mThisOnContext != null)
            {
                lAction.Instance.OnContext = mThisOnContext;
            }

            msgReturn = new ReturnMessage(lMsgOut.ReturnValue, lArgs, lArgs.Length, lMsgOut.LogicalCallContext, lMsgIn);
            if (lAction.OnContext.TransactionStack.Count == 0)
            {
                // Check triggers
                lAction.OnContext.CheckTriggers();

                // Check integrity constraints
                lAction.OnContext.CheckIntegrityConstraints();
            }
        }