import java.io.*; import java.sql.*; import java.text.*; /** object wrapper for the database. * @author anders * * basically just isolates all the database specific code so we could, * if we wanted to, change the entire database backend simply by * changing this one class. */ public class DBWrapper { Connection db = null; // The connection to the database Statement st = null; // Our statement to run queries with // PrintWriter out = res.getWriter(); String url = "jdbc:postgresql:network"; String usr = "anders"; String pwd = "foo"; /** default constructor. * @author anders */ public DBWrapper(){ super(); } /** establishes connection to database. * @author anders * @return true if connection established, false if problems */ public boolean connect(){ try { // Load the driver Class.forName("org.postgresql.Driver"); // Connect to database db = DriverManager.getConnection(url, usr, pwd); return true; } catch(ClassNotFoundException e) { System.out.println("Couldn't load database driver: " + e.getMessage()); return false; } catch(SQLException e) { System.out.println("SQLException caught: " + e.getMessage()); return false; } } /** gets an xml formatted list of edge data. * @author anders * @return xml formatted list of edge data */ public String getEdgeList(){ String temp = ""; try { st = db.createStatement(); ResultSet rs = st.executeQuery("select source,dest,weight,class from example"); while(rs.next()) { String source = "" + rs.getString("source") + ""; String dest = "" + rs.getString("dest") + ""; String weight = rs.getString("weight"); weight = (weight == null) ? "50" : "" + weight + ""; String e_class = rs.getString("class"); e_class = (e_class == null) ? "default" : "" + e_class + ""; temp += "" + source + dest + weight + e_class + "\t"; } } catch(SQLException e) { return "SQLException caught: " + e.getMessage(); } return "" + temp + ""; } /** gets a list of the node data. * @author anders * @return xml formatted list of node data */ public String getNodeList(){ String temp = ""; try { st = db.createStatement(); ResultSet rs = st.executeQuery("select name,class from nodes"); while(rs.next()) { String name = rs.getString("name"); String n_class = rs.getString("class"); temp += "" + name + "" + "" + n_class + "\t"; } } catch(SQLException e) { return "" + e.getMessage() + ""; } return "" + temp + ""; } /** removes an edge from the database. * @param source source of edge to remove * @param dest destination of edge * @param e_class class of edge (in case there are multiple edges between the same two nodes) */ public void removeEdge(String source, String dest, String e_class){ System.out.println("removing edge"); try { st = db.createStatement(); String query = "delete from example where source='" + source + "' AND dest='" + dest + "' AND class='" + e_class + "'"; st.executeUpdate(query); } catch(SQLException e) { System.out.println("SQL error: " + e); return; } } /** adds an edge to the database. * @param source source node of edge * @param dest destination node of edge * @param e_class class of edge */ public void addEdge(String source, String dest, String e_class){ try { st = db.createStatement(); st.executeUpdate("insert into example (source,dest,class) VALUES ('" + source + "','" + dest + "','" + e_class + "')"); } catch(SQLException e) { return; } } /** adds a node to the database. * @param name label of node * @param n_class class of node */ public void addNode (String name, String n_class) { try { st = db.createStatement(); String query = "insert into nodes (name,class)" + " VALUES ('" + name + "','" + n_class + "')"; st.executeUpdate(query); } catch (SQLException e) { System.out.println("SQL exception: " + e); return; } } /** removes a node from the database. * @param name name of node to remove. * * also removes any edges that were attached to the node. */ public void removeNode(String name){ try { st = db.createStatement(); st.executeUpdate("delete from nodes where name='" + name + "'"); st.executeUpdate("delete from example where source='" + name + "'"); st.executeUpdate("delete from example where dest='" + name + "'"); } catch (SQLException e){ return; } } /** disconnects from the database. * @author anders */ public void disconnect() { try { if (db != null) db.close(); } catch (SQLException ignored) {} } }