You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2012/09/02 14:14:52 UTC

svn commit: r1379956 [1/4] - in /incubator/isis/trunk/framework: applib/src/main/java/org/apache/isis/applib/annotation/ applib/src/main/java/org/apache/isis/applib/util/ applib/src/test/java/org/apache/isis/applib/util/ core/commons/src/main/java/org/...

Author: danhaywood
Date: Sun Sep  2 12:14:46 2012
New Revision: 1379956

URL: http://svn.apache.org/viewvc?rev=1379956&view=rev
Log:
ISIS-258 ,ISIS-259

* removed @Executed annotation (and metamodel stuff that equates to it)
* @Hidden and @Disabled now have a new where() attribute (and value() renamed to when())
* added @ActionSemantics, new ActionSemanticsFacet (and removed some duplication of code in restfulobjects viewer and in core)
* refactored @QueryOnly and @Idempotent to map onto the ActionSemanticsFacet; added missing unit tests

Added:
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/util/Enums.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Enums.java
    incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacetNever.java
    incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest_converts.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/EnumsTest.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacet.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Target.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacetAbstract.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacet.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacetAbstract.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacetAbstract.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacetAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/ActionSemanticsAnnotationFacetFactory.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/idempotent/IdempotentAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/ActionSemanticsFacetAnnotation.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/IdempotentFacetInferredFromQueryOnly.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/ActionSemanticsFacetFallbackToNonIdempotent.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/QueryOnlyFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/ActionSemanticsFallbackFacetFactory.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/QueryOnlyAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/IdempotentAnnotationFacetFactory.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/idempotent/IdempotentAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/IdempotentFacetAnnotation.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/idempotent/IdempotentFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/QueryOnlyAnnotationFacetFactory.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/QueryOnlyAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/semantics/QueryOnlyFacetAnnotation.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/QueryOnlyFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/staticmethod/DisabledFacetAlwaysEverywhere.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/staticmethod/DisabledFacetAlways.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/staticmethod/HiddenFacetAlwaysEverywhere.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/staticmethod/HiddenFacetAlways.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/semantics/
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/semantics/ActionSemanticsAnnotationFacetFactoryTest.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/executed/ExecutedAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/semantics/ActionSemanticsFallbackFacetFactoryTest.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/executed/ExecutedAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/semantics/IdempotentAnnotationFacetFactoryTest.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/executed/ExecutedAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/semantics/QueryOnlyAnnotationFacetFactoryTest.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/executed/ExecutedAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/InvokeKeys.java
      - copied, changed from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/idempotent/IdempotentFacetAbstract.java
