package org.maltparser.core.feature; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import org.maltparser.core.config.ConfigurationDir; import org.maltparser.core.config.ConfigurationRegistry; import org.maltparser.core.exception.MaltChainedException; import org.maltparser.core.feature.spec.SpecificationModel; import org.maltparser.core.feature.spec.SpecificationModels; import org.maltparser.core.feature.system.FeatureEngine; /** * * * @author Johan Hall */ public class FeatureModelManager { protected SpecificationModels specModels; protected FeatureEngine featureEngine; protected ConfigurationDir configDirectory; public FeatureModelManager(FeatureEngine engine, ConfigurationDir configDirectory) throws MaltChainedException { specModels = new SpecificationModels(); setConfigDirectory(configDirectory); setFeatureEngine(engine); } private URL findURL(String specModelFileName) throws MaltChainedException { URL url = null; File specFile = configDirectory.getFile(specModelFileName); if (specFile.exists()) { try { url = new URL("file:///" + specFile.getAbsolutePath()); } catch (MalformedURLException e) { throw new MaltChainedException("Malformed URL: " + specFile, e); } } else { url = configDirectory.getConfigFileEntryURL(specModelFileName); } return url; } public void loadSpecification(String specModelFileName) throws MaltChainedException { specModels.load(findURL(specModelFileName)); } public void loadParSpecification(String specModelFileName, String markingStrategy, String coveredRoot) throws MaltChainedException { specModels.loadParReader(findURL(specModelFileName), markingStrategy, coveredRoot); } public FeatureModel getFeatureModel(String specModelURL, int specModelUrlIndex, ConfigurationRegistry registry) throws MaltChainedException { return new FeatureModel(specModels.getSpecificationModel(findURL(specModelURL), specModelUrlIndex), registry, featureEngine); } public FeatureModel getFeatureModel(String specModelURL, ConfigurationRegistry registry) throws MaltChainedException { return new FeatureModel(specModels.getSpecificationModel(findURL(specModelURL), 0), registry, featureEngine); } public FeatureModel getFeatureModel(SpecificationModel specModel, ConfigurationRegistry registry) throws MaltChainedException { return new FeatureModel(specModel, registry, featureEngine); } public SpecificationModels getSpecModels() { return specModels; } protected void setSpecModels(SpecificationModels specModel) { this.specModels = specModel; } public FeatureEngine getFeatureEngine() { return featureEngine; } public void setFeatureEngine(FeatureEngine featureEngine) { this.featureEngine = featureEngine; } public ConfigurationDir getConfigDirectory() { return configDirectory; } public void setConfigDirectory(ConfigurationDir configDirectory) { this.configDirectory = configDirectory; } @Override public String toString() { return specModels.toString(); } }