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 2014/10/23 17:03:34 UTC
svn commit: r1633831 -
/isis/site/trunk/content/reference/recognized-annotations/
Author: danhaywood
Date: Thu Oct 23 15:03:34 2014
New Revision: 1633831
URL: http://svn.apache.org/r1633831
Log:
annotations
Added:
isis/site/trunk/content/reference/recognized-annotations/ActionInteraction.md
isis/site/trunk/content/reference/recognized-annotations/CollectionInteraction.md
isis/site/trunk/content/reference/recognized-annotations/Debug-deprecated.md
- copied unchanged from r1630348, isis/site/trunk/content/reference/recognized-annotations/Debug.md
isis/site/trunk/content/reference/recognized-annotations/Digits.md
isis/site/trunk/content/reference/recognized-annotations/Exploration-deprecated.md
- copied unchanged from r1630348, isis/site/trunk/content/reference/recognized-annotations/Exploration.md
isis/site/trunk/content/reference/recognized-annotations/PropertyInteraction.md
isis/site/trunk/content/reference/recognized-annotations/Resolve-deprecated.md
- copied unchanged from r1630348, isis/site/trunk/content/reference/recognized-annotations/Resolve.md
isis/site/trunk/content/reference/recognized-annotations/ViewModel.md
Removed:
isis/site/trunk/content/reference/recognized-annotations/Debug.md
isis/site/trunk/content/reference/recognized-annotations/Exploration.md
isis/site/trunk/content/reference/recognized-annotations/Resolve.md
Modified:
isis/site/trunk/content/reference/recognized-annotations/PostsPropertyChangedEvent-deprecated.md
isis/site/trunk/content/reference/recognized-annotations/about.md
Added: isis/site/trunk/content/reference/recognized-annotations/ActionInteraction.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/reference/recognized-annotations/ActionInteraction.md?rev=1633831&view=auto
==============================================================================
--- isis/site/trunk/content/reference/recognized-annotations/ActionInteraction.md (added)
+++ isis/site/trunk/content/reference/recognized-annotations/ActionInteraction.md Thu Oct 23 15:03:34 2014
@@ -0,0 +1,135 @@
+Title: @ActionInteraction
+
+> Support
+>
+> Supported by all viewers (implementation is part of core metamodel)
+
+The `@ActionInteraction` annotation applies to domain entity actions, allowing
+subscribers to optionally veto, validate or otherwise perform tasks before
+or after the action has been invoked.
+
+Subscribers subscribe through the [Event Bus Service](../services/event-bus-service.html) using Guava annotations.
+
+By default the event raised is `ActionInteractionEvent.Default`. For example:
+
+ public class ToDoItem {
+ ...
+ @ActionInteraction
+ public ToDoItem completed() { ... }
+ }
+
+Optionally a subclass can be declared:
+
+ public class ToDoItem {
+
+ public static class CompletedEvent extends AbstractActionInteractionEvent {
+ private static final long serialVersionUID = 1L;
+ public CompletedEvent(
+ final ToDoItem source,
+ final Identifier identifier,
+ final Object... arguments) {
+ super("completed", source, identifier, arguments);
+ }
+ }
+
+ @ActionInteraction(CompletedEvent.class)
+ public ToDoItem completed() { ... }
+
+ }
+
+
+## Subscribers
+
+Subscribers (which must be domain services) subscribe using the Guava API.
+Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
+
+ @DomainService
+ public class SomeSubscriber {
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(ActionInteractionEvent ev) {
+
+ ...
+ }
+
+ }
+
+or can be fine-grained by subscribing to specific event subtypes:
+
+ @DomainService
+ public class SomeSubscriber {
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(ToDoItem.CompletedEvent ev) {
+
+ ...
+ }
+
+ }
+
+The subscriber's method is called (up to) 5 times:
+
+* whether to veto visibility (hide)
+* whether to veto usability (disable)
+* whether to veto execution (validate)
+* steps to perform prior to the action being invoked.
+* steps to perform after the action has been invoked.
+
+The subscriber can distinguish these by calling `ev.getPhase()`. Thus the general form is:
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(ActionInteractionEvent ev) {
+
+ switch(ev.getPhase()) {
+ case HIDE:
+ ...
+ break;
+ case DISABLE:
+ ...
+ break;
+ case VALIDATE:
+ ...
+ break;
+ case EXECUTING:
+ ...
+ break;
+ case EXECUTED:
+ ...
+ break;
+ }
+ }
+
+Vetoing is performed by calling the appropriate method on the event:
+
+* To hide:
+
+ ev.hide()
+
+* To disable:
+
+ ev.disable("...");
+
+* To invalidate:
+
+ ev.invalidate("...");
+
+It is also possible to abort the transaction during the executing or executed
+phases by throwing an exception. If the exception is a subtype of `RecoverableException`
+then the exception will be rendered as a user-friendly warning (eg Growl/toast)
+rather than an error.
+
+
+## Raising events programmatically.
+
+Normally events are only raised for interactions through the UI. However, events can be raised programmatically by
+wrapping the target object using the [Wrapper Factory](../services/wrapper-factory.html) service.
+
+
+## See also
+
+Interaction events can also be raised for [properties](./PropertyInteraction.html) and [collections](./CollectionInteraction.html).
+
+
Added: isis/site/trunk/content/reference/recognized-annotations/CollectionInteraction.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/reference/recognized-annotations/CollectionInteraction.md?rev=1633831&view=auto
==============================================================================
--- isis/site/trunk/content/reference/recognized-annotations/CollectionInteraction.md (added)
+++ isis/site/trunk/content/reference/recognized-annotations/CollectionInteraction.md Thu Oct 23 15:03:34 2014
@@ -0,0 +1,133 @@
+Title: @CollectionInteraction
+
+> Support
+>
+> The Wicket viewer does NOT support collection modification; instead write a pair of actions to add to/remove from the collection.
+>
+> It *is* possible to fire collection interaction events using the wrapper factory; see below for more details.
+
+The `@CollectionInteraction` annotation applies to domain entity collections, allowing
+subscribers to optionally veto, validate or otherwise perform tasks before
+or after the collection has been added to/removed from.
+
+Subscribers subscribe through the [Event Bus Service](../services/event-bus-service.html) using Guava annotations.
+
+By default the event raised is `CollectionInteractionEvent.Default`. For example:
+
+ public class ToDoItem {
+ ...
+ @CollectionInteraction
+ public SortedSet<ToDoItem> getDependencies() { ... }
+ }
+
+Optionally a subclass can be declared:
+
+ public class ToDoItem {
+
+ public static class DependenciesChangedEvent extends CollectionInteractionEvent<ToDoItem, ToDoItem> {
+ private static final long serialVersionUID = 1L;
+ public DependenciesChangedEvent(ToDoItem source, Identifier identifier, Of of, ToDoItem value) {
+ super(source, identifier, of, value);
+ }
+ }
+
+ }
+
+The `of` field indicates if the collection is being accessed, added to or removed from.
+
+
+## Subscribers
+
+Subscribers (which must be domain services) subscribe using the Guava API.
+Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
+
+ @DomainService
+ public class SomeSubscriber {
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(CollectionInteractionEvent ev) {
+
+ ...
+ }
+
+ }
+
+or can be fine-grained by subscribing to specific event subtypes:
+
+ @DomainService
+ public class SomeSubscriber {
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(ToDoItem.DependenciesChangedEvent ev) {
+
+ ...
+ }
+
+ }
+
+The subscriber's method is called (up to) 5 times:
+
+* whether to veto visibility (hide)
+* whether to veto usability (disable)
+* whether to veto execution (validate)
+* steps to perform prior to the property being modified
+* steps to perform after the property has been modified.
+
+The subscriber can distinguish these by calling `ev.getPhase()`. Thus the general form is:
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(CollectionInteractionEvent ev) {
+
+ switch(ev.getPhase()) {
+ case HIDE:
+ ...
+ break;
+ case DISABLE:
+ ...
+ break;
+ case VALIDATE:
+ ...
+ break;
+ case EXECUTING:
+ ...
+ break;
+ case EXECUTED:
+ ...
+ break;
+ }
+ }
+
+Vetoing is performed by calling the appropriate method on the event:
+
+* To hide:
+
+ ev.hide()
+
+* To disable:
+
+ ev.disable("...");
+
+* To invalidate:
+
+ ev.invalidate("...");
+
+It is also possible to abort the transaction during the executing or executed
+phases by throwing an exception. If the exception is a subtype of `RecoverableException`
+then the exception will be rendered as a user-friendly warning (eg Growl/toast)
+rather than an error.
+
+
+## Raising events programmatically.
+
+Normally events are only raised for interactions through the UI. However, events can be raised programmatically by
+wrapping the target object using the [Wrapper Factory](../services/wrapper-factory.html) service.
+
+
+## See also
+
+Interaction events can also be raised for [actions](./ActionInteraction.html) and [properties](./PropertyInteraction.html) .
+
+
Added: isis/site/trunk/content/reference/recognized-annotations/Digits.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/reference/recognized-annotations/Digits.md?rev=1633831&view=auto
==============================================================================
--- isis/site/trunk/content/reference/recognized-annotations/Digits.md (added)
+++ isis/site/trunk/content/reference/recognized-annotations/Digits.md Thu Oct 23 15:03:34 2014
@@ -0,0 +1,4 @@
+Title: @javax.validation.constraints.Digits
+
+This is a stub.
+
Modified: isis/site/trunk/content/reference/recognized-annotations/PostsPropertyChangedEvent-deprecated.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/reference/recognized-annotations/PostsPropertyChangedEvent-deprecated.md?rev=1633831&r1=1633830&r2=1633831&view=diff
==============================================================================
--- isis/site/trunk/content/reference/recognized-annotations/PostsPropertyChangedEvent-deprecated.md (original)
+++ isis/site/trunk/content/reference/recognized-annotations/PostsPropertyChangedEvent-deprecated.md Thu Oct 23 15:03:34 2014
@@ -1,26 +1,3 @@
Title: @PostsPropertyChangedEvent
-> Support
->
-> Supported by all viewers (implementation is part of core metamodel)
-
-The `@PostsPropertyChangedEvent` annotation applies to domain entity properties, and will automatically posts instances of the `PropertyChangedEvent` class (in `org.apache.isis.applib.services.eventbus`) to the [Event Bus Service](../services/event-bus-service.html) whenever they are, erm, changed.
-
-For example:
-
- public class ToDoItem {
- ...
- @PostsPropertyChangedEvent
- public LocalDate getDueBy() { ... }
- }
-
-This saves having to manually post an event using `EventBusService#post(...)`.
-
-If the Event Bus Service is not configured, then this is a no-op.
-
-#### Note
-
-Do note however:
-* The `@PropertyChangedEvent` is only raised for interactions through the UI, or through interactions through a wrapper created by the [Wrapper Factory](../services/wrapper-factory.html) service. It is *not* raised through a normal programmatic invocation of the getter method.
-* This is work-in-progress. In the future other interactions (such as action invocations, or collection add to/remove) may also be raised automatically.
-
+Superceded by [PropertyInteraction](./PropertyInteraction.html).
Added: isis/site/trunk/content/reference/recognized-annotations/PropertyInteraction.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/reference/recognized-annotations/PropertyInteraction.md?rev=1633831&view=auto
==============================================================================
--- isis/site/trunk/content/reference/recognized-annotations/PropertyInteraction.md (added)
+++ isis/site/trunk/content/reference/recognized-annotations/PropertyInteraction.md Thu Oct 23 15:03:34 2014
@@ -0,0 +1,132 @@
+Title: @PropertyInteraction
+
+> Support
+>
+> Supported by all viewers (implementation is part of core metamodel)
+
+The `@PropertyInteraction` annotation applies to domain entity properties, allowing
+subscribers to optionally veto, validate or otherwise perform tasks before
+or after the property has been modified/cleared.
+
+Subscribers subscribe through the [Event Bus Service](../services/event-bus-service.html) using Guava annotations.
+
+By default the event raised is `PropertyInteractionEvent.Default`. For example:
+
+ public class ToDoItem {
+ ...
+ @PropertyInteraction
+ public LocalDate getDueBy() { ... }
+ }
+
+Optionally a subclass can be declared:
+
+ public class ToDoItem {
+
+ public static class DueByChangedEvent extends PropertyInteractionEvent<ToDoItem, LocalDate> {
+ private static final long serialVersionUID = 1L;
+ public DueByChangedEvent(ToDoItem source, Identifier identifier, LocalDate oldValue, LocalDate newValue) {
+ super(source, identifier, oldValue, newValue);
+ }
+ }
+
+ @PropertyInteraction(ToDoItem.DueByChangedEvent)
+ public LocalDate getDueBy() { ... }
+
+ }
+
+
+## Subscribers
+
+Subscribers (which must be domain services) subscribe using the Guava API.
+Subscribers can be either coarse-grained (if they subscribe to the top-level event type):
+
+ @DomainService
+ public class SomeSubscriber {
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(PropertyInteractionEvent ev) {
+
+ ...
+ }
+
+ }
+
+or can be fine-grained by subscribing to specific event subtypes:
+
+ @DomainService
+ public class SomeSubscriber {
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(ToDoItem.DueByChangedEvent ev) {
+
+ ...
+ }
+
+ }
+
+The subscriber's method is called (up to) 5 times:
+
+* whether to veto visibility (hide)
+* whether to veto usability (disable)
+* whether to veto execution (validate)
+* steps to perform prior to the property being modified
+* steps to perform after the property has been modified.
+
+The subscriber can distinguish these by calling `ev.getPhase()`. Thus the general form is:
+
+ @Programmatic
+ @com.google.common.eventbus.Subscribe
+ public void on(PropertyInteractionEvent ev) {
+
+ switch(ev.getPhase()) {
+ case HIDE:
+ ...
+ break;
+ case DISABLE:
+ ...
+ break;
+ case VALIDATE:
+ ...
+ break;
+ case EXECUTING:
+ ...
+ break;
+ case EXECUTED:
+ ...
+ break;
+ }
+ }
+
+Vetoing is performed by calling the appropriate method on the event:
+
+* To hide:
+
+ ev.hide()
+
+* To disable:
+
+ ev.disable("...");
+
+* To invalidate:
+
+ ev.invalidate("...");
+
+It is also possible to abort the transaction during the executing or executed
+phases by throwing an exception. If the exception is a subtype of `RecoverableException`
+then the exception will be rendered as a user-friendly warning (eg Growl/toast)
+rather than an error.
+
+
+## Raising events programmatically.
+
+Normally events are only raised for interactions through the UI. However, events can be raised programmatically by
+wrapping the target object using the [Wrapper Factory](../services/wrapper-factory.html) service.
+
+
+## See also
+
+Interaction events can also be raised for [actions](./ActionInteraction.html) and [collections](./CollectionInteraction.html).
+
+
Added: isis/site/trunk/content/reference/recognized-annotations/ViewModel.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/reference/recognized-annotations/ViewModel.md?rev=1633831&view=auto
==============================================================================
--- isis/site/trunk/content/reference/recognized-annotations/ViewModel.md (added)
+++ isis/site/trunk/content/reference/recognized-annotations/ViewModel.md Thu Oct 23 15:03:34 2014
@@ -0,0 +1,4 @@
+Title: @ViewModel
+
+This is a stub.
+
Modified: isis/site/trunk/content/reference/recognized-annotations/about.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/reference/recognized-annotations/about.md?rev=1633831&r1=1633830&r2=1633831&view=diff
==============================================================================
--- isis/site/trunk/content/reference/recognized-annotations/about.md (original)
+++ isis/site/trunk/content/reference/recognized-annotations/about.md Thu Oct 23 15:03:34 2014
@@ -5,67 +5,268 @@ go back to: [documentation](../../docume
<table class="table table-bordered table-condensed table-hover">
<tr>
<th>Annotation</th>
+ <th>Purpose</th>
<th>.layout.json ?</th>
<th>Deprecated?</th>
</tr>
-<tr><td><a href="./ActionOrder-deprecated.html">@ActionOrder</a></td><td></td><td>Y</td></tr>
-<tr><td><a href="./ActionSemantics.html">@ActionSemantics</a></td><td></td><td></td></tr>
-<tr><td><a href="./Aggregated.html">@Aggregated</a></td><td></td><td></td></tr>
-<tr><td><a href="./Audited.html">@Audited</a></td><td></td><td></td></tr>
-<tr><td><a href="./AutoComplete.html">@AutoComplete</a></td><td></td><td></td></tr>
-<tr><td><a href="./Bookmarkable.html">@Bookmarkable</a></td><td></td><td></td></tr>
-<tr><td><a href="./Bounded.html">@Bounded</a></td><td></td><td></td></tr>
-<tr><td><a href="./Bulk.html">@Bulk</a></td><td></td><td></td></tr>
-<tr><td><a href="./Command.html">@Command</a></td><td></td><td></td></tr>
-<tr><td><a href="./CssClass.html">@CssClass</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./CssClassFa.html">@CssClassFa</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./Debug.html">@Debug</a></td><td></td><td></td></tr>
-<tr><td><a href="./Defaulted.html">@Defaulted</a></td><td></td><td></td></tr>
-<tr><td><a href="./DescribedAs.html">@DescribedAs</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./Disabled.html">@Disabled</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./Encodable.html">@Encodable</a></td><td></td><td></td></tr>
-<tr><td><a href="./EqualByContent.html">@EqualByContent</a></td><td></td><td></td></tr>
-<tr><td><a href="./Exploration.html">@Exploration</a></td><td></td><td></td></tr>
-<tr><td><a href="./Facets.html">@Facets</a></td><td></td><td></td></tr>
-<tr><td><a href="./FieldOrder-deprecated.html">@FieldOrder</a></td><td></td><td>Y</td></tr>
-<tr><td><a href="./Hidden.html">@Hidden</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./HomePage.html">@HomePage</a></td><td></td><td></td></tr>
-<tr><td><a href="./Idempotent-deprecated.html">@Idempotent</a></td><td></td><td>Y</td></tr>
-<tr><td><a href="./Ignore-deprecated.html">@Ignore</a></td><td></td><td>Y</td></tr>
-<tr><td><a href="./Immutable.html">@Immutable</a></td><td></td><td></td></tr>
-<tr><td><a href="./Inject.html">@javax.inject.Inject</a></td><td></td><td></td></tr>
-<tr><td><a href="./Mask.html">@Mask</a></td><td></td><td></td></tr>
-<tr><td><a href="./MaxLength.html">@MaxLength</a></td><td></td><td></td></tr>
-<tr><td><a href="./MemberGroupLayout.html">@MemberGroupLayout</a></td><td></td><td></td></tr>
-<tr><td><a href="./MemberGroups.html">@MemberGroups</a></td><td></td><td></td></tr>
-<tr><td><a href="./MemberOrder.html">@MemberOrder</a></td><td></td><td></td></tr>
-<tr><td><a href="./MinLength.html">@MinLength</a></td><td></td><td></td></tr>
-<tr><td><a href="./MultiLine.html">@MultiLine</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./MustSatisfy.html">@MustSatisfy</a></td><td></td><td></td></tr>
-<tr><td><a href="./Named.html">@Named</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./NotContributed.html">@NotContributed</a></td><td></td><td></td></tr>
-<tr><td><a href="./NotInServiceMenu.html">@NotInServiceMenu</a></td><td></td><td></td></tr>
-<tr><td><a href="./NotPersistable.html">@NotPersistable</a></td><td></td><td></td></tr>
-<tr><td><a href="./NotPersisted.html">@NotPersisted</a></td><td></td><td></td></tr>
-<tr><td><a href="./ObjectType.html">@ObjectType</a></td><td></td><td></td></tr>
-<tr><td><a href="./Optional.html">@Optional</a></td><td></td><td></td></tr>
-<tr><td><a href="./Paged.html">@Paged</a></td><td></td><td></td></tr>
-<tr><td><a href="./Parseable.html">@Parseable</a></td><td></td><td></td></tr>
-<tr><td><a href="./Plural.html">@Plural</a></td><td></td><td></td></tr>
-<tr><td><a href="./PostsPropertyChangeEvent-deprecated.html">@PostsPropertyChangeEvent</a></td><td></td><td>Y</td></tr>
-<tr><td><a href="./Programmatic.html">@Programmatic</a></td><td></td><td></td></tr>
-<tr><td><a href="./Prototype.html">@Prototype</a></td><td></td><td></td></tr>
-<tr><td><a href="./Prototype.html">@PublishedAction</a></td><td></td><td></td></tr>
-<tr><td><a href="./PublishedObject.html">@PublishedObject</a></td><td></td><td></td></tr>
-<tr><td><a href="./QueryOnly-deprecated.html">@QueryOnly</a></td><td></td><td>Y</td></tr>
-<tr><td><a href="./RegEx.html">@RegEx</a></td><td></td><td></td></tr>
-<tr><td><a href="./Render.html">@Render</a></td><td></td><td></td></tr>
-<tr><td><a href="./RenderedAsDayBefore.html">@RenderedAsDayBefore</a></td><td></td><td></td></tr>
-<tr><td><a href="./RequestScoped.html">@javax.enterprise.context.RequestScoped</a></td><td></td><td></td></tr>
-<tr><td><a href="./Resolve.html">@Resolve</a></td><td></td><td></td></tr>
-<tr><td><a href="./SortedBy.html">@SortedBy</a></td><td></td><td></td></tr>
-<tr><td><a href="./Title.html">@Title</a></td><td></td><td></td></tr>
-<tr><td><a href="./TypeOf.html">@TypeOf</a></td><td></td><td></td></tr>
-<tr><td><a href="./TypicalLength.html">@TypicalLength</a></td><td>Y</td><td></td></tr>
-<tr><td><a href="./Value.html">Value</a></td><td></td><td></td></tr></tr>
+<tr><td><a href="./ActionInteraction.html">@ActionInteraction</a></td>
+<td>Enable subscribers to either veto, validate or take further steps before/after an action has been invoked.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./ActionOrder-deprecated.html">@ActionOrder</a></td>
+<td>UI hint for buttons, menu items
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./ActionSemantics.html">@ActionSemantics</a></td>
+<td>Query-only, idempotent or non-idempotent.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Aggregated.html">@Aggregated</a></td>
+<td>Part of an aggregate root (only partly supported)
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Audited.html">@Audited</a></td>
+<td>Audit changes to an object
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./AutoComplete.html">@AutoComplete</a></td>
+<td>Repository method to search for entities
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Bookmarkable.html">@Bookmarkable</a></td>
+<td>UI hint: whether (and how) to create a bookmark for visited object.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Bounded.html">@Bounded</a></td>
+<td>Bounded (and limited) number of instances of an entity type, translates into a drop-down for any property of that type.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Bulk.html">@Bulk</a></td>
+<td>Indicates an action is a bulk action, can be applied to multiple instances.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./CollectionInteraction.html">@CollectionInteraction</a></td>
+<td>Enable subscribers to either veto, validate or take further steps before/after a collection has been added to or removed from.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Command.html">@Command</a></td>
+<td>Action invocation should be reified as a command object, optionally persistable for profiling and enhanced auditing, and background/async support.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./CssClass.html">@CssClass</a></td>
+<td>UI hint to allow individual objects or object members layout to be customized by application-specific CSS.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./CssClassFa.html">@CssClassFa</a></td>
+<td>UI hint to use font awesome icons for action buttons/menu items and optionally as an object icon.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./Debug-deprecated.html">@Debug</a></td>
+<td>Action only invocable in debug mode.
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./Defaulted.html">@Defaulted</a></td>
+<td>Indicates that a (value) class has a default value.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./DescribedAs.html">@DescribedAs</a></td>
+<td>UI hint to provide a description of an object or object member.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./Digits.html">@javax.validation.constraints.Digits</a></td>
+<td>Precision/scale for BigDecimal values.
+</td>
+<tr><td><a href="./Disabled.html">@Disabled</a></td>
+<td>UI hint that object property cannot be edited, an object collection cannot be added to/removed from, or an object action cannot be invoked.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./Encodable.html">@Encodable</a></td>
+<td>Indicates that a (value) class can be serialized/encoded.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./EqualByContent.html">@EqualByContent</a></td>
+<td>Indicates that a value class has equality semantics.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Exploration-deprecated.html">@Exploration</a></td>
+<td>Action available in special 'exploration' mode.
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./Facets.html">@Facets</a></td>
+<td>Install arbitrary facets within the Isis metamodel.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./FieldOrder-deprecated.html">@FieldOrder</a></td>
+<td>UI hint for property/collection order
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./Hidden.html">@Hidden</a></td>
+<td>UI hint that object member not visible.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./HomePage.html">@HomePage</a></td>
+<td>Query-only action (on domain service) to be invoked, result of which is
+rendered as the user's home page.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Idempotent-deprecated.html">@Idempotent</a></td>
+<td>Replaced by @ActionSemantics.
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./Ignore-deprecated.html">@Ignore</a></td>
+<td>Replaced by @Programmatic.
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./Immutable.html">@Immutable</a></td>
+<td>An object's state cannot be changed (properties cannot be edited, collections cannot be added to or removed from). Actions <i>can</i> still be invoked.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Inject.html">@javax.inject.Inject</a></td>
+<td>Inject domain service into a domain object (entity or view model) or another domain service.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Mask.html">@Mask</a></td>
+<td>How to parse/render values (only partly supported)
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./MaxLength.html">@MaxLength</a></td>
+<td>Maximum length of a property value (strings).
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./MemberGroupLayout.html">@MemberGroupLayout</a></td>
+<td>UI hint grouping of properties into groups, and organizing of properties, collections into columns.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./MemberGroups.html">@MemberGroups</a></td>
+<td>Replaced by @MemberGroupLayout
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./MemberOrder.html">@MemberOrder</a></td>
+<td>UI hint ordering properties, collections and actions, and associating actions with either a property or a collection.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./MinLength.html">@MinLength</a></td>
+<td>Minimum number of characters required for an auto-complete search argument.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./MultiLine.html">@MultiLine</a></td>
+<td>UI hint to render string property over multiple lines (a textarea rather than a textbox)
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./MustSatisfy.html">@MustSatisfy</a></td>
+<td>Specify arbitrary specification constraints on a class member, action parameter or object.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Named.html">@Named</a></td>
+<td>UI hint to override name inferred from class. Required for parameter names (prior to Java8)
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./NotContributed.html">@NotContributed</a></td>
+<td>UI hint indicating that a domain service action is not rendered as an action on the (entity) types of its parameters. For 1-arg query-only actions, controls whether the domain service action is rendered as a property or collection on the entity type of its parameter.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./NotInServiceMenu.html">@NotInServiceMenu</a></td>
+<td>UI hint indicating that a domain service should not be rendered in the application menu (at top of page in Wicket viewer).
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./NotPersistable.html">@NotPersistable</a></td>
+<td>Indicates that a domain object may not be programmatically persisted (partly supported).
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./NotPersisted.html">@NotPersisted</a></td>
+<td>Indicates that an object property is derived, is not persisted.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./ObjectType.html">@ObjectType</a></td>
+<td>For constructing the external identifier (URI) of an entity instance (part of its URL in both Wicket viewer and Restful Objects viewer).
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Optional.html">@Optional</a></td>
+<td>Specifies that a property or action parameter is not mandatory.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Paged.html">@Paged</a></td>
+<td>UI hint for (client-side) paging of collections (parented or standalone).
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Parseable.html">@Parseable</a></td>
+<td>Indicates that a (value) class can be reconstructed from a string.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Plural.html">@Plural</a></td>
+<td>UI hint for the irregular plural form of an entity type.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./PostsPropertyChangeEvent-deprecated.html">@PostsPropertyChangeEvent</a></td>
+<td>Replaced by @PropertyInteraction
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./PropertyInteraction.html">@PropertyInteraction</a></td>
+<td>Enable subscribers to either veto, validate or take further steps before/after a property has been modified or cleared.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Programmatic.html">@Programmatic</a></td>
+<td>Ignore a public method, excluded from the Isis metamodel.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Prototype.html">@Prototype</a></td>
+<td>UI hint indicating that an action should only be visible in 'prototype' mode.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./PublishedAction.html">@PublishedAction</a></td>
+<td>Action invocation should be serialized and published by configured PublishingService (if any), eg to other systems.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./PublishedObject.html">@PublishedObject</a></td>
+<td>Change to object should be serialized and published by configured PublishingService (if any), eg to other systems.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./QueryOnly-deprecated.html">@QueryOnly</a></td>
+<td>Replaced by @ActionSemantics.
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./RegEx.html">@RegEx</a></td>
+<td>Validate change to value of string property.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Render.html">@Render</a></td>
+<td>UI hint to eagerly (or lazily) render the contents of a collection.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./RenderedAsDayBefore.html">@RenderedAsDayBefore</a></td>
+<td>UI hint to render dates as the day before; ie store [a,b) internally but render [a,b-1]) to end-user.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./RequestScoped.html">@javax.enterprise.context.RequestScoped</a></td>
+<td>Specify that a domain service has request-scope (rather than a singleton).
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Resolve-deprecated.html">@Resolve</a></td>
+<td>Replaced by @Render.
+</td>
+<td></td><td>Y</td></tr>
+<tr><td><a href="./SortedBy.html">@SortedBy</a></td>
+<td>UI hint for collections, display in order determined by specified Comparator.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./Title.html">@Title</a></td>
+<td>UI hint indicating which of the object's properties should be used to build up a title for the object.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./TypeOf.html">@TypeOf</a></td>
+<td>The type of entity stored within a collection (if cannot be otherwise inferred, eg from generics).
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./TypicalLength.html">@TypicalLength</a></td>
+<td>UI hint for the typical length of a string property, eg to determine a sensible length for a textbox.
+</td>
+<td>Y</td><td></td></tr>
+<tr><td><a href="./Value.html">@Value</a></td>
+<td>Specify that a class has value-semantics.
+</td>
+<td></td><td></td></tr>
+<tr><td><a href="./ViewModel.html">@ViewModel</a></td>
+<td>Specify that a class is a view model (rather than a persisted entity).
+</td>
+<td></td><td></td></tr>
</table>