001    package org.maltparser.core.io.dataformat;
002    
003    import java.util.HashMap;
004    import java.util.HashSet;
005    
006    import org.maltparser.core.exception.MaltChainedException;
007    import org.maltparser.core.io.dataformat.DataFormatSpecification.Dependency;
008    
009    public class DataFormatManager {
010            private DataFormatSpecification inputDataFormatSpec;
011            private DataFormatSpecification outputDataFormatSpec;
012            private final HashMap<String, DataFormatSpecification> fileNameDataFormatSpecs;
013            private final HashMap<String, DataFormatSpecification> nameDataFormatSpecs;
014            
015            public DataFormatManager(String inputFormatName, String outputFormatName) throws MaltChainedException {
016                    fileNameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
017                    nameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
018                    inputDataFormatSpec = loadDataFormat(inputFormatName);
019                    outputDataFormatSpec = loadDataFormat(outputFormatName);
020            }
021    
022            public DataFormatSpecification loadDataFormat(String dataFormatName) throws MaltChainedException {
023                    if (dataFormatName == null || dataFormatName.length() == 0 ) {
024                            return null;
025                    }
026                    DataFormatSpecification dataFormat = fileNameDataFormatSpecs.get(dataFormatName);
027                    if (dataFormat == null) {
028                            dataFormat = new DataFormatSpecification();
029                            dataFormat.parseDataFormatXMLfile(dataFormatName);
030                            fileNameDataFormatSpecs.put(dataFormatName, dataFormat);
031                            nameDataFormatSpecs.put(dataFormat.getDataFormatName(), dataFormat);
032                            HashSet<Dependency> dependencies = dataFormat.getDependencies();
033                            for (Dependency dep : dependencies) {
034                                    loadDataFormat(dep.urlString);
035                            }
036                    }
037                    return dataFormat;
038            }
039    
040            public DataFormatSpecification getInputDataFormatSpec() {
041                    return inputDataFormatSpec;
042            }
043    
044            public DataFormatSpecification getOutputDataFormatSpec() {
045                    return outputDataFormatSpec;
046            }
047            
048            public DataFormatSpecification getDataFormatSpec(String name) {
049                    return nameDataFormatSpecs.get(name);
050            }
051    }