Removed:
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Executed.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/When.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/executed/ExecutedFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/executed/ExecutedFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/idempotent/IdempotentFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/idempotent/IdempotentFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/notpersistable/InitiatedBy.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Target.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ActionSemantics.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/spec/ActionTargetTest.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/executed/annotation/ExecutedAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/executed/annotation/ExecutedFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/executed/prefix/ExecutedViaNamingConventionFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/idempotent/IdempotentAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/idempotent/IdempotentFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/ExecutedFacetViaNamingConvention.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/IdempotentFacetInferredFromQueryOnly.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/QueryOnlyAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/queryonly/QueryOnlyFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/fallback/ExecutedFacetAtDefault.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/staticmethod/DisabledFacetAlways.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/staticmethod/HiddenFacetAlways.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/executed/ExecutedAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Enums.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/EnumsTest.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ActionSemantics.java
Modified:
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Disabled.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Hidden.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Idempotent.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/NotPersistable.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/QueryOnly.java
    incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/When.java
    incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefault.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Enumeration.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/EnumerationAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/hide/HiddenFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetUtils.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/notpersistable/NotPersistableFacet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/notpersistable/NotPersistableFacetAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/ObjectActionSet.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/feature/ObjectAction.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/ObjectReflectorDefault.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectActionImpl.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/ObjectSpecificationAbstract.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/specimpl/dflt/ObjectSpecificationDefault.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/specloader/validator/MetaModelValidatorComposite.java
    incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/util/Dump.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_marshal.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshallerTest_roundtripping.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/OidVersionTest.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_compareAgainst.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefaultTest_create.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/adapter/version/VersionTest.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/facets/EnumerationAbstractTest.java
    incubator/isis/trunk/framework/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationCacheDefaultTest.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/actions/invoke/ActionInvocationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/collections/disabled/fromimmutable/DisabledFacetForCollectionDerivedFromImmutable.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/fallback/FallbackFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacet.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacetAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacetImpl.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacetNever.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/annotation/DisabledAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/annotation/DisabledFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/staticmethod/DisabledFacetViaProtectMethodFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/HiddenFacetAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/HiddenFacetImpl.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/HiddenFacetNever.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/annotation/HiddenAnnotationForMemberFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/annotation/HiddenFacetForMemberAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/hide/staticmethod/HiddenFacetViaAlwaysHideMethodFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/hidden/HiddenAnnotationForTypeFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/hidden/HiddenFacetForTypeAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/annotation/ImmutableAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/annotation/ImmutableFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableFacetMarkerInterface.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/immutable/markerifc/ImmutableMarkerInterfaceFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/notpersistable/NotPersistableAnnotationFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/notpersistable/NotPersistableFacetAnnotation.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/notpersistable/NotPersistableFacetImpl.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/notpersistable/NotPersistableFacetMarkerInterface.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/notpersistable/NotPersistableMarkerInterfacesFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/object/value/ImmutableFacetViaValueSemantics.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/disabled/fromimmutable/DisabledFacetForPropertyDerivedFromImmutable.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/properties/modify/PropertySetAndClearFacetFactory.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/bytes/ByteValueSemanticsProviderAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/color/ColorValueSemanticsProvider.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/date/DateValueSemanticsProvider.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/datetime/DateTimeValueSemanticsProvider.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/floats/FloatValueSemanticsProviderAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/integer/IntValueSemanticsProviderAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/longs/DoubleValueSemanticsProviderAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/longs/LongValueSemanticsProviderAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/money/MoneyValueSemanticsProvider.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/password/PasswordValueSemanticsProvider.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/string/StringValueSemanticsProvider.java
    incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/value/timestamp/TimeStampValueSemanticsProviderAbstract.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/actions/ActionMethodsFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/collections/CollectionFieldMethodsFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/disable/DisabledAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/hide/HiddenAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/immutable/ImmutableAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/immutable/ImmutableMarkerInterfaceFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/notpersistable/NotPersistableAnnotationFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/object/notpersistable/NotPersistableMarkerInterfaceFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/properties/PropertyMethodsFacetFactoryTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/BigDecimalValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/BigIntValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/BooleanValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ByteValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/CharacterValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ColorValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/DateTimeValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/DateValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/DoubleValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/FloatValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/IntValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/JavaSqlDateValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/JavaSqlTimeStampValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/JavaSqlTimeValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/LongValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/MoneyValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PasswordValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/PercentageValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/ShortValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/StringValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/TimeStampValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/core/progmodel/src/test/java/org/apache/isis/core/progmodel/facets/value/TimeValueSemanticsProviderTest.java
    incubator/isis/trunk/framework/progmodels/dflt/src/main/java/org/apache/isis/progmodels/dflt/ProgrammingModelFacetsJava5.java
    incubator/isis/trunk/framework/progmodels/wrapper/wrapper-metamodel/src/test/java/org/apache/isis/progmodel/wrapper/WrappedFactoryDefaultTest_wrappedObject_transient.java
    incubator/isis/trunk/framework/runtimes/dflt/objectstores/jdo/jdo-metamodel/src/main/java/org/apache/isis/runtimes/dflt/objectstores/jdo/metamodel/facets/prop/primarykey/DisabledFacetDerivedFromJdoPrimaryKeyAnnotation.java
    incubator/isis/trunk/framework/runtimes/dflt/runtime/src/test/java/org/apache/isis/runtimes/dflt/runtime/system/ObjectMemberAbstractTest.java
    incubator/isis/trunk/framework/tck/tck-dom/src/main/java/org/apache/isis/tck/dom/claimapp/employees/Employee.java
    incubator/isis/trunk/framework/viewer/html/src/test/java/org/apache/isis/viewer/html/context/ObjectActionNoop.java
    incubator/isis/trunk/framework/viewer/junit/src/test/java/org/apache/isis/viewer/junit/sample/domain/Customer.java
    incubator/isis/trunk/framework/viewer/junit/src/test/java/org/apache/isis/viewer/junit/sample/domain/Product.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/pom.xml
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/RepresentationType.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ActionResultReprRenderer.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/DomainResourceHelper.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/MemberType.java
    incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/domainobjects/ObjectActionReprRenderer.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/debug/Debug.java
    incubator/isis/trunk/framework/viewer/scimpi/scimpi-dispatcher/src/main/java/org/apache/isis/viewer/scimpi/dispatcher/view/simple/EditLink.java
    incubator/isis/trunk/framework/viewer/wicket/wicket-model/src/main/java/org/apache/isis/viewer/wicket/model/mementos/ActionMemento.java

