1
2
3
4
5
6
7
8
9
10
11 package edu.uci.ics.jung.io.graphml.parser;
12
13 import java.util.Iterator;
14
15 import javax.xml.stream.XMLEventReader;
16 import javax.xml.stream.events.Attribute;
17 import javax.xml.stream.events.EndElement;
18 import javax.xml.stream.events.StartElement;
19 import javax.xml.stream.events.XMLEvent;
20
21 import edu.uci.ics.jung.graph.Hypergraph;
22 import edu.uci.ics.jung.io.GraphIOException;
23 import edu.uci.ics.jung.io.graphml.*;
24
25
26
27
28
29
30 public class PortElementParser<G extends Hypergraph<V,E>,V,E> extends AbstractElementParser<G,V,E> {
31
32 public PortElementParser(ParserContext<G,V,E> parserContext) {
33 super(parserContext);
34 }
35
36 public PortMetadata parse(XMLEventReader xmlEventReader, StartElement start)
37 throws GraphIOException {
38
39 try {
40
41
42 PortMetadata port = new PortMetadata();
43
44
45 @SuppressWarnings("unchecked")
46 Iterator<Attribute> iterator = start.getAttributes();
47 while (iterator.hasNext()) {
48 Attribute attribute = iterator.next();
49 String name = attribute.getName().getLocalPart();
50 String value = attribute.getValue();
51 if (port.getName() == null && GraphMLConstants.NAME_NAME.equals(name)) {
52 port.setName(value);
53 } else {
54 port.setProperty(name, value);
55 }
56 }
57
58
59 if (port.getName() == null) {
60 throw new GraphIOException(
61 "Element 'port' is missing attribute 'name'");
62 }
63
64 while (xmlEventReader.hasNext()) {
65
66 XMLEvent event = xmlEventReader.nextEvent();
67 if (event.isStartElement()) {
68 StartElement element = (StartElement) event;
69
70 String name = element.getName().getLocalPart();
71 if(GraphMLConstants.DESC_NAME.equals(name)) {
72 String desc = (String)getParser(name).parse(xmlEventReader, element);
73 port.setDescription(desc);
74 } else if(GraphMLConstants.DATA_NAME.equals(name)) {
75 DataMetadata data = (DataMetadata)getParser(name).parse(xmlEventReader, element);
76 port.addData(data);
77 } else {
78
79
80 getUnknownParser().parse(xmlEventReader, element);
81 }
82
83 }
84 if (event.isEndElement()) {
85 EndElement end = (EndElement) event;
86 verifyMatch(start, end);
87 break;
88 }
89 }
90
91
92 applyKeys(port);
93
94 return port;
95
96 } catch (Exception e) {
97 ExceptionConverter.convert(e);
98 }
99
100 return null;
101 }
102 }