///////////////////////////////////////////////////////////////
 * 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-step3,Step 3 - Mixins]]
= Step 3 - Mixins =

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

In this step we refactor the Mixin from the previous steps into two, one which serves the behaviour interface and 
one which serves the state interface. This makes it possible to reuse the interfaces independently and also makes it 
easier to exchange one interface implementation with another. This also allows us to specify the new Mixins as default 
implementations of the interfaces by adding @Mixins annotations on them.

Steps for this tutorial:

- Refactor the Mixin into one which implement the behaviour interface and one which implements the state interface. Use the @This injection annotation to allow the behaviour to access the state.
- Add a @Mixins annotations on the behaviour and state interfaces which declare the Mixins as default implementations.
- Remove the @Mixins annotation from the HelloWorldComposite interface.

== Solution ==

Only *HelloWorld.java* remains unchanged.

*HelloWorldComposite.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/polygene/tutorials/composites/tutorial4/HelloWorldComposite.java
tag=solution
----

*HelloWorldBehaviour.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/polygene/tutorials/composites/tutorial4/HelloWorldBehaviour.java
tag=solution
----

*HelloWorldBehaviourMixin.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/polygene/tutorials/composites/tutorial4/HelloWorldBehaviourMixin.java
tag=solution
----

*HelloWorldState.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/polygene/tutorials/composites/tutorial4/HelloWorldState.java
tag=solution
----

*HelloWorldStateMixin.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/polygene/tutorials/composites/tutorial4/HelloWorldStateMixin.java
tag=solution
----

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