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