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 2015/02/28 17:16:08 UTC
svn commit: r1662956 - in /isis/site/trunk/content/more-advanced-topics:
How-to-suppress-contributions.md
how-to-01-062-How-to-decouple-dependencies-using-contributions.md
how-to-suppress-contributions-to-action-parameter.md
Author: danhaywood
Date: Sat Feb 28 16:16:08 2015
New Revision: 1662956
URL: http://svn.apache.org/r1662956
Log:
updating site for contributed actions etc
Added:
isis/site/trunk/content/more-advanced-topics/how-to-suppress-contributions-to-action-parameter.md
- copied, changed from r1660662, isis/site/trunk/content/more-advanced-topics/How-to-suppress-contributions.md
Removed:
isis/site/trunk/content/more-advanced-topics/How-to-suppress-contributions.md
Modified:
isis/site/trunk/content/more-advanced-topics/how-to-01-062-How-to-decouple-dependencies-using-contributions.md
Modified: isis/site/trunk/content/more-advanced-topics/how-to-01-062-How-to-decouple-dependencies-using-contributions.md
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/more-advanced-topics/how-to-01-062-How-to-decouple-dependencies-using-contributions.md?rev=1662956&r1=1662955&r2=1662956&view=diff
==============================================================================
--- isis/site/trunk/content/more-advanced-topics/how-to-01-062-How-to-decouple-dependencies-using-contributions.md (original)
+++ isis/site/trunk/content/more-advanced-topics/how-to-01-062-How-to-decouple-dependencies-using-contributions.md Sat Feb 28 16:16:08 2015
@@ -14,9 +14,11 @@ In the `customers` module, we have the `
For both `Customer` and `FixedAsset` (and any other future implementation) we would want to have some means to add and remove `CommunicationChannel`s). Rather than having very similar collections and actions in each, we can implement the requirement by defining the behaviour in the `communicationChannels` module, through a domain service. It would look something like:
+ @DomainService(
+ nature=NatureOfService.VIEW_CONTRIBUTIONS_ONLY
+ )
public class CommunicationChannelContributions {
- @NotInServiceMenu
public CommunicationChannelOwner addPostalAddress(
final CommunicationChannelOwner owner,
final @Named("Address line 1") String addressLine1,
@@ -25,17 +27,28 @@ For both `Customer` and `FixedAsset` (an
...
}
- @NotInServiceMenu
- @NotContributed(As.ACTION)
+ @Action(
+ semantics=SemanticsOf.SAFE
+ )
+ @ActionLayout(
+ contributed=Contributed.AS_ASSOCIATION)
+ }
+ @CollectionLayout(
+ render=RenderType.EAGERLY
+ )
public Collection<CommunicationChannel> communicationChannels(
- final CommunicationOwner owner) {
+ final CommunicationChannelOwner owner) {
...
}
- @NotInServiceMenu
- @NotContributed(As.ACTION)
+ @Action(
+ semantics=SemanticsOf.SAFE
+ )
+ @ActionLayout(
+ contributed=Contributed.AS_ASSOCIATION)
+ }
public CommunicationChannel preferredCommunicationChannels(
- final CommunicationOwner owner) {
+ final CommunicationChannelOwner owner) {
...
}
@@ -43,12 +56,11 @@ For both `Customer` and `FixedAsset` (an
The first action, `addPostalAddress` will be rendered seemingly as a regular action for all implementations of `CommunicationChannelOwner`, but with that parameter omitted. This is a contributed action.
-The second action - whose implementation will be some repository query to search for all `CommunicationChannel`s for the given owner - will be rendered as a collection of the owner; this is a contributed collection. The `@NotContributed(As.ACTION)` suppresses the action from being contributed as an action also.
-
-Finally, the third action - that again will be some sort of repository query - will be rendered as a property o fhte owner; this is a contributed property. Again, the `@NotContributed(As.ACTION)` suppresses the action from being contributed as an action also.
+The second action - whose implementation will be some repository query to search for all `CommunicationChannel`s for the given owner - will be rendered as a collection of the owner; this is a contributed collection. The `@ActionLayout(contributed=Contributed.AS_ASSOCIATION)` suppresses the action from being contributed as an action also. Note that the action must have safe semantics, specified using `@Action(semantics=SemanticsOf.SAFE)`; otherwise the rendering of the collection could cause unwanted side-effects. Note also that it is valid to apply a `@CollectionLayout` annotation; or this could be specified using a `Xxx.layout.json` file for each contributee (implementing `CommunicationChannelOwner`).
+Finally, the third action - that again will be some sort of repository query - will be rendered as a property of hte owner; this is a contributed property. Again, the action must have safe semantics, specified using `@Action(semantics=SemanticsOf.SAFE)`. And, again, , the `@ActionLayout(contributed=Contributed.AS_ASSOCIATION)` suppresses the action from being contributed as an action also. Analogously to the contributed collection, a `@PropertyLayout` annotation could be also be specified.
## See also
-For another example of contributions, see [this page](./how-to-suppress-contributions.html) describing how to suppress contributions for one action parameter but not another.
+See also: how to [suppress contributions for one action parameter](./how-to-suppress-contributions-to-action-parameter.html) but not another.
Copied: isis/site/trunk/content/more-advanced-topics/how-to-suppress-contributions-to-action-parameter.md (from r1660662, isis/site/trunk/content/more-advanced-topics/How-to-suppress-contributions.md)
URL: http://svn.apache.org/viewvc/isis/site/trunk/content/more-advanced-topics/how-to-suppress-contributions-to-action-parameter.md?p2=isis/site/trunk/content/more-advanced-topics/how-to-suppress-contributions-to-action-parameter.md&p1=isis/site/trunk/content/more-advanced-topics/How-to-suppress-contributions.md&r1=1660662&r2=1662956&rev=1662956&view=diff
==============================================================================
--- isis/site/trunk/content/more-advanced-topics/How-to-suppress-contributions.md (original)
+++ isis/site/trunk/content/more-advanced-topics/how-to-suppress-contributions-to-action-parameter.md Sat Feb 28 16:16:08 2015
@@ -5,43 +5,49 @@ If a contributed action has multiple par
While this will often be what you want (or at least harmless), on some occasions you may want to suppress the contributed
action on one of those parameter types.
-The [kitchen sink app](https://github.com/isisaddons/isis-app-kitchensink) (part of [isisaddons.org](http://www.isisaddons.org/)
+The [kitchen sink app](https://github.com/isisaddons/isis-app-kitchensink) (part of [isisaddons.org](http://www.isisaddons.org/), not ASF)
includes an example showing how this can be done.
-In its `contrib` package there are three entities:
+In its `contributee` package there are two entities:
-* [Person](https://github.com/isisaddons/isis-app-kitchensink/tree/d4fd4e8b799af42c343b7e451bbf6f5d218869a1/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/Person.java)
-* [Preference](https://github.com/isisaddons/isis-app-kitchensink/tree/d4fd4e8b799af42c343b7e451bbf6f5d218869a1/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributed/Preference.java)
-* [FoodStuff](https://github.com/isisaddons/isis-app-kitchensink/tree/d4fd4e8b799af42c343b7e451bbf6f5d218869a1/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/FoodStuff.java)
+* [Person](https://github.com/isisaddons/isis-app-kitchensink/blob/262e3bc149ac0d82757738339af9683668f44155/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/Person.java)
+* [FoodStuff](https://github.com/isisaddons/isis-app-kitchensink/blob/262e3bc149ac0d82757738339af9683668f44155/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/FoodStuff.java)
+
+and in its `contributed` package there is one entity:
+
+* [Preference](https://github.com/isisaddons/isis-app-kitchensink/blob/262e3bc149ac0d82757738339af9683668f44155/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributed/Preference.java)
eg Mary LIKEs Apple, Mungo HATEs Banana, Midge LOVEs Oranges
Neither `Person` nor `FoodStuff` knows about `Preference`s; the `Preference` is the tuple that associates the two together.
-The [PreferenceContributions](https://github.com/isisaddons/isis-app-kitchensink/tree/d4fd4e8b799af42c343b7e451bbf6f5d218869a1/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributed/PreferenceContributions.java) service contributes the following:
+The [PreferenceContributions](https://github.com/isisaddons/isis-app-kitchensink/blob/262e3bc149ac0d82757738339af9683668f44155/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributed/PreferenceContributions.java) service contributes the following:
* `likes(...)` - a contributed collection to `Person`:
<pre>
- @NotContributed(NotContributed.As.ACTION) // ie contributed as collection
- @NotInServiceMenu
- @ActionSemantics(ActionSemantics.Of.SAFE)
+ @Action(
+ semantics = SemanticsOf.SAFE
+ )
+ @ActionLayout(
+ contributed = Contributed.AS_ASSOCIATION
+ )
public List<FoodStuff> likes(final Person person) { ... }
</pre>
* `firstLove(...)` - contributed property, also to `Person`
<pre>
- @NotContributed(NotContributed.As.ACTION) // ie contributed as property
- @NotInServiceMenu
- @ActionSemantics(ActionSemantics.Of.SAFE)
+ @Action(semantics = SemanticsOf.SAFE)
+ @ActionLayout(
+ contributed = Contributed.AS_ASSOCIATION
+ )
public FoodStuff firstLove(final Person person) { ... }
</pre>
* `addPreference(...)` - a contributed action to both `Person` and `FoodStuff`
<pre>
- @NotInServiceMenu
public Preference addPreference(
final Person person,
final @Named("Type") Preference.PreferenceType preferenceType,
@@ -51,7 +57,6 @@ The [PreferenceContributions](https://gi
* `removePreference(...)` - a contributed action to both `Person` and `FoodStuff`
<pre>
- @NotInServiceMenu
public Person removePreference(final Person person, final FoodStuff foodStuff) {
final List<Preference> preferences1 = preferences.listAllPreferences();
for (Preference preference : preferences1) { ... }
@@ -63,7 +68,7 @@ For the `Person` entity, the actions are
<img src="images/suppressing-contributions-person.png" width="800px"/>
-which is accomplished using this <a href="https://github.com/isisaddons/isis-app-kitchensink/blob/d4fd4e8b799af42c343b7e451bbf6f5d218869a1/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/Person.layout.json#L44-L61">fragment</a> in the `Person.layout.json` file:
+which is accomplished using this <a href="https://github.com/isisaddons/isis-app-kitchensink/blob/262e3bc149ac0d82757738339af9683668f44155/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/Person.layout.json#L44-L61">fragment</a> in the `Person.layout.json` file:
"collections": {
"likes": {
@@ -90,7 +95,7 @@ For the `FoodStuff` entity meanwhile, on
<img src="images/suppressing-contributions-foodstuff.png" width="800px"/>
-which is accomplished using this [fragment](https://github.com/isisaddons/isis-app-kitchensink/blob/d4fd4e8b799af42c343b7e451bbf6f5d218869a1/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/FoodStuff.layout.json#L48-L59) in the `FoodStuff.layout.json` file: we have:
+which is accomplished using this [fragment](https://github.com/isisaddons/isis-app-kitchensink/blob/262e3bc149ac0d82757738339af9683668f44155/dom/src/main/java/org/isisaddons/app/kitchensink/dom/contrib/contributee/FoodStuff.layout.json#L48-L59) in the `FoodStuff.layout.json` file: we have:
"actions": {
"addPreference": {