// TODO: Put strings into the resources. // protected void SetReadOnly(bool isReadOnly, bool isPermanent) { var previousReadOnly = ReadDA(ref _readOnlyState); if (previousReadOnly.IsPermanent != isPermanent || previousReadOnly.IsReadOnly != isReadOnly) { if (previousReadOnly.IsPermanent) { throw new EonException(message: $"Невозможно изменить состояние доступности редактирования объекта. Для данного объекта это состояние является неизменным.{Environment.NewLine}\tОбъект:{this.FmtStr().GNLI2()}"); } // var newReadOnly = new ReadOnlyStateTag(isReadOnly, isPermanent); ReadOnlyStateTag readOnlyStateOriginal; if (ReferenceEquals(previousReadOnly, readOnlyStateOriginal = WriteDA(ref _readOnlyState, newReadOnly, previousReadOnly))) { OnSetReadOnly(previousReadOnly, newReadOnly); } else if (!(readOnlyStateOriginal.IsPermanent == newReadOnly.IsPermanent && readOnlyStateOriginal.IsReadOnly == newReadOnly.IsReadOnly)) { throw new EonException(message: $"Состояние доступности редактирования объекта не может быть изменено в текущем вызове, так как состояние уже было изменено другим вызовом.{Environment.NewLine}\tОбъект:{this.FmtStr().GNLI2()}"); } } }
public CopyableReadOnlyScopeBase CreateCopy(ReadOnlyStateTag readOnlyState = null) => (CopyableReadOnlyScopeBase)CreateCopy(copyArgs: new CopyArgs(readOnlyState));
protected CopyableReadOnlyScopeBase(ReadOnlyStateTag readOnlyState = default) { _readOnlyState = readOnlyState ?? new ReadOnlyStateTag(); }
public CopyArgs(ReadOnlyStateTag readOnlyState) { ReadOnlyState = readOnlyState; }
protected override void Dispose(bool explicitDispose) { _readOnlyState = null; base.Dispose(explicitDispose); }
protected virtual void OnSetReadOnly(ReadOnlyStateTag previousState, ReadOnlyStateTag newState) { previousState.EnsureNotNull(nameof(previousState)); newState.EnsureNotNull(nameof(newState)); // }
// TODO: Put strings into the resources. // public static void EnsureChangeToPermanentReadOnly(this IReadOnlyScope scope, ReadOnlyStateTag newState) { scope.EnsureNotNull(nameof(scope)); newState.EnsureNotNull(nameof(newState)); // if (newState.IsReadOnly && !newState.IsPermanent) { throw new EonException(message: $"Изменение состояния доступности редактирования данного объекта согласно указанным параметрам не может быть выполнено. Возможно, объект не поддерживает такое изменение состояния доступности редактирования.{Environment.NewLine}\tОбъект:{scope.FmtStr().GNLI2()}{Environment.NewLine}\tПараметры:{newState.FmtStr().GNLI2()}"); } }