@Programmatic
Indicates that an property, collection or action is to be called programmatically and should be ignored from the metamodel.
For example, it may be a helper method that needs to be public
but that doesn’t conform to the requirements of an action (for example, invalid parameter types).
It can also be added to a type, meaning that the type is ignored from the metamodel. This is intended as a "get out of jail" for any classes from unit tests, say, that end up on the classpath of integration tests but should otherwise be ignored.
Examples
A common use-case is to ignore implementation-level artifacts. For example:
public class Customer implements Comparable<Customer> {
...
@Programmatic
public int compareTo(Customer c) {
return getSalary() - c.getSalary();
}
...
}
Note that @Programmatic
is not the same as @Action(hidden=Where.EVERYWHERE)
or @Property(hidden=Where.EVERYWHERE)
etc; it actually means that the class member will not be part of the Apache Causeway metamodel.