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}