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 }