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