]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.xml.sax.base/src/org/simantics/xml/sax/base/XMLElementNamedChildParserBase.java
Handle multi-namespace XML files.
[simantics/interop.git] / org.simantics.xml.sax.base / src / org / simantics / xml / sax / base / XMLElementNamedChildParserBase.java
1 package org.simantics.xml.sax.base;
2
3 import java.util.HashMap;
4 import java.util.HashSet;
5 import java.util.Map;
6 import java.util.Set;
7
8 import org.simantics.db.WriteGraph;
9 import org.simantics.db.exception.DatabaseException;
10
11 public abstract class XMLElementNamedChildParserBase implements XMLElementNamedChildParser{
12         
13         private Map<String,Class<? extends XMLElementParser>> namedParsers = new HashMap<String, Class<? extends XMLElementParser>>();
14         private Set<Class<? extends XMLElementParser>> parsers = new HashSet<Class<? extends XMLElementParser>>();
15         
16         @Override
17         public Class<? extends XMLElementParser> getParser(Map<String, XMLElementParser> parsers, ParserElement element, ParserElement child) {
18                 Class<? extends XMLElementParser> parserClass =  namedParsers.get(child.getLocalName());
19                 if (parserClass != null)
20                         return parserClass;
21                 XMLElementParser parser = parsers.get(child.getLocalName());
22                 if (parser == null)
23                         return null;
24                 parserClass = parser.getClass();
25                 if (this.parsers.contains(parserClass))
26                         return parserClass;
27                 for (Class<?> c : this.parsers)
28                         if (c.isAssignableFrom(parserClass))
29                                 return parserClass;
30                 return null;
31         }
32         
33         public void addParser(String name, Class<? extends XMLElementParser> parser) {
34                 namedParsers.put(name, parser);
35         }
36         
37         public void addParser(Class<? extends XMLElementParser> parser) {
38                 parsers.add(parser);
39         }
40         
41 //      @Override
42 //      public void configureChild(WriteGraph graph, Stack<Element> parents, Element element, Element child) throws DatabaseException {
43 //
44 //      }
45         
46         @Override
47         public void configure(WriteGraph graph, ParserElement element, String string) throws DatabaseException {
48                 
49         }
50         
51         @Override
52         public String getID() {
53                 return null;
54         }
55         
56         @Override
57         public int idPriority() {
58                 return 0;
59         }
60         
61
62 }