    001    package org.maltparser.core.io.dataformat;
    002
    003    import java.net.URL;
    004
    005    import org.maltparser.core.exception.MaltChainedException;
    006    import org.maltparser.core.helper.HashMap;
    007    import org.maltparser.core.helper.URLFinder;
    008    import org.maltparser.core.helper.Util;
    009    import org.maltparser.core.io.dataformat.DataFormatSpecification.Dependency;
    010
    011    public class DataFormatManager {
    012            private DataFormatSpecification inputDataFormatSpec;
    013            private DataFormatSpecification outputDataFormatSpec;
    014            private final HashMap<String, DataFormatSpecification> fileNameDataFormatSpecs;
    015            private final HashMap<String, DataFormatSpecification> nameDataFormatSpecs;
    016
    017            public DataFormatManager(URL inputFormatUrl, URL outputFormatUrl) throws MaltChainedException {
    018                    fileNameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
    019                    nameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
    020                    inputDataFormatSpec = loadDataFormat(inputFormatUrl);
    021                    outputDataFormatSpec = loadDataFormat(outputFormatUrl);
    022            }
    023
    024            public DataFormatSpecification loadDataFormat(URL dataFormatUrl) throws MaltChainedException {
    025                    if (dataFormatUrl == null) {
    026                            return null;
    027                    }
    028                    DataFormatSpecification dataFormat = fileNameDataFormatSpecs.get(dataFormatUrl.toString());
    029                    if (dataFormat == null) {
    030                            dataFormat = new DataFormatSpecification();
    031                            dataFormat.parseDataFormatXMLfile(dataFormatUrl);
    032                            fileNameDataFormatSpecs.put(dataFormatUrl.toString(), dataFormat);
    033                            nameDataFormatSpecs.put(dataFormat.getDataFormatName(), dataFormat);
    034                            final URLFinder f = new URLFinder();
    035
    036                            for (Dependency dep : dataFormat.getDependencies()) {
    037                                    loadDataFormat(f.findURLinJars(dep.getUrlString()));
    038                            }
    039                    }
    040                    return dataFormat;
    041            }
    042
    043            public DataFormatSpecification getInputDataFormatSpec() {
    044                    return inputDataFormatSpec;
    045            }
    046
    047            public DataFormatSpecification getOutputDataFormatSpec() {
    048                    return outputDataFormatSpec;
    049            }
    050
    051            public void setInputDataFormatSpec(DataFormatSpecification inputDataFormatSpec) {
    052                    this.inputDataFormatSpec = inputDataFormatSpec;
    053            }
    054
    055            public void setOutputDataFormatSpec(DataFormatSpecification outputDataFormatSpec) {
    056                    this.outputDataFormatSpec = outputDataFormatSpec;
    057            }
    058
    059            public DataFormatSpecification getDataFormatSpec(String name) {
    060                    return nameDataFormatSpecs.get(name);
    061            }
    062    }