001    package org.maltparser.core.io.dataformat;
002    
003    import java.net.URL;
004    import java.util.HashMap;
005    import java.util.HashSet;
006    
007    import org.maltparser.core.exception.MaltChainedException;
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(String inputFormatName, String outputFormatName) throws MaltChainedException {
017    //              fileNameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
018    //              nameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
019    //              inputDataFormatSpec = loadDataFormat(inputFormatName);
020    //              outputDataFormatSpec = loadDataFormat(outputFormatName);
021    //      }
022    //      
023    //      public DataFormatSpecification loadDataFormat(String dataFormatName) throws MaltChainedException {
024    //              if (dataFormatName == null || dataFormatName.length() == 0 ) {
025    //                      return null;
026    //              }
027    //              DataFormatSpecification dataFormat = fileNameDataFormatSpecs.get(dataFormatName);
028    //              if (dataFormat == null) {
029    //                      dataFormat = new DataFormatSpecification();
030    //                      dataFormat.parseDataFormatXMLfile(dataFormatName);
031    //                      fileNameDataFormatSpecs.put(dataFormatName, dataFormat);
032    //                      nameDataFormatSpecs.put(dataFormat.getDataFormatName(), dataFormat);
033    //                      HashSet<Dependency> dependencies = dataFormat.getDependencies();
034    //                      for (Dependency dep : dependencies) {
035    //                              loadDataFormat(dep.urlString);
036    //                      }
037    //              }
038    //              return dataFormat;
039    //      }
040    
041            public DataFormatManager(URL inputFormatUrl, URL outputFormatUrl) throws MaltChainedException {
042                    fileNameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
043                    nameDataFormatSpecs = new HashMap<String, DataFormatSpecification>();
044                    inputDataFormatSpec = loadDataFormat(inputFormatUrl);
045                    outputDataFormatSpec = loadDataFormat(outputFormatUrl);
046            }
047            
048            public DataFormatSpecification loadDataFormat(URL dataFormatUrl) throws MaltChainedException {
049                    if (dataFormatUrl == null) {
050                            return null;
051                    }
052                    DataFormatSpecification dataFormat = fileNameDataFormatSpecs.get(dataFormatUrl.toString());
053                    if (dataFormat == null) {
054                            dataFormat = new DataFormatSpecification();
055                            dataFormat.parseDataFormatXMLfile(dataFormatUrl);
056                            fileNameDataFormatSpecs.put(dataFormatUrl.toString(), dataFormat);
057                            nameDataFormatSpecs.put(dataFormat.getDataFormatName(), dataFormat);
058    //                      HashSet<Dependency> dependencies = dataFormat.getDependencies();
059    //                      for (Dependency dep : dependencies) {
060    //                              loadDataFormat(dep.urlString);
061    //                      }
062                    }
063                    return dataFormat;
064            }
065            
066            public DataFormatSpecification getInputDataFormatSpec() {
067                    return inputDataFormatSpec;
068            }
069    
070            public DataFormatSpecification getOutputDataFormatSpec() {
071                    return outputDataFormatSpec;
072            }
073            
074            public DataFormatSpecification getDataFormatSpec(String name) {
075                    return nameDataFormatSpecs.get(name);
076            }
077    }