Added: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java?rev=1379956&view=auto
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java (added)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/ActionSemantics.java Sun Sep  2 12:14:46 2012
@@ -0,0 +1,82 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.applib.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import org.apache.isis.applib.util.Enums;
+
+/**
+ * Indicates that an instance cannot be persisted by a user, but only
+ * programmatically.
+ */
+@Inherited
+@Target({ ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ActionSemantics {
+
+    public enum Of {
+        /**
+         * Safe, with no side-effects.
+         * 
+         * <p>
+         * In other words, a query-only action.  By definition, is also idempotent.
+         */
+        SAFE, 
+        /**
+         * Post-conditions are always the same, irrespective as to how many times called.
+         * 
+         * <p>
+         * An example might be <tt>placeOrder()</tt>, that is a no-op if the order has already been placed. 
+         */
+        IDEMPOTENT,
+        /**
+         * Neither safe nor idempotent; every invocation is likely to change the state of the object.
+         * 
+         * <p>
+         * An example is increasing the quantity of a line item in an Order by 1.
+         */
+        NON_IDEMPOTENT;
+        
+        public String getFriendlyName() {
+            return Enums.getFriendlyNameOf(this);
+        }
+
+        public String getCamelCaseName() {
+            return Enums.enumToCamelCase(this);
+        }
+
+        /**
+         * {@link #SAFE} is idempotent in nature, as well as, obviously, {@link #IDEMPOTENT}.
+         */
+        public boolean isIdempotentInNature() {
+            return this == SAFE || this == IDEMPOTENT;
+        }
+
+
+    }
+
+    Of value() default Of.NON_IDEMPOTENT;
+    
+}

Modified: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Disabled.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Disabled.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Disabled.java (original)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Disabled.java Sun Sep  2 12:14:46 2012
@@ -32,5 +32,6 @@ import java.lang.annotation.Target;
 @Target({ ElementType.METHOD })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Disabled {
-    When value() default When.ALWAYS;
+    When when() default When.ALWAYS;
+    Where where() default Where.EVERYWHERE;
 }

Modified: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Hidden.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Hidden.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Hidden.java (original)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Hidden.java Sun Sep  2 12:14:46 2012
@@ -37,5 +37,6 @@ import java.lang.annotation.Target;
 @Target({ ElementType.TYPE, ElementType.METHOD })
 @Retention(RetentionPolicy.RUNTIME)
 public @interface Hidden {
-    When value() default When.ALWAYS;
+    When when() default When.ALWAYS;
+    Where where() default Where.EVERYWHERE;
 }

Modified: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Idempotent.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Idempotent.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Idempotent.java (original)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Idempotent.java Sun Sep  2 12:14:46 2012
@@ -33,7 +33,11 @@ import java.lang.annotation.Target;
  * <p>
  * More formally, the post-conditions of the action are guaranteed to be the
  * same whether called once or more than once.
+ * 
+ * <p>
+ * Deprecated - use <tt>@ActionSemantics(Of.IDEMPOTENT)</tt> instead.
  */
+@Deprecated
 @Inherited
 @Target({ ElementType.METHOD })
 @Retention(RetentionPolicy.RUNTIME)

Modified: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/NotPersistable.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/NotPersistable.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/NotPersistable.java (original)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/NotPersistable.java Sun Sep  2 12:14:46 2012
@@ -25,6 +25,10 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.marker.NonPersistable;
+import org.apache.isis.applib.marker.ProgramPersistable;
+import org.apache.isis.applib.util.Enums;
+
 /**
  * Indicates that an instance cannot be persisted by a user, but only
  * programmatically.
@@ -35,7 +39,21 @@ import java.lang.annotation.Target;
 public @interface NotPersistable {
 
     public enum By {
-        USER, USER_OR_PROGRAM
+        USER, 
+        USER_OR_PROGRAM;
+        
+        public static By lookupForMarkerInterface(final Class<?> cls) {
+            if (ProgramPersistable.class.isAssignableFrom(cls)) {
+                return USER;
+            } else if (NonPersistable.class.isAssignableFrom(cls)) {
+                return USER_OR_PROGRAM;
+            }
+            return null;
+        }
+        
+        public String getFriendlyName() {
+            return Enums.getFriendlyNameOf(this);
+        }
     }
 
     By value() default By.USER_OR_PROGRAM;

Modified: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/QueryOnly.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/QueryOnly.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/QueryOnly.java (original)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/QueryOnly.java Sun Sep  2 12:14:46 2012
@@ -28,7 +28,11 @@ import java.lang.annotation.Target;
 /**
  * Indicates that an action is query only; invoking it will not modify any
  * domain object state.
+ * 
+ * <p>
+ * Deprecated - use <tt>@ActionSemantics(Of.SAFE)</tt> instead.
  */
+@Deprecated
 @Inherited
 @Target({ ElementType.METHOD })
 @Retention(RetentionPolicy.RUNTIME)

Modified: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/When.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/When.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/When.java (original)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/When.java Sun Sep  2 12:14:46 2012
@@ -19,6 +19,77 @@
 
 package org.apache.isis.applib.annotation;
 
+import org.apache.isis.applib.marker.AlwaysImmutable;
+import org.apache.isis.applib.marker.ImmutableOncePersisted;
+import org.apache.isis.applib.marker.ImmutableUntilPersisted;
+import org.apache.isis.applib.marker.NeverImmutable;
+import org.apache.isis.applib.util.Enums;
+
 public enum When {
-    ALWAYS, ONCE_PERSISTED, UNTIL_PERSISTED, NEVER
+    /**
+     * If annotated on a member, then that member should be disabled/hidden for persisted objects, but should be
+     * visible for transient objects.
+     * 
+     * <p>
+     * If annotated on an class, then applies to all members of that class.
+     */
+    ONCE_PERSISTED,
+    /**
+     * If annotated on a member, then that member should be disabled/hidden for transient objects, but should be
+     * visible for persisted objects.
+     * 
+     * <p>
+     * If annotated on an class, then applies to all members of that class.
+     */
+    UNTIL_PERSISTED,
+    /**
+     * If annotated on a member, then that member should be disabled/hidden both for objects that are persisted
+     * and for objects that are not persisted.
+     * 
+     * <p>
+     * Combines {@link #ONCE_PERSISTED} and {@link #UNTIL_PERSISTED}. 
+     * 
+     * <p>
+     * If annotated on an class, then applies to all members of that class.
+     */
+    ALWAYS,
+    /**
+     * If annotated on a member, then that member should not be disabled/hidden.
+     * 
+     * <p>
+     * If annotated on an class, then applies to all members of that class.
+     */
+    NEVER;
+
+    public String getFriendlyName() {
+        return Enums.getFriendlyNameOf(this);
+    }
+    
+    /**
+     * As an alternative to annotating an object with {@link Disabled}, can instead have the
+     * class implement a marker interface.   
+     */
+    public static When lookupForMarkerInterface(final Class<?> cls) {
+        if (AlwaysImmutable.class.isAssignableFrom(cls)) {
+            return ALWAYS;
+        } else if (ImmutableOncePersisted.class.isAssignableFrom(cls)) {
+            return ONCE_PERSISTED;
+        } else if (ImmutableUntilPersisted.class.isAssignableFrom(cls)) {
+            return UNTIL_PERSISTED;
+        } else if (NeverImmutable.class.isAssignableFrom(cls)) {
+            return NEVER;
+        }
+        return null;
+    }
+
+    public interface Persistable {
+        public boolean isTransient();
+    }
+    
+    public boolean appliesTo(final Persistable persistable) {
+        final boolean isTransient = persistable.isTransient();
+        return this == When.ALWAYS || 
+               this == When.ONCE_PERSISTED && !isTransient || 
+               this == When.UNTIL_PERSISTED && isTransient;
+    }
 }

Added: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Where.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Where.java?rev=1379956&view=auto
==============================================================================
--- incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Where.java (added)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/annotation/Where.java Sun Sep  2 12:14:46 2012
@@ -0,0 +1,64 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+package org.apache.isis.applib.annotation;
+
+import org.apache.isis.applib.util.Enums;
+
+public enum Where {
+    /**
+     * The member should be disabled/hidden everywhere.
+     */
+    EVERYWHERE,
+    /**
+     * The member should be disabled/hidden when displayed within an object form.
+     * 
+     * <p>
+     * For most viewers, this applies to property and collection members, not actions.
+     */
+    OBJECT_FORM, 
+    /**
+     * The member should be disabled/hidden when displayed as a column of a table within
+     * an object's collection.
+     * 
+     * <p>
+     * For most (all?) viewers, this will have meaning only if applied to a property member.
+     */
+    COLLECTION_TABLE,
+    /**
+     * The member should be disabled/hidden when displayed as a column of a table showing a standalone list
+     * of objects, for example as returned by a repository query.
+     * 
+     * <p>
+     * For most (all?) viewers, this will have meaning only if applied to a property member.
+     */
+    STANDALONE_TABLE,
+    /**
+     * The member should be disabled/hidden when displayed as a column of a table, either an object's
+     * collection or a standalone list.
+     * 
+     * <p>
+     * This combines {@link #COLLECTION_TABLE} and {@link #STANDALONE_TABLE}.
+     */
+    ALL_TABLES;
+    
+    public String getFriendlyName() {
+        return Enums.getFriendlyNameOf(this);
+    }
+}

Copied: incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/util/Enums.java (from r1379526, incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Enums.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/util/Enums.java?p2=incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/util/Enums.java&p1=incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Enums.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/main/java/org/apache/isis/viewer/restfulobjects/applib/util/Enums.java (original)
+++ incubator/isis/trunk/framework/applib/src/main/java/org/apache/isis/applib/util/Enums.java Sun Sep  2 12:14:46 2012
@@ -16,13 +16,32 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.restfulobjects.applib.util;
+
+package org.apache.isis.applib.util;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Splitter;
+import com.google.common.collect.Iterables;
 
 public final class Enums {
+    
+    private Enums(){}
 
-    private Enums() {
+    public static String getFriendlyNameOf(Enum<?> anEnum) {
+        return getFriendlyNameOf(anEnum.name());
+    }
+    
+    public static String getFriendlyNameOf(String anEnumName) {
+        return Joiner.on(" ").join(Iterables.transform(Splitter.on("_").split(anEnumName), LOWER_CASE_THEN_CAPITALIZE));
     }
 
+    
+    public static String getEnumNameFromFriendly(String anEnumFriendlyName) {
+        return Joiner.on("_").join(Iterables.transform(Splitter.on(" ").split(anEnumFriendlyName), UPPER_CASE));
+    }
+
+    
     public static String enumToHttpHeader(final Enum<?> anEnum) {
         return enumNameToHttpHeader(anEnum.name());
     }
@@ -60,4 +79,29 @@ public final class Enums {
         return builder.toString();
     }
 
+
+    private static Function<String, String> LOWER_CASE_THEN_CAPITALIZE = new Function<String, String>() {
+        @Override
+        public String apply(String input) {
+            return capitalize(input.toLowerCase());
+        }
+    };
+
+    private static Function<String, String> UPPER_CASE = new Function<String, String>() {
+        @Override
+        public String apply(String input) {
+            return input.toUpperCase();
+        }
+    };
+
+    private static String capitalize(final String str) {
+        if (str == null || str.length() == 0) {
+            return str;
+        }
+        if (str.length() == 1) {
+            return str.toUpperCase();
+        }
+        return Character.toUpperCase(str.charAt(0)) + str.substring(1);
+    }
+
 }

Copied: incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest.java (from r1379526, incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacetNever.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest.java?p2=incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest.java&p1=incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacetNever.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/progmodel/src/main/java/org/apache/isis/core/progmodel/facets/members/disable/DisabledFacetNever.java (original)
+++ incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest.java Sun Sep  2 12:14:46 2012
@@ -17,29 +17,28 @@
  *  under the License.
  */
 
-package org.apache.isis.core.progmodel.facets.members.disable;
+package org.apache.isis.applib.util;
 
-import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.When;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
-public class DisabledFacetNever extends DisabledFacetAbstract {
+import org.junit.Test;
 
-    public DisabledFacetNever(final FacetHolder holder) {
-        super(When.NEVER, holder);
-    }
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.util.Enums;
+
+public class EnumsTest {
 
-    /**
-     * Always returns <tt>null</tt>.
-     */
-    @Override
-    public String disabledReason(final ObjectAdapter target) {
-        return null;
+    @Test
+    public void getFriendlyNameOf() {
+        assertThat(Enums.getFriendlyNameOf(When.ALWAYS), is("Always"));
+        assertThat(Enums.getFriendlyNameOf(When.ONCE_PERSISTED), is("Once Persisted"));
     }
 
-    @Override
-    public boolean isNoop() {
-        return true;
+    @Test
+    public void getEnumNameFromFriendly() {
+        assertThat(Enums.getEnumNameFromFriendly("Always"), is("ALWAYS"));
+        assertThat(Enums.getEnumNameFromFriendly("Once Persisted"), is("ONCE_PERSISTED"));
     }
 
 }

Copied: incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest_converts.java (from r1379526, incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/EnumsTest.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest_converts.java?p2=incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest_converts.java&p1=incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/EnumsTest.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/viewer/restfulobjects/restfulobjects-applib/src/test/java/org/apache/isis/viewer/restfulobjects/applib/util/EnumsTest.java (original)
+++ incubator/isis/trunk/framework/applib/src/test/java/org/apache/isis/applib/util/EnumsTest_converts.java Sun Sep  2 12:14:46 2012
@@ -16,16 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.viewer.restfulobjects.applib.util;
+package org.apache.isis.applib.util;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
 import org.junit.Test;
 
-import org.apache.isis.viewer.restfulobjects.applib.util.Enums;
-
-public class EnumsTest {
+public class EnumsTest_converts {
 
     private static enum MyEnum {
         CONTENT_TYPE, LAST_MODIFIED, WARNING, X_REPRESENTATION_TYPE, OBJECT_ACTION

Modified: incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java (original)
+++ incubator/isis/trunk/framework/core/commons/src/main/java/org/apache/isis/core/commons/lang/StringUtils.java Sun Sep  2 12:14:46 2012
@@ -25,32 +25,14 @@ import java.util.Collections;
 import java.util.List;
 import java.util.StringTokenizer;
 
-import javax.annotation.Nullable;
-
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Splitter;
-import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 
+import org.apache.isis.applib.util.Enums;
+
 public final class StringUtils {
     private StringUtils() {
     }
 
-    private static Function<String, String> LOWER_CASE_THEN_CAPITALIZE = new Function<String, String>() {
-        @Override
-        public String apply(String input) {
-            return StringUtils.capitalize(input.toLowerCase());
-        }
-    };
-
-    private static Function<String, String> UPPER_CASE = new Function<String, String>() {
-        @Override
-        public String apply(String input) {
-            return input.toUpperCase();
-        }
-    };
-
     // ////////////////////////////////////////////////////////////
     // naturalName, naturalize, simpleName, camel, memberIdFor
     // ////////////////////////////////////////////////////////////
@@ -377,12 +359,12 @@ public final class StringUtils {
         return null;
     }
 
-    public static String enumTitle(String string) {
-        return Joiner.on(" ").join(Iterables.transform(Splitter.on("_").split(string), LOWER_CASE_THEN_CAPITALIZE));
+    public static String enumTitle(String enumName) {
+        return Enums.getFriendlyNameOf(enumName);
     }
 
-    public static String enumDeTitle(String string) {
-        return Joiner.on("_").join(Iterables.transform(Splitter.on(" ").split(string), UPPER_CASE));
+    public static String enumDeTitle(String enumFriendlyName) {
+        return Enums.getEnumNameFromFriendly(enumFriendlyName);
     }
 
 }

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/ObjectAdapter.java Sun Sep  2 12:14:46 2012
@@ -23,6 +23,7 @@ import org.apache.isis.core.metamodel.ad
 import org.apache.isis.core.metamodel.adapter.oid.AggregatedOid;
 import org.apache.isis.core.metamodel.adapter.oid.CollectionOid;
 import org.apache.isis.core.metamodel.adapter.oid.Oid;
+import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ElementSpecificationProvider;
 import org.apache.isis.core.metamodel.spec.Instance;
@@ -34,7 +35,7 @@ import org.apache.isis.core.metamodel.sp
  * domain objects and those objects are represented within the NOF through these
  * adapter, and not directly.
  */
-public interface ObjectAdapter extends Instance {
+public interface ObjectAdapter extends Instance, org.apache.isis.applib.annotation.When.Persistable {
 
     
     /**

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/mgr/AdapterManager.java Sun Sep  2 12:14:46 2012
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.adapter.mgr;
 
+import org.apache.isis.applib.annotation.ActionSemantics;
 import org.apache.isis.core.commons.components.Injectable;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.adapter.ResolveState;
@@ -70,7 +71,14 @@ public interface AdapterManager extends 
     
     public enum ConcurrencyChecking {
         NO_CHECK,
-        CHECK
+        CHECK;
+        
+        public static ConcurrencyChecking concurrencyCheckingFor(ActionSemantics.Of actionSemantics) {
+            return actionSemantics == ActionSemantics.Of.SAFE
+                    ? ConcurrencyChecking.NO_CHECK
+                    : ConcurrencyChecking.CHECK;
+        }
+
     }
 
     /**

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/OidMarshaller.java Sun Sep  2 12:14:46 2012
@@ -5,14 +5,14 @@ import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
-import org.apache.isis.core.metamodel.adapter.version.Version;
-import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
+import org.apache.isis.core.metamodel.adapter.oid.Oid.State;
+import org.apache.isis.core.metamodel.adapter.version.Version;
+import org.apache.isis.core.metamodel.spec.ObjectSpecId;
+
 /**
  * Factory for subtypes of {@link Oid}, based on their oid str.
  * 

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefault.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefault.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefault.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/RootOidDefault.java Sun Sep  2 12:14:46 2012
@@ -26,6 +26,10 @@ import static org.hamcrest.CoreMatchers.
 import java.io.IOException;
 import java.io.Serializable;
 
+import com.google.common.base.Objects;
+
+import org.apache.log4j.Logger;
+
 import org.apache.isis.core.commons.encoding.DataInputExtended;
 import org.apache.isis.core.commons.encoding.DataOutputExtended;
 import org.apache.isis.core.commons.ensure.Ensure;
@@ -34,9 +38,6 @@ import org.apache.isis.core.commons.url.
 import org.apache.isis.core.metamodel.adapter.version.ConcurrencyException;
 import org.apache.isis.core.metamodel.adapter.version.Version;
 import org.apache.isis.core.metamodel.spec.ObjectSpecId;
-import org.apache.log4j.Logger;
-
-import com.google.common.base.Objects;
 
 public final class RootOidDefault implements Serializable, RootOid {
 

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Enumeration.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Enumeration.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Enumeration.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/Enumeration.java Sun Sep  2 12:14:46 2012
@@ -21,8 +21,6 @@ package org.apache.isis.core.metamodel.f
 
 public interface Enumeration {
 
-    public abstract int getNum();
-
     public abstract String getNameInCode();
 
     public abstract String getFriendlyName();

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/EnumerationAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/EnumerationAbstract.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/EnumerationAbstract.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/EnumerationAbstract.java Sun Sep  2 12:14:46 2012
@@ -21,20 +21,14 @@ package org.apache.isis.core.metamodel.f
 
 public abstract class EnumerationAbstract implements Enumeration {
 
-    private final int num;
     private final String nameInCode;
     private final String friendlyName;
 
-    protected EnumerationAbstract(final int num, final String nameInCode, final String friendlyName) {
-        this.num = num;
+    protected EnumerationAbstract(final String nameInCode, final String friendlyName) {
         this.nameInCode = nameInCode;
         this.friendlyName = friendlyName;
     }
 
-    @Override
-    public int getNum() {
-        return num;
-    }
 
     @Override
     public String getNameInCode() {
@@ -45,33 +39,33 @@ public abstract class EnumerationAbstrac
     public String getFriendlyName() {
         return friendlyName;
     }
-
+    
     @Override
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + num;
+        result = prime * result + ((nameInCode == null) ? 0 : nameInCode.hashCode());
         return result;
     }
 
     @Override
-    public boolean equals(final Object obj) {
-        if (this == obj) {
+    public boolean equals(Object obj) {
+        if (this == obj)
             return true;
-        }
-        if (obj == null) {
+        if (obj == null)
             return false;
-        }
-        if (getClass() != obj.getClass()) {
+        if (getClass() != obj.getClass())
             return false;
-        }
-        final EnumerationAbstract other = (EnumerationAbstract) obj;
-        if (num != other.num) {
+        EnumerationAbstract other = (EnumerationAbstract) obj;
+        if (nameInCode == null) {
+            if (other.nameInCode != null)
+                return false;
+        } else if (!nameInCode.equals(other.nameInCode))
             return false;
-        }
         return true;
     }
 
+
     @Override
     public String toString() {
         return getNameInCode();

Copied: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacet.java (from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Target.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacet.java?p2=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacet.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Target.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/spec/Target.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacet.java Sun Sep  2 12:14:46 2012
@@ -17,20 +17,12 @@
  *  under the License.
  */
 
-package org.apache.isis.core.metamodel.spec;
+package org.apache.isis.core.metamodel.facets;
 
-public enum Target {
+import org.apache.isis.applib.annotation.Where;
 
-    DEFAULT("default"), LOCAL("local"), REMOTE("remote");
+public interface WhenAndWhereValueFacet extends WhenValueFacet {
 
-    private String name;
-
-    private Target(final String name) {
-        this.name = name;
-    }
-
-    @Override
-    public String toString() {
-        return name;
-    }
+    public Where where();
+    
 }

Copied: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacetAbstract.java (from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacetAbstract.java?p2=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacetAbstract.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenAndWhereValueFacetAbstract.java Sun Sep  2 12:14:46 2012
@@ -19,34 +19,26 @@
 
 package org.apache.isis.core.metamodel.facets;
 
+import org.apache.isis.applib.annotation.When;
+import org.apache.isis.applib.annotation.Where;
 import org.apache.isis.core.metamodel.facetapi.Facet;
-import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public abstract class SingleWhenValueFacetAbstract extends FacetAbstract implements SingleWhenValueFacet {
-    private final When value;
+public abstract class WhenAndWhereValueFacetAbstract extends WhenValueFacetAbstract implements WhenAndWhereValueFacet {
+    private final Where where;
 
-    public SingleWhenValueFacetAbstract(final Class<? extends Facet> facetType, final FacetHolder holder, final When value) {
-        super(facetType, holder, Derivation.NOT_DERIVED);
-        this.value = value;
+    public WhenAndWhereValueFacetAbstract(final Class<? extends Facet> facetType, final FacetHolder holder, final When when, final Where where) {
+        super(facetType, holder, when);
+        this.where = where;
     }
 
     @Override
-    public When value() {
-        return value;
-    }
-
-    /**
-     * More descriptive, same as {@link #value()}.
-     * 
-     * @return
-     */
-    protected When when() {
-        return value();
+    public Where where() {
+        return where;
     }
 
     @Override
     protected String toStringValues() {
-        return "when=" + value.getFriendlyName();
+        return super.toString() + "; where =" + where.getFriendlyName();
     }
 }

Copied: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacet.java (from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacet.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacet.java?p2=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacet.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacet.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacet.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacet.java Sun Sep  2 12:14:46 2012
@@ -19,9 +19,11 @@
 
 package org.apache.isis.core.metamodel.facets;
 
+import org.apache.isis.applib.annotation.When;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 
-public interface SingleWhenValueFacet extends Facet {
+public interface WhenValueFacet extends Facet {
 
-    public When value();
+    public When when();
+    
 }

Copied: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacetAbstract.java (from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacetAbstract.java?p2=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacetAbstract.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/SingleWhenValueFacetAbstract.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/WhenValueFacetAbstract.java Sun Sep  2 12:14:46 2012
@@ -19,34 +19,26 @@
 
 package org.apache.isis.core.metamodel.facets;
 
+import org.apache.isis.applib.annotation.When;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetAbstract;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
 
-public abstract class SingleWhenValueFacetAbstract extends FacetAbstract implements SingleWhenValueFacet {
-    private final When value;
+public abstract class WhenValueFacetAbstract extends FacetAbstract implements WhenValueFacet {
+    private final When when;
 
-    public SingleWhenValueFacetAbstract(final Class<? extends Facet> facetType, final FacetHolder holder, final When value) {
+    public WhenValueFacetAbstract(final Class<? extends Facet> facetType, final FacetHolder holder, final When when) {
         super(facetType, holder, Derivation.NOT_DERIVED);
-        this.value = value;
+        this.when = when;
     }
 
     @Override
-    public When value() {
-        return value;
-    }
-
-    /**
-     * More descriptive, same as {@link #value()}.
-     * 
-     * @return
-     */
-    protected When when() {
-        return value();
+    public When when() {
+        return when;
     }
 
     @Override
     protected String toStringValues() {
-        return "when=" + value.getFriendlyName();
+        return "when=" + when.getFriendlyName();
     }
 }

Copied: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java (from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacet.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java?p2=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacet.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacet.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacet.java Sun Sep  2 12:14:46 2012
@@ -17,17 +17,17 @@
  *  under the License.
  */
 
-package org.apache.isis.core.metamodel.facets.actions.queryonly;
+package org.apache.isis.core.metamodel.facets.actions.semantics;
 
-import org.apache.isis.core.metamodel.facets.MarkerFacet;
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.core.metamodel.facets.SingleValueFacet;
 
 /**
- * Obtain choices for each of the parameters of the action.
+ * Represents the semantics of an action.
  * 
  * <p>
- * In the standard Apache Isis Programming Model, corresponds to invoking the
- * <tt>choicesXxx</tt> support method for an action.
+ * Specifically, whether it is safe, idempotent or non-idempotent.
  */
-public interface QueryOnlyFacet extends MarkerFacet {
+public interface ActionSemanticsFacet extends SingleValueFacet<ActionSemantics.Of> {
 
 }

Copied: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacetAbstract.java (from r1379526, incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacetAbstract.java)
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacetAbstract.java?p2=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacetAbstract.java&p1=incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacetAbstract.java&r1=1379526&r2=1379956&rev=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/queryonly/QueryOnlyFacetAbstract.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/actions/semantics/ActionSemanticsFacetAbstract.java Sun Sep  2 12:14:46 2012
@@ -17,20 +17,22 @@
  *  under the License.
  */
 
-package org.apache.isis.core.metamodel.facets.actions.queryonly;
+package org.apache.isis.core.metamodel.facets.actions.semantics;
 
+import org.apache.isis.applib.annotation.ActionSemantics;
+import org.apache.isis.applib.annotation.ActionSemantics.Of;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.MarkerFacetAbstract;
+import org.apache.isis.core.metamodel.facets.SingleValueFacetAbstract;
 
-public abstract class QueryOnlyFacetAbstract extends MarkerFacetAbstract implements QueryOnlyFacet {
+public abstract class ActionSemanticsFacetAbstract extends SingleValueFacetAbstract<ActionSemantics.Of> implements ActionSemanticsFacet {
 
     public static Class<? extends Facet> type() {
-        return QueryOnlyFacet.class;
+        return ActionSemanticsFacet.class;
     }
 
-    public QueryOnlyFacetAbstract(final FacetHolder holder) {
-        super(type(), holder);
+    public ActionSemanticsFacetAbstract(final Of of, final FacetHolder holder) {
+        super(type(), of, holder);
     }
 
 }

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/hide/HiddenFacet.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/hide/HiddenFacet.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/hide/HiddenFacet.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/hide/HiddenFacet.java Sun Sep  2 12:14:46 2012
@@ -20,7 +20,7 @@
 package org.apache.isis.core.metamodel.facets.hide;
 
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
-import org.apache.isis.core.metamodel.facets.SingleWhenValueFacet;
+import org.apache.isis.core.metamodel.facets.WhenAndWhereValueFacet;
 import org.apache.isis.core.metamodel.interactions.HidingInteractionAdvisor;
 
 /**
@@ -30,7 +30,7 @@ import org.apache.isis.core.metamodel.in
  * In the standard Apache Isis Programming Model, corresponds to annotating the
  * member with <tt>@Hidden</tt>.
  */
-public interface HiddenFacet extends SingleWhenValueFacet, HidingInteractionAdvisor {
+public interface HiddenFacet extends WhenAndWhereValueFacet, HidingInteractionAdvisor {
 
     /**
      * The reason why the (feature of the) target object is currently hidden, or

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacet.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacet.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacet.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacet.java Sun Sep  2 12:14:46 2012
@@ -20,7 +20,7 @@
 package org.apache.isis.core.metamodel.facets.object.immutable;
 
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.SingleWhenValueFacet;
+import org.apache.isis.core.metamodel.facets.WhenValueFacet;
 import org.apache.isis.core.metamodel.facets.ebc.EqualByContentFacet;
 import org.apache.isis.core.metamodel.facets.object.value.ValueFacet;
 import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
@@ -38,7 +38,7 @@ import org.apache.isis.core.metamodel.sp
  * @see EqualByContentFacet
  * @see ValueFacet
  */
-public interface ImmutableFacet extends SingleWhenValueFacet, DisablingInteractionAdvisor {
+public interface ImmutableFacet extends WhenValueFacet, DisablingInteractionAdvisor {
 
     /**
      * Clone this facet onto another {@link FacetHolder}.

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAbstract.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAbstract.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAbstract.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetAbstract.java Sun Sep  2 12:14:46 2012
@@ -19,15 +19,15 @@
 
 package org.apache.isis.core.metamodel.facets.object.immutable;
 
+import org.apache.isis.applib.annotation.When;
 import org.apache.isis.applib.events.UsabilityEvent;
 import org.apache.isis.core.metamodel.adapter.ObjectAdapter;
 import org.apache.isis.core.metamodel.facetapi.Facet;
 import org.apache.isis.core.metamodel.facetapi.FacetHolder;
-import org.apache.isis.core.metamodel.facets.SingleWhenValueFacetAbstract;
-import org.apache.isis.core.metamodel.facets.When;
+import org.apache.isis.core.metamodel.facets.WhenValueFacetAbstract;
 import org.apache.isis.core.metamodel.interactions.UsabilityContext;
 
-public abstract class ImmutableFacetAbstract extends SingleWhenValueFacetAbstract implements ImmutableFacet {
+public abstract class ImmutableFacetAbstract extends WhenValueFacetAbstract implements ImmutableFacet {
 
     public static Class<? extends Facet> type() {
         return ImmutableFacet.class;
@@ -44,18 +44,19 @@ public abstract class ImmutableFacetAbst
     public String disables(final UsabilityContext<? extends UsabilityEvent> ic) {
         final ObjectAdapter target = ic.getTarget();
         switch (ic.getInteractionType()) {
-        case PROPERTY_MODIFY:
-        case COLLECTION_ADD_TO:
-        case COLLECTION_REMOVE_FROM:
-            return disabledReason(target);
+            case PROPERTY_MODIFY:
+            case COLLECTION_ADD_TO:
+            case COLLECTION_REMOVE_FROM:
+                return disabledReason(target);
+            default:
+                return null;
         }
-        return null;
     }
 
     public String disabledReason(final ObjectAdapter targetAdapter) {
-        if (value() == When.ALWAYS) {
+        if (when() == When.ALWAYS) {
             return "Always immmutable";
-        } else if (value() == When.NEVER) {
+        } else if (when() == When.NEVER) {
             return null;
         }
 
@@ -64,9 +65,9 @@ public abstract class ImmutableFacetAbst
             return null;
         }
 
-        if (value() == When.UNTIL_PERSISTED) {
+        if (when() == When.UNTIL_PERSISTED) {
             return targetAdapter.isTransient() ? "Immutable until persisted" : null;
-        } else if (value() == When.ONCE_PERSISTED) {
+        } else if (when() == When.ONCE_PERSISTED) {
             return targetAdapter.representsPersistent() ? "Immutable once persisted" : null;
         }
         return null;

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetUtils.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetUtils.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetUtils.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/immutable/ImmutableFacetUtils.java Sun Sep  2 12:14:46 2012
@@ -19,7 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.object.immutable;
 
-import org.apache.isis.core.metamodel.facets.When;
+import org.apache.isis.applib.annotation.When;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 
 public class ImmutableFacetUtils {
@@ -34,7 +34,7 @@ public class ImmutableFacetUtils {
         if (immutableFacet == null) {
             return false;
         }
-        return immutableFacet.value() == When.ALWAYS;
+        return immutableFacet.when() == When.ALWAYS;
     }
 
     public static boolean isImmutableOncePersisted(final ObjectSpecification specification) {
@@ -47,7 +47,7 @@ public class ImmutableFacetUtils {
         if (immutableFacet == null) {
             return false;
         }
-        return immutableFacet.value() == When.ONCE_PERSISTED;
+        return immutableFacet.when() == When.ONCE_PERSISTED;
     }
 
     private ImmutableFacetUtils() {

Modified: incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/notpersistable/NotPersistableFacet.java
URL: http://svn.apache.org/viewvc/incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/notpersistable/NotPersistableFacet.java?rev=1379956&r1=1379955&r2=1379956&view=diff
==============================================================================
--- incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/notpersistable/NotPersistableFacet.java (original)
+++ incubator/isis/trunk/framework/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/notpersistable/NotPersistableFacet.java Sun Sep  2 12:14:46 2012
@@ -19,6 +19,7 @@
 
 package org.apache.isis.core.metamodel.facets.object.notpersistable;
 
+import org.apache.isis.applib.annotation.NotPersistable;
 import org.apache.isis.core.metamodel.facets.SingleValueFacet;
 import org.apache.isis.core.metamodel.interactions.DisablingInteractionAdvisor;
 
@@ -30,6 +31,6 @@ import org.apache.isis.core.metamodel.in
  * In the standard Apache Isis Programming Model, typically corresponds to
  * applying the <tt>@NotPersistable</tt> annotation at the class level.
  */
-public interface NotPersistableFacet extends SingleValueFacet<InitiatedBy>, DisablingInteractionAdvisor {
+public interface NotPersistableFacet extends SingleValueFacet<NotPersistable.By>, DisablingInteractionAdvisor {
 
 }