package net.sf.invicta.project;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import net.sf.invicta.util.BetterDigester;
import net.sf.invicta.util.DTDEntityResolver;
/**
* Load and parse a project definition file (using digester).
*
*/
public class ProjectDefinitionLoader {
protected BetterDigester reader = new BetterDigester();
/**
* Constructor for ProjectDefinitionLoader.
*/
public ProjectDefinitionLoader() {
super();
// Enable DTD validation
this.reader.setValidating(true);
// Use the rule set of the project definition.
this.reader.addRuleSet(new ProjectDefinitionRuleSet());
this.reader.setEntityResolver(new DTDEntityResolver());
}
/**
* Loads and parses a project definition from the given file name.
* Returns an unresolved ProjectDefinition object.
*
* @param fileName
* @return ProjectDefinition
* @throws InvictaProjectException
*/
public ProjectDefinition load(String fileName) throws InvictaProjectException {
// Open the file for reading
File resourceFile = new File(fileName);
FileInputStream inputStream;
try {
inputStream = new FileInputStream(resourceFile);
} catch (FileNotFoundException e) {
throw new InvictaProjectException("Project Definition file not found:" + fileName);
}
this.reader.clearWithErrors();
// Load the project definition file while parsing it.
ProjectDefinition result;
try {
result = (ProjectDefinition) reader.parse(inputStream);
} catch (Exception e) {
throw new InvictaProjectException("Project definition error: " + e.getMessage());
}
if (reader.getNumberOfErrors() > 0)
throw new InvictaProjectException("Error in loading project definition file '" + fileName +"'");
return result;
}
}
|