/*
* $Id$
*
* 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.
*/
package org.apache.struts2.convention.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* <!-- START SNIPPET: javadoc -->
* <p>
* This annotation allows actions to modify the parent package
* that they are using. Since XWork packages are created by
* the Convention plugin via the Java packages that the actions
* exist in, there is some tricky handling of XWork parent packages
* and namespaces of the XWork packages for discovered
* actions so that two actions in the same package can specify
* different parents and namespaces without collision.
* </p>
*
* <p>
* In order to handle this correctly, the name of the XWork
* package that actions are placed into is built using this
* format:
* </p>
*
* <pre>
* <java-package>#<parent-xwork-package>#<namespace>
* </pre>
*
* <p>
* This mechanism will guarantee that two actions in the same
* Java package can specify different parent packages (using this
* annotation) and namespaces (using the {@link Namespace} annotation).
* </p>
*
* <p>
* This annotation can be used directly on Action classes or
* in the <strong>package-info.java</strong> class in order
* to specify the default XWork parent package for all actions
* in the Java package. The search order for XWork parent packages
* is therefore:
* </p>
*
* <ol>
* <li>Any ParentPackage annotations placed on individual action classes</li>
* <li>Any ParentPackage annotations placed in the package-info.java file</li>
* <li>The struts configuration property <strong>struts.convention.default.parent.package</strong></li>
* </ol>
* <!-- END SNIPPET: javadoc -->
*/
@Target({ElementType.TYPE, ElementType.PACKAGE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface ParentPackage {
/**
* @return The parent package.
*/
String value();
}