///////////////////////////////////////////////////////////////
 * 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.
///////////////////////////////////////////////////////////////

[[tut-composites-step4,Step 4 - Concerns]]
= Step 4 - Concerns =

Previous step was <<tut-composites-step3>>.

In this step we refactor the mixin from the previous steps so that the result of the say() method is modified to be 
prefixed with "Simon says:". To do this we need to implement a Concern for the say() method. Concerns are a type of 
Modifier which modify the behaviour of the methods in Mixins. They do this by intercepting the invocation of the 
TransientComposite. This allows them to change the invocation parameters, return their own values or throw their own 
exceptions, and do other things which directly affect the invocation of the method.

Concerns should not perform any side-effects, such as updating state in another TransientComposite, Mixin or similar. 
Any side-effects are done in SideEffects, which is another type of Modifier, which are allowed to perform side-effects 
but, in contrast to Concerns, cannot change the parameters or in any other way change the result of the invocation.

Concerns are implemented in one of two ways: either create a class which directly implements the interface whose 
methods should be modified, or create a generic Modifier by implementing the InvocationHandler interface (or subclass 
GenericConcern which does this for you). Add an @ConcernFor dependency injection, as a field, constructor parameter 
or method parameter, which has the same type as the interface the Concern implements. When the TransientComposite is 
invoked the Concern will be called, allowing it to perform it's work. If the call should proceed, then invoke the 
method again on the injected object. The preferred way to do all of this is to subclass ConcernOf which does all of 
this for you.

Concerns are applied by adding an @Concerns annotation on the TransientComposite, the domain interface, or the Mixin 
implementation. Any of these works, and where to put it is a matter of design choice.

Steps for this tutorial:

- Create a typed concern, implement the HelloWorldBehaviour and let it modify the result of the base method by prefix the result with "Simon says:".
- Add an @Concerns annotation on the HelloWorldBehaviourMixin which references the Concern class.

== Solution ==

If you have successfully completed the task, you should end up with the following artifacts;

These ones remain unchanged:

- +HelloWorld.java+
- +HelloWorldBehavior.java+
- +HelloWorldComposite.java+
- +HelloWorldState.java+
- +HelloWorldStateMixin.java+

*HelloWorldBehaviourMixin.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourMixin.java
tag=solution
----

*HelloWorldBehaviourConcern.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/qi4j/tutorials/composites/tutorial5/HelloWorldBehaviourConcern.java
tag=solution
----

Next step is <<tut-composites-step5>>
