/*
* 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 net.jini.core.constraint;
import java.lang.reflect.Method;
import java.util.Iterator;
/**
* Defines an immutable mapping from {@link Method} to
* {@link InvocationConstraints}, used to specify per-method constraints.
* <p>
* An instance of this interface must implement {@link Object#equals
* Object.equals} to return <code>true</code> when passed a mapping that is
* equivalent in trust, content, and function, and to return <code>false</code>
* otherwise. That is, the <code>equals</code> method must be a sufficient
* substitute for
* {@link net.jini.security.proxytrust.TrustEquivalence#checkTrustEquivalence
* TrustEquivalence.checkTrustEquivalence}.
*
* @author Sun Microsystems, Inc.
* @since 2.0
*/
public interface MethodConstraints {
/**
* Returns the constraints for the specified method as a
* non-<code>null</code> value. The same constraints are always returned
* for any given <code>Method</code> instance and for any equivalent
* <code>Method</code> instance. Note that no exception is thrown for
* "unknown" methods; a constraints instance is always returned.
*
* @param method the method
* @return the constraints for the specified method as a
* non-<code>null</code> value
* @throws NullPointerException if the argument is <code>null</code>
*/
InvocationConstraints getConstraints(Method method);
/**
* Returns an iterator that yields all of the possible distinct
* constraints that can be returned by {@link #getConstraints
* getConstraints}, in arbitrary order and with duplicates permitted. The
* iterator throws an {@link UnsupportedOperationException} on any
* attempt to remove an element.
*
* @return an iterator that yields all of the possible distinct
* constraints that can be returned by <code>getConstraints</code>,
* in arbitrary order and with duplicates permitted
*/
Iterator possibleConstraints();
}