001    /*
002     * Copyright (C) 2008-2010 by Holger Arndt
003     *
004     * This file is part of the Universal Java Matrix Package (UJMP).
005     * See the NOTICE file distributed with this work for additional
006     * information regarding copyright ownership and licensing.
007     *
008     * UJMP is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU Lesser General Public License as
010     * published by the Free Software Foundation; either version 2
011     * of the License, or (at your option) any later version.
012     *
013     * UJMP is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
016     * GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public
019     * License along with UJMP; if not, write to the
020     * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
021     * Boston, MA  02110-1301  USA
022     */
023    
024    package org.ujmp.core.io;
025    
026    
027    public class ImportMatrixGRAPHML {
028    
029    //      private XMLEventReader eventReader = null;
030    //
031    //      private XMLEvent currentEvent = null;
032    //
033    //      private List<Key> keys = new ArrayList<Key>();
034    //
035    //      private Map<String, Long> nodeMap = new HashMap<String, Long>();
036    //
037    //      public ImportMatrixGRAPHML() {
038    //      }
039    //
040    //      public static final Matrix fromString(String string, Object... parameters)
041    //                      throws MatrixException, XMLStreamException {
042    //              StringReader sr = new StringReader(string);
043    //              IntelligentFileReader r = new IntelligentFileReader(sr);
044    //              Matrix m = fromReader(r, parameters);
045    //              r.close();
046    //              return m;
047    //      }
048    //
049    //      public static final Matrix fromStream(InputStream stream, Object... parameters)
050    //                      throws MatrixException, IOException, XMLStreamException {
051    //              InputStreamReader r = new InputStreamReader(stream);
052    //              Matrix m = fromReader(r, parameters);
053    //              r.close();
054    //              return m;
055    //      }
056    //
057    //      public static final Matrix fromFile(File file, Object... parameters) throws MatrixException,
058    //                      IOException, XMLStreamException {
059    //              FileReader lr = new FileReader(file);
060    //              Matrix m = fromReader(lr, parameters);
061    //              lr.close();
062    //              return m;
063    //      }
064    //
065    //      private void skipCharacters() throws XMLStreamException {
066    //              while (currentEvent.getEventType() == XMLEvent.CHARACTERS) {
067    //                      currentEvent = eventReader.nextEvent();
068    //                      // ignore
069    //              }
070    //      }
071    //
072    //      private void skipStartDocument() throws XMLStreamException {
073    //              if (currentEvent.getEventType() == XMLEvent.START_DOCUMENT) {
074    //                      currentEvent = eventReader.nextEvent();
075    //                      // ignore
076    //              }
077    //      }
078    //
079    //      private void skipStartTag() throws XMLStreamException {
080    //              if (currentEvent.getEventType() == XMLEvent.START_ELEMENT) {
081    //                      currentEvent = eventReader.nextEvent();
082    //                      // ignore
083    //              }
084    //      }
085    //
086    //      private void skipEndTag() throws XMLStreamException {
087    //              if (currentEvent.getEventType() == XMLEvent.END_ELEMENT) {
088    //                      currentEvent = eventReader.nextEvent();
089    //                      // ignore
090    //              }
091    //      }
092    //
093    //      private void addKey() throws XMLStreamException {
094    //              if ("key".equals(currentEvent.asStartElement().getName().getLocalPart())) {
095    //                      StartElement element = currentEvent.asStartElement();
096    //                      Key key = new Key();
097    //                      key.id = element.getAttributeByName(new QName("id")).getValue();
098    //                      key._for = element.getAttributeByName(new QName("for")).getValue();
099    //                      key.attr_name = element.getAttributeByName(new QName("attr.name")).getValue();
100    //                      key.attr_type = element.getAttributeByName(new QName("attr.type")).getValue();
101    //                      currentEvent = eventReader.nextEvent();
102    //                      skipCharacters();
103    //                      if (currentEvent.getEventType() == XMLEvent.START_ELEMENT
104    //                                      && "default".equals(currentEvent.asStartElement().getName().getLocalPart())) {
105    //                              // skip default
106    //                              currentEvent = eventReader.nextEvent();
107    //                              skipCharacters();
108    //                              if (!"default".equals(currentEvent.asEndElement().getName().getLocalPart())) {
109    //                                      throw new MatrixException("xml does not have excected format: " + currentEvent);
110    //                              }
111    //                              currentEvent = eventReader.nextEvent();
112    //                      }
113    //                      if (!"key".equals(currentEvent.asEndElement().getName().getLocalPart())) {
114    //                              throw new MatrixException("xml does not have excected format: " + currentEvent);
115    //                      }
116    //                      currentEvent = eventReader.nextEvent();
117    //                      keys.add(key);
118    //              }
119    //      }
120    //
121    //      private void addNode(GraphMatrix matrix) throws XMLStreamException {
122    //              if ("node".equals(currentEvent.asStartElement().getName().getLocalPart())) {
123    //                      StartElement element = currentEvent.asStartElement();
124    //                      String id = element.getAttributeByName(new QName("id")).getValue();
125    //
126    //                      currentEvent = eventReader.nextEvent();
127    //                      skipCharacters();
128    //
129    //                      MapMatrix<String, String> node = new DefaultMapMatrix<String, String>();
130    //                      node.setLabel(id);
131    //
132    //                      while (currentEvent.getEventType() == XMLEvent.START_ELEMENT
133    //                                      && "data".equals(currentEvent.asStartElement().getName().getLocalPart())) {
134    //                              String key = currentEvent.asStartElement().getAttributeByName(new QName("key"))
135    //                                              .getValue();
136    //                              currentEvent = eventReader.nextEvent();
137    //                              String data = currentEvent.asCharacters().getData();
138    //                              currentEvent = eventReader.nextEvent();
139    //                              if (!"data".equals(currentEvent.asEndElement().getName().getLocalPart())) {
140    //                                      throw new MatrixException("xml does not have excected format: " + currentEvent);
141    //                              }
142    //                              currentEvent = eventReader.nextEvent();
143    //                              skipCharacters();
144    //
145    //                              node.put(key, data);
146    //                      }
147    //                      if (!"node".equals(currentEvent.asEndElement().getName().getLocalPart())) {
148    //                              throw new MatrixException("xml does not have excected format: " + currentEvent);
149    //                      }
150    //                      currentEvent = eventReader.nextEvent();
151    //
152    //                      nodeMap.put(id, matrix.getRowCount());
153    //                      matrix.addNode(node);
154    //              }
155    //      }
156    //
157    //      private void addEdge(GraphMatrix matrix) throws XMLStreamException {
158    //              if ("edge".equals(currentEvent.asStartElement().getName().getLocalPart())) {
159    //                      StartElement element = currentEvent.asStartElement();
160    //                      String id = element.getAttributeByName(new QName("id")).getValue();
161    //                      String source = element.getAttributeByName(new QName("source")).getValue();
162    //                      String target = element.getAttributeByName(new QName("target")).getValue();
163    //
164    //                      currentEvent = eventReader.nextEvent();
165    //                      skipCharacters();
166    //
167    //                      MapMatrix<String, String> edge = new DefaultMapMatrix<String, String>();
168    //                      edge.setLabel(id);
169    //
170    //                      while (currentEvent.getEventType() == XMLEvent.START_ELEMENT
171    //                                      && "data".equals(currentEvent.asStartElement().getName().getLocalPart())) {
172    //                              String key = currentEvent.asStartElement().getAttributeByName(new QName("key"))
173    //                                              .getValue();
174    //                              currentEvent = eventReader.nextEvent();
175    //                              String data = currentEvent.asCharacters().getData();
176    //                              currentEvent = eventReader.nextEvent();
177    //                              if (!"data".equals(currentEvent.asEndElement().getName().getLocalPart())) {
178    //                                      throw new MatrixException("xml does not have excected format: " + currentEvent);
179    //                              }
180    //                              currentEvent = eventReader.nextEvent();
181    //                              skipCharacters();
182    //
183    //                              edge.put(key, data);
184    //                      }
185    //                      if (!"edge".equals(currentEvent.asEndElement().getName().getLocalPart())) {
186    //                              throw new MatrixException("xml does not have excected format: " + currentEvent);
187    //                      }
188    //                      currentEvent = eventReader.nextEvent();
189    //
190    //                      long sourceId = nodeMap.get(source);
191    //                      long targetId = nodeMap.get(target);
192    //
193    //                      matrix.setEdge(edge, sourceId, targetId);
194    //              }
195    //      }
196    //
197    //      private List<Matrix> parseGraphML() throws XMLStreamException {
198    //              List<Matrix> result = new ArrayList<Matrix>();
199    //              if ("graphml".equals(currentEvent.asStartElement().getName().getLocalPart())) {
200    //
201    //                      currentEvent = eventReader.nextEvent();
202    //                      skipCharacters();
203    //
204    //                      while (currentEvent.getEventType() == XMLEvent.START_ELEMENT
205    //                                      && "key".equals(currentEvent.asStartElement().getName().getLocalPart())) {
206    //                              addKey();
207    //                              skipCharacters();
208    //                      }
209    //
210    //                      while (currentEvent.getEventType() == XMLEvent.START_ELEMENT
211    //                                      && "graph".equals(currentEvent.asStartElement().getName().getLocalPart())) {
212    //                              Matrix m = parseGraph();
213    //                              result.add(m);
214    //                              skipCharacters();
215    //                      }
216    //
217    //              } else {
218    //                      throw new MatrixException("xml does not have excected format: " + currentEvent);
219    //              }
220    //              return result;
221    //      }
222    //
223    //      private GraphMatrix parseGraph() throws XMLStreamException {
224    //              GraphMatrix matrix = new DefaultGraphMatrix();
225    //              if ("graph".equals(currentEvent.asStartElement().getName().getLocalPart())) {
226    //
227    //                      StartElement element = currentEvent.asStartElement();
228    //                      String id = element.getAttributeByName(new QName("id")).getValue();
229    //                      String edgedefault = element.getAttributeByName(new QName("edgedefault")).getValue();
230    //
231    //                      currentEvent = eventReader.nextEvent();
232    //                      skipCharacters();
233    //
234    //                      while (currentEvent.getEventType() == XMLEvent.START_ELEMENT
235    //                                      && "node".equals(currentEvent.asStartElement().getName().getLocalPart())) {
236    //                              addNode(matrix);
237    //                              skipCharacters();
238    //                      }
239    //
240    //                      while (currentEvent.getEventType() == XMLEvent.START_ELEMENT
241    //                                      && "edge".equals(currentEvent.asStartElement().getName().getLocalPart())) {
242    //                              addEdge(matrix);
243    //                              skipCharacters();
244    //                      }
245    //
246    //              } else {
247    //                      throw new MatrixException("xml does not have excected format: " + currentEvent);
248    //              }
249    //              return matrix;
250    //      }
251    //
252    //      public Matrix read(Reader reader) throws MatrixException, XMLStreamException {
253    //              XMLInputFactory inputFactory = XMLInputFactory.newInstance();
254    //              eventReader = inputFactory.createXMLEventReader(reader);
255    //              currentEvent = eventReader.nextEvent();
256    //
257    //              skipCharacters();
258    //              skipStartDocument();
259    //              skipCharacters();
260    //              Matrix graph = parseGraphML().get(0);
261    //
262    //              eventReader.close();
263    //
264    //              return graph;
265    //      }
266    //
267    //      public static final Matrix fromReader(Reader reader, Object... parameters)
268    //                      throws MatrixException, XMLStreamException {
269    //              return new ImportMatrixGRAPHML().read(reader);
270    //
271    //      }
272    //
273    //      class Key {
274    //              public String id;
275    //
276    //              public String _for;
277    //
278    //              public String attr_name;
279    //
280    //              public String attr_type;
281    //
282    //      }
283    
284    }