1 package jimm.datavision.source.sql; 2 import jimm.datavision.*; 3 import jimm.datavision.source.*; 4 import jimm.util.XMLWriter; 5 import java.util.*; 6 import java.sql.PreparedStatement ; 7 import java.sql.SQLException ; 8 9 16 public class SubreportQuery extends SQLQuery { 17 18 protected Subreport subreport; 19 protected ArrayList subreportJoins; 20 21 26 public SubreportQuery(Subreport report) { 27 super(report); 28 subreport = report; 29 subreportJoins = new ArrayList(); 30 } 31 32 public void addSubreportJoin(Join join) { 33 subreportJoins.add(join); 34 } 35 36 public void addSubreportJoins(Collection coll) { 37 subreportJoins.addAll(coll); 38 } 39 40 47 public Iterator parentColumns() { 48 ArrayList list = new ArrayList(); 49 for (Iterator iter = subreportJoins.iterator(); iter.hasNext(); ) 50 list.add(((Join)iter.next()).getFrom()); 51 return list.iterator(); 52 } 53 54 protected void buildWhereClause(StringBuffer str, boolean forDisplay) { 55 str.append(" where "); 57 if (!joins.isEmpty()) { 58 buildJoins(str); 59 str.append(" and "); 60 } 61 buildUserWhereClause(str, forDisplay); 62 } 63 64 public String getWhereClauseForDisplay() { 65 StringBuffer buf = new StringBuffer (); 66 if (whereClause != null && whereClause.length() > 0) { 67 buf.append('('); 68 buf.append(super.getWhereClauseForPreparedStatement()); 69 buf.append(") and ("); 70 } 71 for (Iterator iter = subreportJoins.iterator(); iter.hasNext(); ) { 72 Join j = (Join)iter.next(); 73 buf.append(((Column)j.getFrom()).fullName()); 74 buf.append(' '); 75 buf.append(j.getRelation()); 76 buf.append(' '); 77 buf.append(quoted(((Column)j.getTo()).fullName())); 78 if (iter.hasNext()) 79 buf.append(" and "); 80 } 81 if (whereClause != null && whereClause.length() > 0) 82 buf.append(')'); 83 return buf.toString(); 84 } 85 86 public String getWhereClauseForPreparedStatement() { 87 StringBuffer buf = new StringBuffer (); 88 if (whereClause != null && whereClause.length() > 0) { 89 buf.append('('); 90 buf.append(super.getWhereClauseForPreparedStatement()); 91 buf.append(") and ("); 92 } 93 for (Iterator iter = subreportJoins.iterator(); iter.hasNext(); ) { 94 Join j = (Join)iter.next(); 95 buf.append("? "); 96 buf.append(j.getRelation()); 97 buf.append(' '); 98 buf.append(quoted(((Column)j.getTo()).fullName())); 99 if (iter.hasNext()) 100 buf.append(" and "); 101 } 102 if (whereClause != null && whereClause.length() > 0) 103 buf.append(')'); 104 return buf.toString(); 105 } 106 107 public void setParameters(PreparedStatement stmt) throws SQLException { 108 super.setParameters(stmt); 109 110 int i = preparedStmtValues.size() + 1; 113 for (Iterator iter = subreportJoins.iterator(); iter.hasNext(); ++i) { 114 Column from = ((Join)iter.next()).getFrom(); 117 Object val = subreport.getParentReport().columnValue(from); 118 if (val instanceof java.util.Date ) 119 stmt.setDate(i, 120 new java.sql.Date (((java.util.Date )val).getTime())); 121 else 122 stmt.setObject(i, val); 123 } 124 } 125 126 protected void writeExtras(XMLWriter out) { 127 out.startElement("subreport-joins"); 128 for (Iterator iter = subreportJoins.iterator(); iter.hasNext(); ) 129 ((Join)iter.next()).writeXML(out); 130 out.endElement(); 131 } 132 133 } 134 | Popular Tags |