1 7 package org.hammurapi.inspectors.metrics; 8 9 import java.io.FileWriter ; 10 import java.io.IOException ; 11 import java.io.Writer ; 12 import java.sql.Connection ; 13 import java.sql.DriverManager ; 14 import java.sql.PreparedStatement ; 15 import java.sql.ResultSet ; 16 import java.sql.SQLException ; 17 import java.sql.Statement ; 18 19 import org.hammurapi.HammurapiException; 20 import org.hammurapi.HammurapiRuntimeException; 21 import org.hammurapi.InspectorContext; 22 import org.hammurapi.results.AnnotationContext; 23 import org.hammurapi.results.AnnotationContext.FileEntry; 24 25 import com.pavelvlasov.jsel.Parameter; 26 import com.pavelvlasov.jsel.VariableDefinition; 27 import com.pavelvlasov.review.SourceMarker; 28 import com.pavelvlasov.sql.Parameterizer; 29 import com.pavelvlasov.sql.RowProcessor; 30 import com.pavelvlasov.sql.SQLProcessor; 31 32 38 public class SqlExtractorHyperSonicStanaloneServer 39 extends SqlExtractorHyperSonicDb 40 implements SqlExtractorPersistencyService { 41 42 private static int counter = 0; 43 private Connection c = null; 44 47 private String sqlTableName = "SQL_STRING_LITERALS"; 48 protected String varTableName = "VAR_DEF_LITERALS"; 49 protected String [] initSQL = { 50 "CREATE CACHED TABLE "+sqlTableName+ 51 " (LITERAL VARCHAR(250), SOURCE VARCHAR(250), LINE INTEGER, COL INTEGER, CLASS_NAME VARCHAR(250), CLASS_FCN VARCHAR(250))", 52 "CREATE INDEX IX_"+sqlTableName+" ON "+sqlTableName+" (LITERAL, SOURCE, LINE, COL)" , 53 54 "CREATE CACHED TABLE "+varTableName+ 55 " (VAR_NAME VARCHAR(250), VAR_VALUE VARCHAR(250), SOURCE VARCHAR(250), LINE INTEGER, COL INTEGER, CLASS_NAME VARCHAR(250), CLASS_FCN VARCHAR(250))", 56 "CREATE INDEX IX_"+varTableName+" ON "+varTableName+" (VAR_NAME, VAR_VALUE, SOURCE, LINE, COL)" 57 58 }; 59 protected String [] destroySQL = { 60 "CREATE INDEX IX_"+sqlTableName, 61 "DELETE * FROM "+sqlTableName, 62 63 "CREATE INDEX IX_"+varTableName, 64 "DELETE * FROM "+varTableName 65 }; 66 67 public SqlExtractorHyperSonicStanaloneServer(InspectorContext _context) 68 throws HammurapiException { 69 super(); 70 context = _context; 71 init(); 72 } 73 74 public void init() throws HammurapiException { 75 77 try { 78 Class.forName("org.hsqldb.jdbcDriver"); 79 c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/job", 83 "sa", ""); 84 } catch (Exception e) { 85 e.printStackTrace(); 87 throw new HammurapiException(e); 88 } 89 } 90 95 public void saveLanguageElement(StringVariable strVar) { 96 System.out.println("** saveLanguageElement "+ strVar.langElement.toString() ); 97 98 99 final boolean[] ret={false}; 100 try { 101 String templangElementName = "<unresolved>"; 102 if( strVar.langElement instanceof VariableDefinition) { 103 templangElementName = ((VariableDefinition) strVar.langElement).getName(); 104 } else if ( strVar.langElement instanceof Parameter ) { 105 templangElementName = ((Parameter) strVar.langElement).getName(); 106 } 107 final String langElementName = templangElementName; 108 111 113 SourceMarker sourceMarker = (SourceMarker) strVar.langElement; 114 115 String sqlQuery= 116 "SELECT 'variable', SOURCE, LINE, COL, VAR_NAME, VAR_VALUE , CLASS_NAME, CLASS_FCN FROM "+varTableName 117 + " WHERE VAR_NAME = '" + langElementName +"'" + 118 "AND CLASS_NAME = '" + strVar.className +"'" + 119 "AND CLASS_FCN = '" + strVar.classFcn +"'" ; 120 121 Statement stmt = c.createStatement(); 122 ResultSet rs = stmt.executeQuery(sqlQuery); 123 124 try { 125 String tmpStr = rs.getString( "VAR_NAME"); 126 ret[0] = langElementName.equals(tmpStr) ; 127 } catch (Exception e1) { 128 } 131 132 rs.close(); 133 stmt.close(); 134 136 stmt = c.createStatement(); 137 if( ret[0] ){ 138 sqlQuery= 139 "UPDATE " + varTableName 140 + " SET " 141 + " VAR_VALUE = '" + strVar.varValue.toString() +"'" 142 + " WHERE VAR_NAME = '" + langElementName +"'" + 143 "AND CLASS_NAME = '" + strVar.className +"'" + 144 "AND CLASS_FCN = '" + strVar.classFcn +"'" ; 145 stmt.executeQuery(sqlQuery); 146 stmt.close(); 147 148 } else { 149 sqlQuery= 152 "INSERT INTO " + varTableName 153 + " (VAR_NAME, VAR_VALUE, SOURCE, LINE, COL, CLASS_NAME, CLASS_FCN) " 154 + "VALUES (" 155 + "'" + langElementName +"'," 156 + "'" + strVar.varValue.toString() +"'," 157 158 + "'" + sourceMarker.getSourceURL() +"'," 159 + "'" + sourceMarker.getLine() +"'," 160 + "'" + sourceMarker.getColumn() +"'," 161 + "'" + strVar.className +"'," 162 + "'" + strVar.classFcn +"')" ; 163 stmt.executeQuery(sqlQuery); 164 stmt.close(); 165 166 } } catch (SQLException e) { 168 context.warn((SourceMarker) strVar.langElement, e); 169 } 170 } 171 172 173 176 public void render(AnnotationContext context, String path) 177 throws HammurapiException { 178 try { 179 FileEntry a = context.getNextFile(".html"); 180 path=a.getPath(); 181 182 final Writer w=new FileWriter (a.getFile()); 183 try { 184 w.write("<HTML><BODY><TABLE border=\"1\"><TR><TH>Var Name</TH><TH>Var Value</TH><TH>File</TH><TH>Line</TH><TH>Column</TH><TH>Class</TH><TH>FCN</TH></TR>"); 185 Statement stmt = c.createStatement(); 186 String sqlString = 187 "SELECT * FROM (" + 188 "SELECT 'variable', SOURCE, LINE, COL, VAR_NAME, VAR_VALUE , CLASS_NAME, CLASS_FCN FROM "+varTableName 189 + ") ORDER BY SOURCE, LINE, COL"; 190 ResultSet rs = stmt.executeQuery( sqlString ); 191 192 while( rs.next()){ 193 try { 194 w.write("<TR><TD>"); 195 w.write(rs.getString( 5 )); 197 w.write("</TD><TD>"); 198 199 w.write(rs.getString( 6 )); w.write("</TD><TD>"); 201 204 w.write(rs.getString("SOURCE")); 205 w.write("</TD><TD aligh=\"right\">"); 206 w.write(rs.getString("LINE")); 207 w.write("</TD><TD aligh=\"right\">"); 208 w.write(rs.getString("COL")); 209 w.write("</TD><TD>"); 210 w.write(rs.getString("CLASS_NAME")); 211 w.write("</TD><TD>"); 212 w.write(rs.getString("CLASS_FCN")); 213 214 w.write("</TD><TR>"); 215 216 } catch (IOException e) { 217 throw new HammurapiRuntimeException(e); 218 } 219 } 220 221 222 ; 223 w.write("</TABLE></BODY></HTML>"); 224 } finally { 225 w.close(); 226 } 227 } catch (SQLException e) { 228 throw new HammurapiException(e); 229 } catch (HammurapiRuntimeException e) { 230 throw new HammurapiException(e.getCause()); 231 } catch (IOException e) { 232 throw new HammurapiException(e); 233 234 } catch (HammurapiException e) { 235 throw new HammurapiException(e); 236 } 237 238 239 } 240 241 public void destroy() { 242 try { 243 Statement stmt = c.createStatement(); 244 for (int i=0; i<destroySQL.length; i++) { 245 try { 246 ResultSet rs = stmt.executeQuery(destroySQL[i]); 247 248 } catch (SQLException e) { 249 System.err.println("Could not delete tables"); 250 e.printStackTrace(); 251 } 252 } 253 } catch (SQLException e) { 254 System.err.println("Could not delete tables"); 255 e.printStackTrace(); 256 } 257 258 } 259 260 } 261 | Popular Tags |