View Javadoc
1   /*
2    * Copyright (c) 2008, The JUNG Authors
3    *
4    * All rights reserved.
5    *
6    * This software is open-source under the BSD license; see either
7    * "license.txt" or
8    * https://github.com/jrtom/jung/blob/master/LICENSE for a description.
9    */
10  
11  package edu.uci.ics.jung.io.graphml.parser;
12  
13  import javax.xml.stream.events.EndElement;
14  import javax.xml.stream.events.StartElement;
15  
16  import edu.uci.ics.jung.graph.Hypergraph;
17  import edu.uci.ics.jung.io.GraphIOException;
18  import edu.uci.ics.jung.io.graphml.Metadata;
19  
20  /**
21   * Base class for element parsers - provides some minimal functionality.
22   * 
23   * @author Nathan Mittler - nathan.mittler@gmail.com
24   */
25  public abstract class AbstractElementParser<G extends Hypergraph<V,E>,V,E> implements ElementParser {
26  
27      final private ParserContext<G,V,E> parserContext;
28      protected AbstractElementParser(ParserContext<G,V,E> parserContext) {
29          this.parserContext = parserContext;
30      }
31      
32      public ParserContext<G,V,E> getParserContext() {
33          return this.parserContext;
34      }
35      
36      public ElementParser getParser(String localName) {
37          return parserContext.getElementParserRegistry().getParser(localName);
38      }
39      
40      public void applyKeys(Metadata metadata) {
41          getParserContext().getKeyMap().applyKeys(metadata);
42      }
43      
44      public ElementParser getUnknownParser() {
45          return parserContext.getElementParserRegistry().getUnknownElementParser();
46      }
47      
48      protected void verifyMatch(StartElement start, EndElement end)
49              throws GraphIOException {
50  
51          String startName = start.getName().getLocalPart();
52          String endName = end.getName().getLocalPart();
53          if (!startName.equals(endName)) {
54              throw new GraphIOException(
55                      "Failed parsing document: Start/end tag mismatch! "
56                              + "StartTag:" + startName + ", EndTag: "
57                              + endName);
58          }
59      }
60  }