Пример #1
0
        // 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()}");
                }
            }
        }
Пример #2
0
 public CopyableReadOnlyScopeBase CreateCopy(ReadOnlyStateTag readOnlyState = null)
 => (CopyableReadOnlyScopeBase)CreateCopy(copyArgs: new CopyArgs(readOnlyState));
Пример #3
0
 protected CopyableReadOnlyScopeBase(ReadOnlyStateTag readOnlyState = default)
 {
     _readOnlyState = readOnlyState ?? new ReadOnlyStateTag();
 }
Пример #4
0
 public CopyArgs(ReadOnlyStateTag readOnlyState)
 {
     ReadOnlyState = readOnlyState;
 }
Пример #5
0
 protected override void Dispose(bool explicitDispose)
 {
     _readOnlyState = null;
     base.Dispose(explicitDispose);
 }
Пример #6
0
 protected virtual void OnSetReadOnly(ReadOnlyStateTag previousState, ReadOnlyStateTag newState)
 {
     previousState.EnsureNotNull(nameof(previousState));
     newState.EnsureNotNull(nameof(newState));
     //
 }
Пример #7
0
 // 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()}");
     }
 }