//Source file: H:\\TEMP\\generated\\ispuml\\mdaTransformation\\model\\factory\\RepositoryConfigReader.java
package modTransf.model.factory;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.commons.digester.Digester;
import org.xml.sax.SAXException;
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
import java.net.URL;
/**
* Read a configuration for the repository.
*/
public class RepositoryConfigReader
{
/** The rules to read config files */
protected RepositoryConfigReaderRules rules;
protected boolean useContextClassLoader = true;
protected boolean validateParsing = true;
protected Digester digester;
protected String registeredUri[]={
"http://www.lifl.fr/~dumoulin/mdaTransf/resources/metamodelConfig_1_0.dtd",
"/modTransf/model/factory/resources/metamodelConfig_1_0.dtd",
"-//MDATransf Meta Model config 1.0//EN",
"/modTransf/model/factory/resources/metamodelConfig_1_0.dtd",
};
public RepositoryConfigReader()
{
}
/**
* Clear the digester object stack
*/
public void clear()
{
if(digester!=null)
{
digester.clear();
}
}
/**
* @param reader
*/
public void readConfigFile(ModelFactoryRepository repository, InputStream input)
throws ModelFactoryException
{
try
{
parse( repository, input );
}
catch(Exception ex)
{
throw new ModelFactoryException( "Error while parsing input." , ex );
}
}
/**
* @param filename
*/
public void readConfigFile(ModelFactoryRepository repository, String filename)
throws FileNotFoundException, ModelFactoryException
{
InputStream input;
try
{
// Try to get the input as a regular file
input = new FileInputStream(filename);
}
catch(FileNotFoundException ex)
{
// try as a resource
input = this.getClass().getResourceAsStream(filename);
if(input==null)
input = System.class.getClassLoader().getSystemResourceAsStream(filename);
if(input==null)
throw new FileNotFoundException( "rule file '" + filename + "' not found.");
}
try
{
parse( repository, input );
}
catch(Exception ex)
{
throw new ModelFactoryException( "Error while parsing file '" + filename + "'." , ex );
}
}
/**
* Load the rules
* @param engine
* @param engineContext
*/
protected void createDigester( ModelFactoryRepository repository)
{
if( digester != null )
return;
// initialize the digester
digester = new Digester();
digester.setUseContextClassLoader(useContextClassLoader);
//digester.setSchema( registeredUri[1] );
// Register local schema and DTD
for(int i=0;i<registeredUri.length; i+=2 )
{
URL url = this.getClass().getResource(registeredUri[i+1]);
if (url != null)
{
digester.register(registeredUri[i], url.toString());
}
else
{
System.out.println("WARNING: Can't get URI for '" + registeredUri[i+1] + "'" );
}
} // end loop
// set validation
//System.out.println("Set rule validation to '" + validateParsing + "'" );
digester.setValidating(validateParsing);
// set the rules
digester.addRuleSet(new RepositoryConfigReaderRules(repository));
}
protected void parse( ModelFactoryRepository repository, InputStream input )
throws IOException, SAXException, ModelFactoryException
{
createDigester(repository);
digester.parse(input);
//digester.clear();
digester=null;
}
public void setUseContextClassLoader(boolean useContextClassLoader)
{
this.useContextClassLoader = useContextClassLoader;
}
public void setValidateParsing(boolean validateParsing)
{
this.validateParsing = validateParsing;
}
}