/** * Reads in a decision stored in XML. * * @param decN - the XML element. */ public void fromXML(Element decN) { this.fromXML = true; RationaleDB db = RationaleDB.getHandle(); String rid = decN.getAttribute("rid"); id = Integer.parseInt(rid.substring(2)); name = decN.getAttribute("name"); type = DecisionType.fromString(decN.getAttribute("type")); devPhase = Phase.fromString(decN.getAttribute("phase")); status = DecisionStatus.fromString(decN.getAttribute("status")); Node child = decN.getFirstChild(); importHelper(child); Node nextNode = child.getNextSibling(); while (nextNode != null) { importHelper(nextNode); nextNode = nextNode.getNextSibling(); } db.addPatternDecisionFromXML(this); }
/** * Get the decision from the database, given its name * * @param name the decision name */ public void fromDatabase(String name) { String findQuery = ""; RationaleDB db = RationaleDB.getHandle(); Connection conn = db.getConnection(); this.name = name; name = RationaleDBUtil.escape(name); Statement stmt = null; ResultSet rs = null; try { stmt = conn.createStatement(); findQuery = "SELECT * FROM " + "PATTERNDECISIONS where name = '" + name + "'"; // *** System.out.println(findQuery); rs = stmt.executeQuery(findQuery); if (rs.next()) { id = rs.getInt("id"); description = RationaleDBUtil.decode(rs.getString("description")); type = (DecisionType) DecisionType.fromString(rs.getString("type")); devPhase = (Phase) Phase.fromString(rs.getString("phase")); ptype = RationaleElementType.fromString(rs.getString("ptype")); parent = rs.getInt("parent"); // artifact = rs.getString("artifact"); // enabled = rs.getBoolean("enabled"); status = (DecisionStatus) DecisionStatus.fromString(rs.getString("status")); String subdecs = rs.getString("subdecreq"); if (subdecs.compareTo("Yes") == 0) { alts = false; } else { alts = true; } try { int desID = rs.getInt("designer"); designer = new Designer(); designer.fromDatabase(desID); } catch (SQLException ex) { designer = null; // nothing... } } rs.close(); // need to read in the rest - recursive routines? subDecisions.removeAllElements(); alternatives.removeAllElements(); if (!alts) { Vector<String> decNames = new Vector<String>(); findQuery = "SELECT name from PATTERNDECISIONS where " + "ptype = '" + RationaleElementType.DECISION.toString() + "' and parent = " + new Integer(id).toString(); // *** System.out.println(findQuery2); rs = stmt.executeQuery(findQuery); while (rs.next()) { decNames.add(RationaleDBUtil.decode(rs.getString("name"))); } Enumeration decs = decNames.elements(); while (decs.hasMoreElements()) { PatternDecision subDec = new PatternDecision(); subDec.fromDatabase((String) decs.nextElement()); subDecisions.add(subDec); } } else { Vector<String> altNames = new Vector<String>(); findQuery = "SELECT name from ALTERNATIVES where " + "ptype = '" + RationaleElementType.DECISION.toString() + "' and parent = " + new Integer(id).toString(); // *** System.out.println(findQuery2); rs = stmt.executeQuery(findQuery); while (rs.next()) { altNames.add(RationaleDBUtil.decode(rs.getString("name"))); } Enumeration alts = altNames.elements(); while (alts.hasMoreElements()) { Alternative alt = new Alternative(); alt.fromDatabase((String) alts.nextElement()); alternatives.add(alt); } } // need to do questions too Vector<String> questNames = new Vector<String>(); findQuery = "SELECT name from QUESTIONS where " + "ptype = '" + RationaleElementType.DECISION.toString() + "' and parent = " + new Integer(id).toString(); // *** System.out.println(findQuery3); rs = stmt.executeQuery(findQuery); while (rs.next()) { questNames.add(RationaleDBUtil.decode(rs.getString("name"))); } Enumeration quests = questNames.elements(); questions.removeAllElements(); while (quests.hasMoreElements()) { Question quest = new Question(); quest.fromDatabase((String) quests.nextElement()); questions.add(quest); } // no, not last - need history too findQuery = "SELECT * from HISTORY where ptype = 'Decision' and " + "parent = " + Integer.toString(id); // *** System.out.println(findQuery5); rs = stmt.executeQuery(findQuery); history.removeAllElements(); while (rs.next()) { History nextH = new History(); nextH.setStatus(rs.getString("status")); nextH.setReason(RationaleDBUtil.decode(rs.getString("reason"))); nextH.dateStamp = rs.getTimestamp("date"); // nextH.dateStamp = rs.getDate("date"); history.add(nextH); } // now, get our constraints findQuery = "SELECT * from ConDecRelationships WHERE " + "decision = " + new Integer(id).toString(); rs = stmt.executeQuery(findQuery); constraints.removeAllElements(); if (rs != null) { while (rs.next()) { int ontID = rs.getInt("constr"); Constraint cont = new Constraint(); cont.fromDatabase(ontID); this.addConstraint(cont); } rs.close(); } // now, candidate patterns findQuery = "SELECT * from pattern_decision WHERE parentType= 'Decision' and decisionID=" + this.id; rs = stmt.executeQuery(findQuery); if (rs != null) { while (rs.next()) { int patternID = rs.getInt("patternID"); Pattern p = new Pattern(); p.fromDatabase(patternID); this.addCandidatePattern(p); } } } catch (SQLException ex) { // handle any errors RationaleDB.reportError(ex, "Error in PatternDecision.fromDatabase", findQuery); } finally { RationaleDB.releaseResources(stmt, rs); } }