/// <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); }
/// <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(); } }
/// <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(); }
/// <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)); }
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(); } }