Permalink
Fetching contributors…
Cannot retrieve contributors at this time
168 lines (154 sloc) 10 KB
/*
* JBoss, a division of Red Hat
* Copyright 2011, Red Hat Middleware, LLC, and individual
* contributors as indicated by the @authors tag. See the
* copyright.txt in the distribution for a full listing of
* individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.gatein.registration;
import org.gatein.pc.api.PortletContext;
import org.gatein.wsrp.registration.PropertyDescription;
import javax.xml.namespace.QName;
import java.util.Map;
/**
* An interface allowing users of the Registration service to customize different aspects of how Consumers are handled.
* Methods of this interface are used by RegistrationManager to make appropriate decisions. Implementations of this
* interface <strong>MUST</strong> provide a no-argument constructor for instantiation from the class name.
* <p/>
* <strong>IMPORTANT</strong>: RegistrationPolicy instances are wrapped using a {@link
* org.gatein.registration.policies.RegistrationPolicyWrapper}. As a result, using <code>instanceof</code> on a
* RegistrationPolicy will probably result in unexpected result. To retrieve the actual class of the RegistrationPolicy
* instance in use, use {@link #getRealClass()} (or {@link #getClassName()} to retrieve the class name). If, for some
* reason, the actual RegistrationPolicy instance is needed, use {@link org.gatein.registration.policies.RegistrationPolicyWrapper#unwrap(RegistrationPolicy)},
* though it is not recommended to manipulate actual RegistrationPolicy instances directly.
*
* @author <a href="mailto:chris.laprun@jboss.com">Chris Laprun</a>
* @version $Revision: 11406 $
* @since 2.6
*/
public interface RegistrationPolicy
{
/**
* Examines and determines whether the given registration properties are adequate for the Consumer associated with
* the given identity. This method is called before a Registration is created and thus allows users to decide whether
* or not to reject a given registration if not satisfied with the given registration properties.
*
* @param registrationProperties a Map containing the registration properties in the form of property name (QName) -
* property value (Object) mappings
* @param consumerIdentity the Consumer identity (as returned by {@link #getConsumerIdFrom(String,
* java.util.Map)}) for which the registration properties must be ascertained
* @param expectations a Map containing the registration expectations of the producer
* @param manager the RegistrationManager in which context this RegistrationPolicy is invoked
* @throws IllegalArgumentException if any of the registration properties is invalid for the specified Consumer
* @throws RegistrationException if an exception occured in the registration service
*/
void validateRegistrationDataFor(Map<QName, Object> registrationProperties, String consumerIdentity,
final Map<QName, ? extends PropertyDescription> expectations, final RegistrationManager manager)
throws IllegalArgumentException, RegistrationException;
/**
* Generates a registration handle based on the database identity of the Registration. This allows users to customize
* the registration handle format if they want to prevent exposure of database-related data.
*
* @param registrationId the database identity of the Registration for which a handle is required.
* @return a registration handle for the Registration associated with the specified identifier.
* @throws IllegalArgumentException if the specified registration identity if <code>null</code> or empty
*/
String createRegistrationHandleFor(String registrationId) throws IllegalArgumentException;
/**
* Determines the ConsumerGroup name to which the Consumer associated with the specified name should be assigned with
* or <code>null</code> if the Consumer should not be automatically assigned to a ConsumerGroup. This method is
* called during the Consumer creation process to see if the Consumer should be automatically added to a
* ConsumerGroup.
*
* @param consumerName the name of the Consumer being created
* @return the name of the ConsumerGroup the Consumer must be automatically added to or <code>null</code> if the
* Consumer will not be automatically added to a ConsumerGroup at creation
* @throws IllegalArgumentException if the specified Consumer name if <code>null</code> or empty
*/
String getAutomaticGroupNameFor(String consumerName) throws IllegalArgumentException;
/**
* Obtains a consumer identity which uniquely identifies a Consumer in function of the consumer name and registration
* properties. This is potentially necessary because Consumer names are not guaranteed to be unique (even though the
* specification states that they should).
*
* @param consumerName the consumer name
* @param registrationProperties a Map containing the registration properties in the form of property name (QName) -
* property value (Object) mappings. Producer implementations might use the
* registration properties to provide secure Consumer identity.
* @return the consumer identity
* @throws InvalidConsumerDataException if the Policy examines the specified registration properties to determine the
* Consumer identity and decides that they are not in a proper state
* @throws IllegalArgumentException if the specified Consumer name if <code>null</code> or empty
*/
String getConsumerIdFrom(String consumerName, Map<QName, Object> registrationProperties)
throws IllegalArgumentException, InvalidConsumerDataException;
/**
* Determines if the specified Consumer name is acceptable. This method is called before a Consumer is created and
* before a unique Consumer identity is created. This is in particular used if the Policy mandates that Consumer
* names must be unique.
*
* @param consumerName the name of the Consumer as passed during the registration process
* @param manager the RegistrationManager in which context this RegistrationPolicy is invoked
* @throws IllegalArgumentException if the specified Consumer name if <code>null</code> or empty
* @throws RegistrationException if an exception occurred in the Registration service
*/
void validateConsumerName(String consumerName, final RegistrationManager manager)
throws IllegalArgumentException, RegistrationException;
/**
* Determines if the specified ConsumerGroup name is acceptable. This method is called before a ConsumerGroup is
* created.
*
* @param groupName the name of the ConsumerGroup to be created
* @param manager the RegistrationManager in which context this RegistrationPolicy is invoked
* @throws IllegalArgumentException if the specified ConsumerGroup name if <code>null</code> or empty
* @throws RegistrationException if an exception occurred in the Registration service
*/
void validateConsumerGroupName(String groupName, RegistrationManager manager) throws IllegalArgumentException, RegistrationException;
/**
* Whether this RegistrationPolicy allows access to the specified named operation on the portlet identified by the specified PortletContext in the context of the specified
* Registration.
*
* @param portletContext the PortletContext identifying which portlet we're trying to interact with
* @param registration the registration in which context the operation will take place
* @param operation the name of the operation, which should be the calling method's name (without parameters). Currently, only {@link org.gatein.pc.api.PortletInvoker}'s
* methods and getServiceDescription are checked
* @return <code>true</code> if the operation is allowed in the given context, <code>false</code> otherwise
*/
boolean allowAccessTo(PortletContext portletContext, Registration registration, String operation);
/**
* Whether or not this RegistrationPolicy is wrapped in a RegistrationPolicyWrapper. Mostly targeted at the internal implementation.
*
* @return <code>true</code> whether this RegistrationPolicy is wrapped in in a {@link org.gatein.registration.policies.RegistrationPolicyWrapper}, <code>false</code> otherwise
*/
boolean isWrapped();
/**
* Retrieves this RegistrationPolicy's class name. Note that this retrieves the underlying class name if the RegistrationPolicy is wrapped so this method is guaranteed to
* always
* return the "real" implementation class name, not {@link org.gatein.registration.policies.RegistrationPolicyWrapper}'s class name. :)
*
* @return this RegistrationPolicy's "real" class name, i.e. this class' name if it's not wrapped or the wrapped RegistrationPolicy's class name if it is
*/
String getClassName();
/**
* Retrieves this RegistrationPolicy's real class object. Guaranteed to retrieve this class instance if this RegistrationPolicy is not wrapped, or the wrapped
* RegistrationPolicy's class if it is.
*
* @return this class instance if this RegistrationPolicy is not wrapped, or the wrapped RegistrationPolicy's class if it is.
*/
Class<? extends RegistrationPolicy> getRealClass();
}