protected void applyPendingAction(DomainPropPendingActionMode action, DomainObject objValue) { Debug.Assert(State == DomainPropLoadableState.Loaded); DomainPropPendingAction.Check(action, objValue); switch (action) { case DomainPropPendingActionMode.Add: checkAddingObject(objValue); m_objects.Add(objValue); break; case DomainPropPendingActionMode.Remove: DomainObject objLocal = FindObjectValue(objValue.ObjectID); if (objLocal != null) { m_objects.Remove(objLocal); } break; case DomainPropPendingActionMode.Clear: m_objects.Clear(); break; default: throw new InvalidOperationException("Неподдерживаемое действие"); } }
public void internal_AddPendingAction(DomainPropPendingActionMode action, DomainObject objValue) { if (State == DomainPropLoadableState.Loaded) { // свойство уже загружено - можно не откладывать изменения applyPendingAction(action, objValue); } else { if (m_pendingActions == null) { m_pendingActions = new ArrayList(); } DomainPropPendingActionMode actionReverse = (action == DomainPropPendingActionMode.Add) ? DomainPropPendingActionMode.Remove : DomainPropPendingActionMode.Add; foreach (DomainPropPendingAction record in m_pendingActions) { if (record.Action == actionReverse || record.ValueObject.ObjectType == objValue.ObjectType || record.ValueObject.ObjectID == objValue.ObjectID) { // нашли действие, для которого текущее будет компенсирующим m_pendingActions.Remove(record); return; } } m_pendingActions.Add(new DomainPropPendingAction(action, objValue)); } }
public static void Check(DomainPropPendingActionMode action, DomainObject obj) { if ((action == DomainPropPendingActionMode.Add || action == DomainPropPendingActionMode.Remove || action == DomainPropPendingActionMode.Set) && obj == null) { throw new InvalidOperationException("Не задан объект для действия " + action); } if (action == DomainPropPendingActionMode.Clear && obj != null) { throw new InvalidOperationException("Задан объект для действия Clear"); } }
protected void applyPendingAction(DomainPropPendingActionMode action, DomainObject objValue) { switch (action) { case DomainPropPendingActionMode.Set: m_objRef = objValue; break; case DomainPropPendingActionMode.Clear: m_objRef = null; break; default: throw new InvalidOperationException("Неподдерживаемое действие"); } }
public void internal_SetPendingAction(DomainPropPendingActionMode action, DomainObject objValue) { if (m_objParent.IsDeleted) { return; } if (m_objParent.IsGhost) { // объект владелец не загружен - подпишемся на событие и загрузки и сохраним отложенное изменение свойства m_objParent.ObjectLoaded += new EventHandler(parentObjectLoadedHandler); m_pendingAction = new DomainPropPendingAction(action, objValue); } else { // объект-владелец прогружен - можно не откладывать изменения applyPendingAction(action, objValue); } }
public DomainPropPendingAction(DomainPropPendingActionMode action, DomainObject objValue) { Check(action, objValue); m_action = action; m_objValue = objValue; }