001package org.maltparser.core.io.dataformat;
002
003import java.net.URL;
004
005import org.maltparser.core.exception.MaltChainedException;
006import org.maltparser.core.helper.HashMap;
007import org.maltparser.core.helper.URLFinder;
008import org.maltparser.core.io.dataformat.DataFormatSpecification.Dependency;
009
010public 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                        final URLFinder f = new URLFinder();
034                        
035                        for (Dependency dep : dataFormat.getDependencies()) {
036                                loadDataFormat(f.findURLinJars(dep.getUrlString()));
037                        }
038                }
039                return dataFormat;
040        }
041        
042        public DataFormatSpecification getInputDataFormatSpec() {
043                return inputDataFormatSpec;
044        }
045
046        public DataFormatSpecification getOutputDataFormatSpec() {
047                return outputDataFormatSpec;
048        }
049        
050        public void setInputDataFormatSpec(DataFormatSpecification inputDataFormatSpec) {
051                this.inputDataFormatSpec = inputDataFormatSpec;
052        }
053
054        public void setOutputDataFormatSpec(DataFormatSpecification outputDataFormatSpec) {
055                this.outputDataFormatSpec = outputDataFormatSpec;
056        }
057
058        public DataFormatSpecification getDataFormatSpec(String name) {
059                return nameDataFormatSpecs.get(name);
060        }
061}