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

[[howto-create-concern,Create a Concern]]
= Create a Concern =

Concerns are defined in <<def-concern>>.

If you want to reproduce what's explained in this tutorial, remember to depend on the Core Bootstrap artifact:

include::../../../../core/bootstrap/build/docs/buildinfo/artifact.txt[]

At runtime you will need the Core Runtime artifact too. See the <<howto-depend-on-zest>> tutorial for details.

== Typed Concern ==

A typed Concern is a Java class that implements the MixinType it can be used on:

[snippet,java]
-----------
source=tutorials/introduction/tenminutes/src/main/java/org/apache/zest/demo/tenminute/InventoryConcern.java
tag=allClass
-----------

Note that we could have implemented the InventoryConcern as an abstract class if we were not interested in __all__ the methods in the Order interface.
Extending the ConcernOf is a convenience mechanism, instead of an explicit @ConcernFor annotation on
a private field, which can be used in rare occasions when you are not able to extend. This base class defines the next
field, which is set up by the Zest™ runtime and points to the next fragment in the call stack. We can also see that the
InventoryService is provided to the concern, which is done with dependency injection. Zest™ also supports dependency
injection via constructors and methods.

It can be used as follows;

[snippet,java]
-----------
source=manual/src/main/java/org/apache/zest/manual/recipes/concern/Order.java
tag=class
-----------

Methods of the Concern Fragment will be called before the Mixin invocation.


== Generic Concern ==

A generic Concern is a Java class that implements java.lang.reflect.InvocationHandler which allows it to be used on any
arbitrary MixinType.

[snippet,java]
-----------
source=manual/src/main/java/org/apache/zest/manual/recipes/concern/MyGenericConcern.java
tag=class
-----------

It can be used as follows;

[snippet,java]
-----------
source=manual/src/main/java/org/apache/zest/manual/recipes/concern/AnyMixinType.java
tag=class
-----------

Methods of the Concern Fragment will be called before the Mixin invocation.

=== AppliesTo ===

For generic Concerns that should only trigger on methods with specific annotations or fulfilling some expression, add
@AppliesTo annotation to the Concern class which points to either triggering annotation(s), or to AppliesToFilter
implementation(s).

The Concern is invoked if one of the triggering annotations is found or one of the AppliesToFilter accepts the
invocation. In other words the AppliesTo arguments are OR'ed.

Here is how the declaration goes ;

[snippet,java]
-----------
source=manual/src/main/java/org/apache/zest/manual/recipes/concern/MyGenericConcern.java
tag=appliesTo
-----------

And how to use the annotation ;

[snippet,java]
-----------
source=manual/src/main/java/org/apache/zest/manual/recipes/concern/AnyMixinType.java
tag=annotationUse
-----------

Here only the doSomething() method will see the Concern applied whereas the doSomethingElse() method won't.

Finally here is how to implement an AppliesToFilter:

[snippet,java]
-----------
source=manual/src/main/java/org/apache/zest/manual/recipes/concern/MyAppliesToFilter.java
tag=filter
-----------
