001 package org.maltparser.core.feature; 002 003 import java.io.File; 004 import java.net.MalformedURLException; 005 import java.net.URL; 006 007 import org.maltparser.core.config.ConfigurationDir; 008 import org.maltparser.core.config.ConfigurationRegistry; 009 import org.maltparser.core.exception.MaltChainedException; 010 import org.maltparser.core.feature.spec.SpecificationModel; 011 import org.maltparser.core.feature.spec.SpecificationModels; 012 import org.maltparser.core.feature.system.FeatureEngine; 013 014 /** 015 * 016 * 017 * @author Johan Hall 018 */ 019 public class FeatureModelManager { 020 protected SpecificationModels specModels; 021 protected FeatureEngine featureEngine; 022 protected ConfigurationDir configDirectory; 023 024 025 public FeatureModelManager(FeatureEngine engine, ConfigurationDir configDirectory) throws MaltChainedException { 026 specModels = new SpecificationModels(); 027 setConfigDirectory(configDirectory); 028 setFeatureEngine(engine); 029 } 030 031 private URL findURL(String specModelFileName) throws MaltChainedException { 032 URL url = null; 033 File specFile = configDirectory.getFile(specModelFileName); 034 if (specFile.exists()) { 035 try { 036 url = new URL("file:///"+specFile.getAbsolutePath()); 037 } catch (MalformedURLException e) { 038 throw new MaltChainedException("Malformed URL: "+specFile, e); 039 } 040 } else { 041 url = configDirectory.getConfigFileEntryURL(specModelFileName); 042 } 043 return url; 044 } 045 046 public void loadSpecification(String specModelFileName) throws MaltChainedException { 047 specModels.load(findURL(specModelFileName)); 048 } 049 050 051 public void loadParSpecification(String specModelFileName, String markingStrategy, String coveredRoot) throws MaltChainedException { 052 specModels.loadParReader(findURL(specModelFileName), markingStrategy, coveredRoot); 053 } 054 055 public FeatureModel getFeatureModel(String specModelURL, int specModelUrlIndex, ConfigurationRegistry registry) throws MaltChainedException { 056 return new FeatureModel(specModels.getSpecificationModel(findURL(specModelURL), specModelUrlIndex), registry, featureEngine); 057 } 058 059 public FeatureModel getFeatureModel(String specModelURL, ConfigurationRegistry registry) throws MaltChainedException { 060 return new FeatureModel(specModels.getSpecificationModel(findURL(specModelURL), 0), registry, featureEngine); 061 } 062 063 public FeatureModel getFeatureModel(SpecificationModel specModel, ConfigurationRegistry registry) throws MaltChainedException { 064 return new FeatureModel(specModel, registry, featureEngine); 065 } 066 067 public SpecificationModels getSpecModels() { 068 return specModels; 069 } 070 071 protected void setSpecModels(SpecificationModels specModel) { 072 this.specModels = specModel; 073 } 074 075 public FeatureEngine getFeatureEngine() { 076 return featureEngine; 077 } 078 079 public void setFeatureEngine(FeatureEngine featureEngine) { 080 this.featureEngine = featureEngine; 081 } 082 083 public ConfigurationDir getConfigDirectory() { 084 return configDirectory; 085 } 086 087 public void setConfigDirectory(ConfigurationDir configDirectory) { 088 this.configDirectory = configDirectory; 089 } 090 091 public String toString() { 092 return specModels.toString(); 093 } 094 }