Design

Action with no annotations (all the default handlings)
--------------------------

Action name is class name.
Action package is based on the either any Namespace annotations on the class or Java package the
 action class is defined in or the Java package name and the root Java package, which is determined
 based on the package locators or the action package list. In either case, a root package is
 identified and the namespace is the packages below the root up to and including the package that
 contains the action class.
Action method is execute in all cases.
Results are built first from the Result annotations at the class level. Next, they are built from
 the resources available in the web application and in the classpath based on the result location,
 namespace of the action and action name (not anything to do with the code element names). Results
 are found for common result codes including, success, error, input, failure, etc. If a specific
 result doesn't exist using the result code then just the action namespace and action name are used to
 locate results. If there are still no results found, than a redirect is added back to the index
 action for the namespace, if one exists.

Action with Action(s) annotations
---------------------------------

If the annotation is located on any method other than execute, than the action configuration built
 from the annotation is in addition to the action configuration built using the default. Unless there
 is an annotation that contains no value, in which case, the method that annotation is defined for
 becomes the default action method. If the annotation is defined on the execute method, regardless of
 the value of the annotation, no default configuration is built for the class.
If multiple annotations have no value, an error should occur.
If multiple annotations have the same value, an error should occur.

Action name is taken from the annotation value. If the value is empty, the default action name
 is used.
Action package is taken from the annotation value. If the annotation value doesn't start with a slash
 character, the default action namespace is used.
Action method is always the method that the annotation is defined on.
Results are built first from the array of Results on the Action annotation. Next, they are built
 from the class level Result annotations. Lastly, all default results are created. All Results already
 created during this process should not be overridden later in the process.
