📄 structureddocumentfactory.java
字号:
* by itself.
*
* @since JXTA 1.0
**/
private StructuredDocumentFactory() {}
/**
* Registers the pre-defined set of StructuredDocument sub-classes so that
* this factory can construct them.
*
* @since JXTA 1.0
*
* @return boolean true if at least one of the StructuredDocument sub-classes could
* be registered otherwise false.
**/
private boolean doLoadProperty() {
try {
return registerFromResources( "net.jxta.impl.config",
"StructuredDocumentInstanceTypes" );
}
catch ( MissingResourceException notFound ) {
if (LOG.isEnabledFor(Priority.WARN))
LOG.warn( "Could not find net.jxta.impl.config properties file!" );
return false;
}
}
/**
* Used by ClassFactory methods to get the mapping of Mime Types to
* constructors.
*
* @since JXTA 1.0
*
* @return Hastable the hashtable containing the mappings.
**/
protected Hashtable getAssocTable() {
return encodings;
}
/**
* 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 java.lang.String.class;
}
/**
* Used by ClassFactory methods to ensure that all of the instantiators
* which are registered with this factory have the correct interface.
*
* @since JXTA 1.0
*
* @return Class object of the "Factory" type.
**/
protected Class getClassOfInstantiators() {
// our key is the doctype names.
return Instantiator.class;
}
/**
* Register a class with the factory from its class name. We override the
* standard implementation to get the mime type from the class and
* use that as the key to register the class with the factory.
*
* @since JXTA 1.0
*
* @param className The class name which will be regiestered.
* @return boolean true if the class was registered otherwise false.
**/
protected boolean registerAssoc( String className ) {
boolean registeredSomething = false;
//LOG.debug( "Registering : " + className );
try {
Class docClass = Class.forName( className );
Instantiator instantiator = (Instantiator)
(docClass.getField("INSTANTIATOR").get(null));
MimeMediaType [] mimeTypes = instantiator.getSupportedMimeTypes();
for( int eachType = 0; eachType < mimeTypes.length; eachType++ ) {
//LOG.debug( " Registering Type : " + mimeTypes[eachType].getMimeMediaType() );
registeredSomething |= registerInstantiator(
mimeTypes[eachType],
instantiator );
}
}
catch( Exception all ) {
if (LOG.isEnabledFor(Priority.WARN))
LOG.warn( "Failed to register '" + className + "'", all );
}
return registeredSomething;
}
/**
* Returns the prefered extension for a given mime-type. If there is no
* mapping or no prefered extension for this mimetype then null is
* returned.
*
* @since JXTA 1.0
*
* @param mimetype the MimeMediaType we wish to know the file extension for.
* @return String containing the extension or null for mime-types with no
* known association.
**/
public static String getFileExtensionForMimeType( MimeMediaType mimetype ) {
return (String) factory.mimeToExt.get( mimetype.getMimeMediaType() );
}
/**
* Returns the prefered mime-type for a given file extension. If there is
* no mapping then null is returned.
*
* @since JXTA 1.0
*
* @param extension The extension we wish to know the mime-type for.
* @return MimeMediaType associated with this file extension.
**/
public static MimeMediaType getMimeTypeForFileExtension( String extension ) {
MimeMediaType result = null;
String fromMap = (String) factory.extToMime.get( extension );
if( null != fromMap )
result = new MimeMediaType( fromMap );
return result;
}
/**
* Register an instantiator object a mime-type of documents to be
* constructed.
*
* @since JXTA 1.0
*
* @param mimetype the mime-type associated.
* @param instantiator the instantiator that wants to be registered..
* @return boolean true if the instantiator for this mime-type is now
* registered. If there was already an instantiator this mime-type then
* false will be returned.
* @throws SecurityException there were permission problems registering
* the instantiator.
**/
public static boolean registerInstantiator(
MimeMediaType mimetype,
Instantiator instantiator ) {
boolean registered = factory.registerAssoc( mimetype.getMimeMediaType(),
instantiator );
if( registered ) {
Instantiator.ExtensionMapping [] extensions =
instantiator.getSupportedFileExtensions();
for( int eachExt = 0; eachExt < extensions.length; eachExt++ ) {
if( null != extensions[eachExt].getMimeMediaType() ) {
factory.extToMime.put(
extensions[eachExt].getExtension(),
extensions[eachExt].getMimeMediaType().getMimeMediaType() );
factory.mimeToExt.put(
extensions[eachExt].getMimeMediaType().getMimeMediaType(),
extensions[eachExt].getExtension() );
}
}
}
return registered;
}
/**
* Constructs an instance of {@link StructuredDocument} matching
* the mime-type specified by the <CODE>mimetype</CODE> parameter. The
* <CODE>doctype</CODE> parameter identifies the base type of the
* {@link StructuredDocument}.
*
* @since JXTA 1.0
*
* @param mimetype Specifies the mime media type to be associated with
* the {@link StructuredDocument} to be created.
* @param doctype Specifies the root type of the {@link StructuredDocument}
* to be created.
* @return StructuredDocument The instance of {@link StructuredDocument}
* or null if it could not be created.
* @throws NoSuchElementException invalid mime-media-type
**/
public static StructuredDocument newStructuredDocument( MimeMediaType mimetype,
String doctype ) {
if( !factory.loadedProperty )
factory.loadedProperty = factory.doLoadProperty();
Instantiator instantiator =
(Instantiator) factory.getInstantiator( mimetype.getMimeMediaType() );
return instantiator.newInstance( mimetype, doctype );
}
/**
* Constructs an instance of {@link StructuredDocument} matching
* the mime-type specified by the <CODE>mimetype</CODE> parameter. The
* <CODE>doctype</CODE> parameter identifies the base type of the
* {@link StructuredDocument}. Value supplies a value for the root
* element.
*
* @since JXTA 1.0
*
* @param mimetype Specifies the mime media type to be associated with
* the {@link StructuredDocument} to be created.
* @param doctype Specifies the root type of the {@link StructuredDocument}
* to be created.
* @param value Specifies a value for the root element.
* @return StructuredDocument The instance of {@link StructuredDocument}
* or null if it could not be created.
* @throws NoSuchElementException if the mime-type has not been registerd.
**/
public static StructuredDocument newStructuredDocument( MimeMediaType mimetype,
String doctype,
String value ) {
if( !factory.loadedProperty )
factory.loadedProperty = factory.doLoadProperty();
Instantiator instantiator =
(Instantiator) factory.getInstantiator( mimetype.getMimeMediaType() );
return instantiator.newInstance( mimetype, doctype, value );
}
/**
* Constructs an instance of {@link StructuredDocument} matching
* the mime-type specified by the <CODE>mimetype</CODE> parameter. The
* <CODE>doctype</CODE> parameter identifies the base type of the
* {@link StructuredDocument}.
*
* @since JXTA 1.0
*
* @param mimetype Specifies the mime media type to be associated with the
* {@link StructuredDocument} to be created.
* @param stream Contains an InputStream from which the document will be
* constructed.
* @return StructuredDocument The instance of {@link StructuredDocument}
* or null if it could not be created.
* @throws IOException If there is a problem reading from the stream.
* @throws NoSuchElementException if the mime-type has not been registerd.
**/
public static StructuredDocument newStructuredDocument( MimeMediaType mimetype,
InputStream stream )
throws IOException {
if( !factory.loadedProperty )
factory.loadedProperty = factory.doLoadProperty();
Instantiator instantiator =
(Instantiator) factory.getInstantiator( mimetype.getMimeMediaType() );
return instantiator.newInstance( mimetype, stream );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -