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    }