/** * This method exports the single pattern decision instance to the XML. It MUST be called by an * XML exporter, as this will not have a complete header. * * @param ratDoc The ratDoc generated by the XML exporter * @return the SAX representation of the object. */ public Element toXML(Document ratDoc) { Element decisionE; RationaleDB db = RationaleDB.getHandle(); // Now, add pattern to doc String entryID = db.getRef(this); if (entryID == null) { entryID = db.addPatternDecisionRef(this); } decisionE = ratDoc.createElement("DR:patternDecision"); decisionE.setAttribute("rid", entryID); decisionE.setAttribute("name", name); decisionE.setAttribute("type", type.toString()); decisionE.setAttribute("phase", devPhase.toString()); decisionE.setAttribute("status", status.toString()); // decisionE.setAttribute("artifact", artifact); Element descE = ratDoc.createElement("description"); Text descText = ratDoc.createTextNode(description); descE.appendChild(descText); decisionE.appendChild(descE); // Add child pattern references... Iterator<Pattern> cpi = candidatePatterns.iterator(); while (cpi.hasNext()) { Pattern cur = cpi.next(); Element curE = ratDoc.createElement("refChildPattern"); Text curText = ratDoc.createTextNode("p" + new Integer(cur.getID()).toString()); curE.appendChild(curText); decisionE.appendChild(curE); } return decisionE; }
/** * 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); } }