Reader.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package inputReader;
  2. import java.io.BufferedReader;
  3. import java.io.FileReader;
  4. import java.io.IOException;
  5. import java.util.ArrayList;
  6. import org.json.JSONArray;
  7. import org.json.JSONException;
  8. import org.json.JSONObject;
  9. import Model.LayeredGraphEdge;
  10. import Model.LayeredGraphNode;
  11. import Model.LayeredNode;
  12. public class Reader {
  13. private String fileName;
  14. public Reader( String inputFileName )
  15. {
  16. fileName = inputFileName;
  17. }
  18. public LayeredGraphNode readInputGraph()
  19. {
  20. String file = "";
  21. try {
  22. BufferedReader r = new BufferedReader( new FileReader( fileName ) );
  23. file += r.readLine();
  24. r.close();
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28. try {
  29. JSONObject json = new JSONObject( file );
  30. return parseNode( json, null );
  31. } catch (JSONException e) {
  32. e.printStackTrace();
  33. }
  34. return null;
  35. }
  36. private LayeredGraphNode parseNode( JSONObject node, LayeredGraphNode parent ) throws JSONException
  37. {
  38. LayeredGraphNode newNode = new LayeredNode( null, null );
  39. if( parent != null )
  40. newNode = parent.createNode( null );
  41. if( node.has( "name" ) )
  42. {
  43. if( parent != null && parent.findNodeByName( node.getString( "name" ) ) != null )
  44. throw new JSONException( "Node " + node.getString( "name" ) + " is already known" );
  45. newNode.setName( node.getString( "name" ) );
  46. }
  47. if( node.has( "width" ) )
  48. newNode.setWidth( node.getInt( "width" ) );
  49. if( node.has( "height" ) )
  50. newNode.setHeight( node.getInt( "height" ) );
  51. if( node.has( "x" ) )
  52. newNode.setX( node.getInt( "x" ) );
  53. if( node.has( "y" ) )
  54. newNode.setY( node.getInt( "y" ) );
  55. if( node.has( "layers" ) )
  56. {
  57. JSONArray layers = node.getJSONArray( "layers" );
  58. for( int i = 0; i < layers.length(); i++ )
  59. {
  60. for( LayeredGraphNode n : parseLayer( layers.getJSONArray( i ), newNode ) )
  61. n.setLayer( i );
  62. }
  63. }
  64. if( node.has( "edges" ) )
  65. {
  66. JSONArray edges = node.getJSONArray( "edges" );
  67. for( int i = 0; i < edges.length(); i++ )
  68. {
  69. JSONObject edge = edges.getJSONObject( i );
  70. newNode.addEdge( parseEdge( edge, newNode ) );
  71. }
  72. }
  73. return newNode;
  74. }
  75. private LayeredGraphEdge parseEdge( JSONObject edge, LayeredGraphNode parent ) throws JSONException
  76. {
  77. if( !edge.has( "source" ) || !edge.has( "target" ) )
  78. throw new JSONException( edge + " is no valid Layered Graph Edge." );
  79. if( parent.findNodeByName( edge.getString( "source" ) ) == null )
  80. throw new JSONException( edge + " is no valid Layered Graph Edge." );
  81. if( parent.findNodeByName( edge.getString( "target" ) ) == null )
  82. throw new JSONException( edge + " is no valid Layered Graph Edge." );
  83. return parent.createSimpleEdge( null, parent.findNodeByName( edge.getString( "source" ) ), parent.findNodeByName( edge.getString( "target" ) ) );
  84. }
  85. private ArrayList<LayeredGraphNode> parseLayer( JSONArray layer, LayeredGraphNode parent ) throws JSONException
  86. {
  87. ArrayList<LayeredGraphNode> nodes = new ArrayList<>();
  88. for( int i = 0; i < layer.length(); i++ )
  89. {
  90. JSONObject node = layer.getJSONObject( i );
  91. nodes.add( parseNode( node, parent ) );
  92. }
  93. return nodes;
  94. }
  95. }