///////////////////////////////////////////////////////////////
 * 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-step1,Step 1 - Interface Refactoring]]
= Step 1 - Interface Refactoring =

== Initial Hello World ==

This whole tutorial describes how to step-by-step modify a typical HelloWorld "application" into a full-fledged Zest™
Composite Oriented application. Here is the initial code of HelloWorld.

[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/zest/tutorials/composites/tutorial1/HelloWorld.java
tag=initial
----

== Interface refactoring ==

In this step we start with a basic Java class, which when invoked will concatenate the two properties "phrase" 
and "name". If invoked with the properties set to "Hello" and "World" respectively it will hence return "Hello World".

Zest™ relies heavily on the use of interfaces. This makes it possible for an object to externally implement a number of
interfaces which internally is backed by a number of Mixins, some of which you may have written yourself, and some of 
which may have been reused. This also makes it easy to introduce Modifiers (aka "interceptors", aka "advice"), which 
are Fragments which execute before and/or after the method on the Mixin is invoked.

The first task is therefore to refactor the code so that the method is implemented from an interface instead. We should 
then also separate the state into one interface and the behaviour into another. This will make things easier for us 
later when state and behaviour becomes implemented by separate Mixins.

Steps for this tutorial:

- Refactor the class into interface and implementation.
- Refactor the interface so that it extends one interface called HelloWorldBehaviour with behaviour and one called HelloWorldState with state (get/set methods).

== Solution ==

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

*HelloWorld.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/zest/tutorials/composites/tutorial2/HelloWorld.java
tag=solution
----

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

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

*HelloWorldMixin.java*
[snippet,java]
----
source=tutorials/composites/src/main/java/org/apache/zest/tutorials/composites/tutorial2/HelloWorldMixin.java
tag=solution
----

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