package org.codehaus.mojo.graphing.model.factory; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.maven.plugin.logging.Log; import org.codehaus.mojo.graphing.model.Edge; import org.codehaus.mojo.graphing.model.GraphModel; import org.codehaus.mojo.graphing.model.Node; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.pull.MXParser; import org.codehaus.plexus.util.xml.pull.XmlPullParser; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; public class StaticGraphModelFactory { private Log log; public StaticGraphModelFactory( Log log ) { this.log = log; } public GraphModel getGraphModel( String filename ) { GraphModel model = new GraphModel(); try { InputStreamReader reader = new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream(filename)); XmlPullParser parser = new MXParser(); parser.setInput( reader ); int event; while ( ( event = parser.next() ) != XmlPullParser.END_DOCUMENT ) { if ( event == XmlPullParser.START_TAG ) { if ( "edge".equals( parser.getName() ) ) { Node parent = new Node( parser.getAttributeValue( null, "parent" ) ); Node child = new Node( parser.getAttributeValue( null, "child" ) ); if ( StringUtils.isEmpty( parent.getId() ) || StringUtils.isEmpty( child.getId() ) ) { continue; } Edge edge = new Edge( parent, child ); model.addEdge( edge ); } } } } catch ( FileNotFoundException e ) { log.error( "Unable to find file: " + filename, e ); } catch ( XmlPullParserException e ) { log.error( "Unable to parse file: " + filename, e ); } catch ( IOException e ) { log.error( "IOException: " + filename, e ); } return model; } }