public override IConsent IsUsable(INakedObjectAdapter target)
        {
            bool     isPersistent    = target.ResolveState.IsPersistent();
            IConsent disabledConsent = IsUsableDeclaratively(isPersistent);

            if (disabledConsent != null)
            {
                return(disabledConsent);
            }

            var viewModelFacet = target.Spec.GetFacet <IViewModelFacet>();

            if (viewModelFacet != null)
            {
                // all fields on a non-editable view model are disabled
                if (!viewModelFacet.IsEditView(target))
                {
                    return(new Veto(Resources.NakedObjects.FieldDisabled));
                }
            }

            var immutableFacet = GetFacet <IImmutableFacet>();

            if (immutableFacet != null)
            {
                WhenTo when = immutableFacet.Value;
                if (when == WhenTo.UntilPersisted && !isPersistent)
                {
                    return(new Veto(Resources.NakedObjects.FieldDisabledUntil));
                }
                if (when == WhenTo.OncePersisted && isPersistent)
                {
                    return(new Veto(Resources.NakedObjects.FieldDisabledOnce));
                }
                ITypeSpec tgtSpec = target.Spec;
                if (tgtSpec.IsAlwaysImmutable() || (tgtSpec.IsImmutableOncePersisted() && isPersistent))
                {
                    return(new Veto(Resources.NakedObjects.FieldDisabled));
                }
            }
            var    f      = GetFacet <IDisableForContextFacet>();
            string reason = f == null ? null : f.DisabledReason(target);

            if (reason == null)
            {
                var fs = GetFacet <IDisableForSessionFacet>();
                reason = fs == null ? null : fs.DisabledReason(Session, target, LifecycleManager, MetamodelManager);
            }

            return(GetConsent(reason));
        }
        // TODO either move this into framework or (better?) add a VetoCause enum to Veto and use  
        private static IConsent IsCurrentlyMutable(INakedObject target) {
            bool isPersistent = target.ResolveState.IsPersistent();

            var immutableFacet = target.Spec.GetFacet<IImmutableFacet>();
            if (immutableFacet != null) {
                WhenTo when = immutableFacet.Value;
                if (when == WhenTo.UntilPersisted && !isPersistent) {
                    return new Veto(Resources.NakedObjects.FieldDisabledUntil);
                }
                if (when == WhenTo.OncePersisted && isPersistent) {
                    return new Veto(Resources.NakedObjects.FieldDisabledOnce);
                }
                ITypeSpec tgtSpec = target.Spec;
                if (tgtSpec.IsAlwaysImmutable() || (tgtSpec.IsImmutableOncePersisted() && isPersistent)) {
                    return new Veto(Resources.NakedObjects.FieldDisabled);
                }
            }
            return new Allow();
        }
        private IConsent IsUsableDeclaratively(bool isPersistent)
        {
            var facet = GetFacet <IDisabledFacet>();

            if (facet != null)
            {
                WhenTo isProtected = facet.Value;
                if (isProtected == WhenTo.Always)
                {
                    return(new Veto(Resources.NakedObjects.FieldNotEditable));
                }
                if (isProtected == WhenTo.OncePersisted && isPersistent)
                {
                    return(new Veto(Resources.NakedObjects.FieldNotEditableNow));
                }
                if (isProtected == WhenTo.UntilPersisted && !isPersistent)
                {
                    return(new Veto(Resources.NakedObjects.FieldNotEditableUntil));
                }
            }

            return(null);
        }
 public HiddenAttribute(WhenTo w)
 {
     Value = w;
 }
 protected SingleWhenValueFacetAbstract(Type facetType, ISpecification holder, WhenTo when)
     : base(facetType, holder)
 {
     this.when = when;
 }
 public DisabledAttribute(WhenTo w)
 {
     Value = w;
 }
Ejemplo n.º 7
0
 protected ImmutableFacetAbstract(WhenTo when, ISpecification holder)
     : base(Type, holder, when)
 {
 }
Ejemplo n.º 8
0
 public HiddenFacet(WhenTo when, ISpecification holder)
     : base(typeof (IHiddenFacet), holder, when) {}
Ejemplo n.º 9
0
 public HiddenFacet(WhenTo when, ISpecification holder)
     : base(typeof(IHiddenFacet), holder, when)
 {
 }
 protected ImmutableFacetImpl(WhenTo when, ISpecification holder)
     : base(when, holder) {}
 public HiddenAttribute(WhenTo w) {
     Value = w;
 }
 public ImmutableFacetAnnotation(WhenTo value, ISpecification holder)
     : base(value, holder)
 {
 }
 public DisabledFacetAnnotation(WhenTo value, ISpecification holder)
     : base(value, holder) {}
 protected SingleWhenValueFacetAbstract(Type facetType, ISpecification holder, WhenTo when)
     : base(facetType, holder) {
     this.when = when;
 }
 public DisabledAttribute(WhenTo w) {
     Value = w;
 }
 protected DisabledFacetAbstract(WhenTo when, ISpecification holder)
     : base(Type, holder, when) {}
 public DisabledFacetAnnotation(WhenTo value, ISpecification holder)
     : base(value, holder)
 {
 }
Ejemplo n.º 18
0
 public ImmutableFacetImpl(WhenTo when, ISpecification holder)
     : base(when, holder)
 {
 }
Ejemplo n.º 19
0
 public ImmutableAttribute(WhenTo w) {
     Value = w;
 }
 public ImmutableFacetAnnotation(WhenTo value, ISpecification holder)
     : base(value, holder) {}
 public ImmutableAttribute(WhenTo w)
 {
     Value = w;
 }