| ProtocolConstraints.java |
/*
* JBoss, the OpenSource J2EE webOS
*
* Distributable under LGPL license. See terms of license at gnu.org.
*/
package javax.emb;
import java.io.Serializable;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* This class models constraints that restrict the selection of protocol
* servers, like stream servers. Instances can contain multiple kinds of
* constraints. Constraints come as type/value pairs, with the type defining
* the type of constraint and the value giving the actual constraint data “
* similar to a dictionary. Protocol constraints are used when publishing media
* for a given protocol, see MediaEntityLocalHome.publish(’) for reference. As
* streaming constraints have to be transferred over machine boundaries, the
* class implements <code>java.io.Serializable</code>.
*
* <p>This specification covers two types of constraint as binding for all
* implementations:
*
* <ul><li>"CLIENT_TYPE" constrains the protocol server selection indirectly
* by defining an array of protocol client types (Strings) that are running on
* a client machine. Protocol servers are only eligible for selection during
* publish operations if they at least support one of the given client types.
* Also, the metadata generated during publish requests must be suitable for
* one of these clients. Standardized values for this constraint type are:
* "Quicktime" for Apple Quicktime players, "VideoCharger" for IBM VideoCharger
* players, "Windows Media" for Microsoft Windows Media players, "RealPlayer"
* for RealNetworks players. Additional client types may be added to this list
* in future releases of this specification.</li>
*
* <li>"SERVER_TYPE" constrains the protocol server selection directly by
* defining an array of protocol server types (Strings) eligible for selection
* during publish requests. Standardized values for this constraint type are:
* ”Quicktime" for Apple Quicktime servers, "VideoCharger" for IBM VideoCharger
* servers, "Windows Media" for Microsoft Windows Media services, "RealSystem"
* for RealNetworks servers. Additional protocol server types may be added to
* this list in future releases of this specification.</li></ul>
*
* @version <tt>$Revision: 1.4 $</tt>
* @author <a href="mailto:ricardoarguello@users.sourceforge.net">Ricardo
* Argüello</a>
*/
public final class ProtocolConstraints implements Serializable
{
public final static String CLIENT_TYPE = "CLIENT_TYPE";
public final static String SERVER_TYPE = "SERVER_TYPE";
private final Map constraints = Collections.synchronizedMap(new HashMap());
/**
* Returns the value of the constraint defined by the given type, or <code>null</code>
* if said constraint is not present.
*
* @param type the constraint type.
* @return the constraint value.
* @throws javax.emb.NullPointerException if the given type is <code>null</code>.
*/
public Object getConstraint(String type)
{
if (type == null)
{
throw new NullPointerException();
}
return constraints.get(type);
}
/**
* Alters the value of the constraint defined by the given type to the given
* value. Passing the constraint value <code>null</code> removes a
* constraint type from the receiver if present.
*
* @param type the constraint type.
* @param value the constraint value.
* @throws java.lang.NullPointerException if the given type is <code>null</code>.
* @throws java.lang.IllegalArgumentException if the constraint type given
* is either "CLIENT_TYPE" or "SERVER_TYPE", and the value given is
* not an array of Strings.
*
*/
public void setConstraint(String type, Object value)
{
if (type == null)
{
throw new NullPointerException();
}
if ((type.equals(CLIENT_TYPE) || type.equals(SERVER_TYPE))
&& !(value instanceof String[]))
{
throw new IllegalArgumentException();
}
constraints.put(type, value);
}
/**
* Returns the receiver's constraint types as an array of Strings.
*
* @return an array of constraint types.
*/
public String[] getConstraintTypes()
{
Collection keySet = constraints.keySet();
return (String[]) keySet.toArray(new String[keySet.size()]);
}
}| ProtocolConstraints.java |