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 }