📄 idfactory.java
字号:
/*
* Copyright (c) 2001 Sun Microsystems, Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Sun Microsystems, Inc. for Project JXTA."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA" must
* not be used to endorse or promote products derived from this
* software without prior written permission. For written
* permission, please contact Project JXTA at http://www.jxta.org.
*
* 5. Products derived from this software may not be called "JXTA",
* nor may "JXTA" appear in their name, without prior written
* permission of Sun.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL SUN MICROSYSTEMS OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of Project JXTA. For more
* information on Project JXTA, please see
* <http://www.jxta.org/>.
*
* This license is based on the BSD license adopted by the Apache Foundation.
*
* $Id: IDFactory.java,v 1.2 2002/03/04 20:19:20 echtcherbina Exp $
*/
package net.jxta.id;
import java.io.InputStream;
import java.net.URL;
import java.util.Hashtable;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.UnknownServiceException;
import java.util.NoSuchElementException;
import net.jxta.codat.CodatID;
import net.jxta.peer.PeerID;
import net.jxta.peergroup.PeerGroupID;
import net.jxta.pipe.PipeID;
import net.jxta.platform.ModuleClassID;
import net.jxta.platform.ModuleSpecID;
import net.jxta.util.ClassFactory;
/**
* A factory class for constructing ID instances from external representations
* such as strings or URIs and for constructing new ID instances.
*
* @see net.jxta.util.ClassFactory
* @see net.jxta.id.ID
*
* @version $Revision: 1.2 $
* @since JXTA 1.0
**/
public final class IDFactory extends ClassFactory {
/**
* Interface for instantiators of IDs
**/
public interface Instantiator {
/**
* Returns the ID format value associated with this ID format
*
* @return String containing the ID format value for this format.
**/
String getSupportedIDFormat();
/**
* Construct a new ID instance from a JXTA ID contained in a URI.
*
* @see net.jxta.id.ID
* @see java.net.URL
*
* @since JXTA 1.0
*
* @param source URI which will be decoded to create a new ID instance.
* @return ID containing the new ID instance initialized from the URI.
* @throws UnknownServiceException Is thrown if the URI provided is of a
* format unrecognized by this JXTA implementation.
* @throws MalformedURLException Is thrown if the URI provided is not
* a valid, recognized JXTA URI.
**/
ID fromURL( URL source ) throws
MalformedURLException, UnknownServiceException;
/**
* Creates a new CodatID Instance. A new random Codata ID is created for
* the provided Peer Group. This type of CodatID can be used as a
* canonical reference for dynamic content.
*
* @since JXTA 1.0
* @see net.jxta.codat.CodatID
*
* @param groupID the group to which this content will belong.
* @return the newly created ID.
**/
CodatID newCodatID( PeerGroupID groupID );
/**
* Creates a new CodatID Instance. A new random Codata ID is created for
* the provided Peer Group and contains a hash value for the Codat data.
* This type of Codat ID is most appropriate for static content. By
* including a hash value this form of Codat ID provides greater assurance
* of the canonical property of IDs. It also allows the document content
* returned when this ID is used to be verified to ensure it has not been
* altered.
*
* @param groupID The group to which this ID will belong.
* @param in The InputStream from which the content hash is calculated.
* The stream is read until EOF and then closed.
*
* @since JXTA 1.0
* @see net.jxta.codat.CodatID
*
* @return the newly created ID.
* @throws IOException I/O Error reading document
**/
CodatID newCodatID(PeerGroupID groupID, InputStream in) throws IOException;
/**
* Creates a new PeerID Instance. A new random peer id will be generated.
* The PeerID will be a member of the provided group.
*
* @since JXTA 1.0
* @see net.jxta.peer.PeerID
*
* @param groupID the group to which this PeerID will belong.
* @return the newly created ID.
**/
PeerID newPeerID(PeerGroupID groupID);
/**
* Creates a new PeerGroupID Instance. A new random peer group id will be
* generated.
*
* @since JXTA 1.0
* @see net.jxta.peergroup.PeerGroupID
*
* @return the newly created ID.
**/
PeerGroupID newPeerGroupID( );
/**
* Creates a new PeerGroupID Instance. A new random peer group id will be
* generated.
*
* @since JXTA 1.0
* @see net.jxta.peergroup.PeerGroupID
*
* @param groupID the group to which this Pipe ID will belong.
* @return the newly created ID.
**/
PipeID newPipeID( PeerGroupID groupID );
/**
* Creates a new PipeID Instance. A new pipe id will be generated with the
* provided seed information. The Pipe ID will be a member of the provided
* group. The seed information should be at least four bytes in length,
* though longer values are better. This varient of Pipe ID allows you to
* create "Well-known" pipes within the context of diverse groups. This can
* be useful for common services that need to do discovery without
* advertisements or for network organization services. Because of the
* potential for ID collisions and the difficulties with maintaining
* common service interfaces this form of Pipe ID should be used sparingly.
*
* @since JXTA 1.0
* @see net.jxta.pipe.PipeID
*
* @param groupID the group to which this Pipe ID will belong.
* @param seed The seed information which will be used in creating the
* pipeID.
* @return the newly created ID.
**/
PipeID newPipeID( PeerGroupID groupID, byte [] seed );
/**
* Creates a new ModuleClassID Instance. A new random Module Class Id will
* be generated with a zero value role identifier. This form of Module
* Class Id is appropriate for cases where the module does not need to be
* distinguished from other instances of the same Module.
*
* @since JXTA 1.0
* @see net.jxta.platform.ModuleClassID
*
* @return the newly created ID.
**/
ModuleClassID newModuleClassID( );
/**
* Creates a new ModuleClassID Instance. A new random Module Class Id will
* be generated with a a random value role identifier and a base class of
* the provided Module Class ID. This form of Module Class Id is
* appropriate for cases where it is necessary to distinguish instances
* of the same service interface.
*
* @since JXTA 1.0
* @see net.jxta.platform.ModuleClassID
*
* @param baseClass The module class ID which will be used as a base
* class for this new role value instance.
* @return the newly created ID.
**/
ModuleClassID newModuleClassID(final ModuleClassID baseClass );
/**
* Creates a new ModuleClassID Instance. A new random Module Spec Id will
* be generated.
*
* @since JXTA 1.0
* @see net.jxta.platform.ModuleSpecID
*
* @param baseClass The module class ID which will be used as a base
* class for this new Spec ID.
* @return the newly created ID.
**/
ModuleSpecID newModuleSpecID(final ModuleClassID baseClass );
}
/**
* This class is a singleton. This is the instance that backs the
* static methods.
**/
private static IDFactory factory = new IDFactory();
/**
* This is the map of id value to the constructor rets.
**/
private static Hashtable IdTypes = new Hashtable();
/**
* If true then the pre-defined set of ID sub-classes has been registered
* from the string containing them.
**/
private boolean loadedString = false;
/**
* Identifies the ID format to use when creating new ID instances.
**/
private String idNewInstances = null;
/**
* Standard Constructor. This class is a singleton so the only constructor
* is private
**/
private IDFactory() {
}
/**
* Registers the pre-defined set of ID sub-classes so that this factory can
* construct them.
*
* @since JXTA 1.0
*
* @return booelan true if at least one of the ID sub-classes could be
* registered otherwise false.
**/
private boolean doRegisterIDTypes() {
// FIXME 20010520 bondolo@jxta.org This should use a config.properties property as documented.
final String idInstances = "net.jxta.id.jxta.IDFormat net.jxta.impl.id.UUID.IDFormat net.jxta.impl.id.unknown.IDFormat";
// FIXME 20010520 bondolo@jxta.org This should use a config.properties property as documented.
idNewInstances = new String( "uuid" );
return factory.registerFromString( idInstances );
}
/**
* Used by ClassFactory methods to get the mapping of ID types to constructors.
*
* @since JXTA 1.0
*
* @return Hashtable the hashtable containing the mappings.
**/
protected Hashtable getAssocTable() {
return IdTypes;
}
/**
* Used by ClassFactory methods to ensure that all keys used with the mapping are
* of the correct type.
*
* @since JXTA 1.0
*
* @return Class object of the key type.
**/
protected Class getClassForKey() {
return String.class;
}
/**
* Used by ClassFactory methods to ensure that all of the instance classes
* which register with this factory have the correct base class
*
* @return Class object of the key type.
*
* @since JXTA 1.0
**/
protected Class getClassOfInstantiators() {
// we dont require that they be of any particular type since they are
// factories themselves
return Object.class;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -