/* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
 *
 * Licensed 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.springframework.security.access.vote;

import java.lang.reflect.Method;


/**
 * This is a strategy interface for determining which parts of a method invocation
 * are labeled. Not all arguments are necessarily labeled. This offers a plugabble
 * mechanism to define various ways to label data.
 *
 * @author Greg Turnquist
 */
public interface LabelParameterStrategy {
    //~ Methods ========================================================================================================

    /**
     * Get the actual label associated with the argument. NOTE: This currently only supports one label per
     * argument.
     *
     * @param method
     * @param arg
     *
     * @return string value of the label
     */
    String getLabel(Method method, Object arg);

    /**
     * Evaluate if one particular argument is labeled. The context of the method is also provided should that
     * have bearing on the label.
     *
     * @param method
     * @param arg
     *
     * @return boolean
     */
    boolean isLabeled(Method method, Object arg);
}
