001 package org.maltparser.core.propagation;
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.exception.MaltChainedException;
009 import org.maltparser.core.propagation.spec.PropagationSpecs;
010 import org.maltparser.core.propagation.spec.PropagationSpecsReader;
011 import org.maltparser.core.syntaxgraph.edge.Edge;
012
013 public class PropagationManager {
014 private ConfigurationDir configDirectory;
015 private PropagationSpecs propagationSpecs;
016 private Propagations propagations;
017
018 public PropagationManager(ConfigurationDir configDirectory) {
019 setConfigDirectory(configDirectory);
020 propagationSpecs = new PropagationSpecs();
021
022 }
023
024 private URL findURL(String propagationSpecFileName) throws MaltChainedException {
025 URL url = null;
026 File specFile = configDirectory.getFile(propagationSpecFileName);
027 if (specFile.exists()) {
028 try {
029 url = new URL("file:///"+specFile.getAbsolutePath());
030 } catch (MalformedURLException e) {
031 throw new PropagationException("Malformed URL: "+specFile, e);
032 }
033 } else {
034 url = configDirectory.getConfigFileEntryURL(propagationSpecFileName);
035 }
036 return url;
037 }
038
039 public void loadSpecification(String propagationSpecFileName) throws MaltChainedException {
040 PropagationSpecsReader reader = new PropagationSpecsReader();
041 reader.load(findURL(propagationSpecFileName), propagationSpecs);
042 propagations = new Propagations(propagationSpecs, configDirectory.getInputDataFormatInstance());
043 }
044
045 public void propagate(Edge e) throws MaltChainedException {
046 if (propagations != null && e != null) {
047 propagations.propagate(e);
048 }
049 }
050
051 public PropagationSpecs getPropagationSpecs() {
052 return propagationSpecs;
053 }
054
055 public ConfigurationDir getConfigDirectory() {
056 return configDirectory;
057 }
058
059 public void setConfigDirectory(ConfigurationDir configDirectory) {
060 this.configDirectory = configDirectory;
061 }
062
063 public Propagations getPropagations() {
064 return propagations;
065 }
066
067
068 }