Mercurial > repos > ganjoo > webservice_toolsuite
diff WebServiceToolWorkflow/lib/SAWADLParser/src/javax/wadls/factory/WADLFactory.java @ 0:d5cd409b8a18 default tip
Migrated tool version 1.0.0 from old tool shed archive to new tool shed repository
author | ganjoo |
---|---|
date | Tue, 07 Jun 2011 18:00:50 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WebServiceToolWorkflow/lib/SAWADLParser/src/javax/wadls/factory/WADLFactory.java Tue Jun 07 18:00:50 2011 -0400 @@ -0,0 +1,183 @@ +/* + * (c) Copyright IBM Corp 2001, 2005 + */ + +package javax.wadls.factory; + +import java.io.*; +import java.util.*; + +import javax.wadls.*; +import javax.wadls.xml.*; + +/** + * This abstract class defines a factory API that enables applications + * to obtain a WSDLFactory capable of producing new Definitions, new + * WSDLReaders, and new WSDLWriters. + * + * Some ideas used here have been shamelessly copied from the + * wonderful JAXP and Xerces work. + * + * @author Matthew J. Duftler (duftler@us.ibm.com) + */ +public abstract class WADLFactory +{ + private static final String PROPERTY_NAME = + "javax.wadls.factory.WADLFactory"; + private static final String PROPERTY_FILE_NAME = + "wadl.properties"; + private static final String DEFAULT_FACTORY_IMPL_NAME = + "edu.uga.cs.lsdis.meteors.wadls.factory.WADLFactoryImpl"; + + private static String fullPropertyFileName = null; + + /** + * Get a new instance of a WSDLFactory. This method + * follows (almost) the same basic sequence of steps that JAXP + * follows to determine the fully-qualified class name of the + * class which implements WSDLFactory. The steps (in order) + * are: + *<pre> + * Check the javax.wsdls.factory.WSDLFactory system property. + * Check the lib/wsdl.properties file in the JRE directory. The key + * will have the same name as the above system property. + * Use the default value. + *</pre> + * Once an instance of a WSDLFactory is obtained, invoke + * newDefinition(), newWSDLReader(), or newWSDLWriter(), to create + * the desired instances. + */ + public static WADLFactory newInstance() throws WADLSException + { + String factoryImplName = findFactoryImplName(); + + return newInstance(factoryImplName); + } + + /** + * Get a new instance of a WSDLFactory. This method + * returns an instance of the class factoryImplName. + * Once an instance of a WSDLFactory is obtained, invoke + * newDefinition(), newWSDLReader(), or newWSDLWriter(), to create + * the desired instances. + * + * @param factoryImplName the fully-qualified class name of the + * class which provides a concrete implementation of the abstract + * class WSDLFactory. + */ + public static WADLFactory newInstance(String factoryImplName) + throws WADLSException + { + if (factoryImplName != null) + { + try + { + Class cl = Class.forName(factoryImplName); + + return (WADLFactory)cl.newInstance(); + } + catch (Exception e) + { + /* + Catches: + ClassNotFoundException + InstantiationException + IllegalAccessException + */ + throw new WADLSException(WADLSException.CONFIGURATION_ERROR, + "Problem instantiating factory " + + "implementation.", + e); + } + } + else + { + throw new WADLSException(WADLSException.CONFIGURATION_ERROR, + "Unable to find name of factory " + + "implementation."); + } + } + + /** + * Create a new instance of a Definition. + */ + public abstract Application newApplication(); + + /** + * Create a new instance of a WSDLReader. + */ + public abstract WADLReader newWADLReader(); + + /** + * Create a new instance of a WSDLWriter. + */ + public abstract WADLWriter newWADLWriter(); + + + private static String findFactoryImplName() + { + String factoryImplName = null; + + // First, check the system property. + try + { + factoryImplName = System.getProperty(PROPERTY_NAME); + + if (factoryImplName != null) + { + return factoryImplName; + } + } + catch (SecurityException e) + { + } + + // Second, check the properties file. + String propFileName = getFullPropertyFileName(); + + if (propFileName != null) + { + try + { + Properties properties = new Properties(); + File propFile = new File(propFileName); + FileInputStream fis = new FileInputStream(propFile); + + properties.load(fis); + fis.close(); + + factoryImplName = properties.getProperty(PROPERTY_NAME); + + if (factoryImplName != null) + { + return factoryImplName; + } + } + catch (IOException e) + { + } + } + + // Third, return the default. + return DEFAULT_FACTORY_IMPL_NAME; + } + + private static String getFullPropertyFileName() + { + if (fullPropertyFileName == null) + { + try + { + String javaHome = System.getProperty("java.home"); + + fullPropertyFileName = javaHome + File.separator + "lib" + + File.separator + PROPERTY_FILE_NAME; + } + catch (SecurityException e) + { + } + } + + return fullPropertyFileName; + } +} \ No newline at end of file