package org.maltparser.core.io.dataformat;
import java.net.URL;
import org.maltparser.core.exception.MaltChainedException;
import org.maltparser.core.helper.HashMap;
import org.maltparser.core.helper.URLFinder;
import org.maltparser.core.io.dataformat.DataFormatSpecification.Dependency;
public class DataFormatManager {
private DataFormatSpecification inputDataFormatSpec;
private DataFormatSpecification outputDataFormatSpec;
private final HashMap<String, DataFormatSpecification> fileNameDataFormatSpecs;
private final HashMap<String, DataFormatSpecification> nameDataFormatSpecs;
public DataFormatManager(URL inputFormatUrl, URL outputFormatUrl) throws MaltChainedException {
fileNameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
nameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
inputDataFormatSpec = loadDataFormat(inputFormatUrl);
outputDataFormatSpec = loadDataFormat(outputFormatUrl);
}
public DataFormatSpecification loadDataFormat(URL dataFormatUrl) throws MaltChainedException {
if (dataFormatUrl == null) {
return null;
}
DataFormatSpecification dataFormat = fileNameDataFormatSpecs.get(dataFormatUrl.toString());
if (dataFormat == null) {
dataFormat = new DataFormatSpecification();
dataFormat.parseDataFormatXMLfile(dataFormatUrl);
fileNameDataFormatSpecs.put(dataFormatUrl.toString(), dataFormat);
nameDataFormatSpecs.put(dataFormat.getDataFormatName(), dataFormat);
final URLFinder f = new URLFinder();
for (Dependency dep : dataFormat.getDependencies()) {
loadDataFormat(f.findURLinJars(dep.getUrlString()));
}
}
return dataFormat;
}
public DataFormatSpecification getInputDataFormatSpec() {
return inputDataFormatSpec;
}
public DataFormatSpecification getOutputDataFormatSpec() {
return outputDataFormatSpec;
}
public void setInputDataFormatSpec(DataFormatSpecification inputDataFormatSpec) {
this.inputDataFormatSpec = inputDataFormatSpec;
}
public void setOutputDataFormatSpec(DataFormatSpecification outputDataFormatSpec) {
this.outputDataFormatSpec = outputDataFormatSpec;
}
public DataFormatSpecification getDataFormatSpec(String name) {
return nameDataFormatSpecs.get(name);
}
}