00001 package ProdDatabase;
00002 import java.util.*;
00003 import java.sql.*;
00004 import java.util.zip.*;
00005 import java.io.*;
00006 import java.text.DecimalFormat;
00007 import Preferences.*;
00008
00009 public class HTMLReportUtilities implements SCTDBInfo {
00010
00011 public static boolean DEBUG=false;
00012
00013 private static Hashtable sctdaqTestNameHash, sctdaqTestNumberHash;
00014
00015 private static void fillHashes() {
00016 if(sctdaqTestNameHash!=null) return;
00017 sctdaqTestNameHash = new Hashtable();
00018 sctdaqTestNumberHash = new Hashtable();
00019 for(int i=0;i<sctdaqDBTestNames.length;i++) {
00020 sctdaqTestNameHash.put(sctdaqDBTestNames[i],sctdaqNormalTestNames[i]);
00021 sctdaqTestNumberHash.put(sctdaqDBTestNames[i],new Integer(i));
00022 }
00023 }
00024
00025 public static SctDaqTestInfo getHTMLTestInfo(String test_no) throws Exception {
00026
00027 SctDaqTestInfo testInfo=null;
00028 fillHashes();
00029
00030 StringBuffer genTable = new StringBuffer();
00031 StringBuffer sqlStat = new StringBuffer("SELECT test_name,ser_no,test_date,locn_name FROM tests WHERE test_no="+test_no);
00032
00033
00034 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00035 if(DEBUG) System.out.println(sqlStat.toString());
00036 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00037 int recordCount=0;
00038
00039 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00040 recordCount++;
00041 String dbTestName = resultSet.getString(1);
00042 String testName = dbTestName;
00043 int index=-1;
00044 if(sctdaqTestNameHash.containsKey(dbTestName)) {
00045 testName = (String)sctdaqTestNameHash.get(dbTestName);
00046 index = ((Integer)sctdaqTestNumberHash.get(dbTestName)).intValue();
00047 }
00048 testInfo = new SctDaqTestInfo(resultSet.getString(2),testName,guiUtilities.DaveUtils.extractDate(resultSet.getString(3)),resultSet.getString(4),index);
00049 }
00050 statement.close();
00051 return testInfo;
00052 }
00053
00054 public static String getHTMLCommentsTable(String test_no) throws Exception {
00055
00056 StringBuffer genTable = new StringBuffer("<h3>Comments</h3>\n");
00057 StringBuffer sqlStat = new StringBuffer("SELECT CMNT_TEXT FROM TEST_CMNTS WHERE TEST_NO="+test_no);
00058
00059
00060 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00061
00062 if(DEBUG) System.out.println(sqlStat.toString());
00063 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00064 int recordCount=0;
00065
00066
00067 int ntotal=0;
00068 int nCount=0;
00069 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00070 recordCount++;
00071
00072 String comment = resultSet.getString(1);
00073 nCount++;
00074 genTable.append(comment+"<br>\n");
00075
00076 }
00077 statement.close();
00078 if(nCount==0) genTable.append("No comments found\n");
00079 return genTable.toString();
00080 }
00081
00082 public static String getHTMLPlotTable(String test_no) throws Exception {
00083
00084 String testnames = " AND (tests.TEST_name LIKE 'Hyb%' OR tests.TEST_name LIKE 'DetModIV')";
00085 StringBuffer genTable = new StringBuffer("<h3>Plots</h3>\n");
00086
00087 StringBuffer sqlStat = new StringBuffer("SELECT tests.ser_no,tests.test_no,web_links.web_link_desc,web_links.url FROM tests,web_links");
00088 sqlStat.append(" WHERE tests.test_no=web_links.test_no AND tests.test_no="+test_no);
00089 sqlStat.append(testnames);
00090
00091
00092 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00093 if(DEBUG) System.out.println(sqlStat.toString());
00094 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00095
00096 int nCount=0;
00097 Hashtable webLinkHash = new Hashtable();
00098 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00099 String theSN = resultSet.getString(1);
00100 String thisTestNo = resultSet.getString(2);
00101 String urlDescription = resultSet.getString(3);
00102 String thisURLlink = resultSet.getString(4);
00103 boolean isPostscript = (thisURLlink.endsWith(".ps") || thisURLlink.endsWith(".ps.gz"));
00104
00105 if(thisURLlink.indexOf("http://hepunx.rl.ac.uk/atlassct/cgibin/getfile.pl?file=")!=-1) thisURLlink+="&module="+theSN;
00106
00107 if(nCount==0) {
00108 genTable.append("<table cellspacing=5 border=1>\n");
00109 for(int i=0;i<2;i++) genTable.append("<col width=*>\n");
00110 genTable.append("<tr><td valign=top align=left><b>Title</b></td><td valign=top align=left><b>Link</b></td></tr>\n");
00111 }
00112 nCount++;
00113 String link= isPostscript ? "Type"+guiUtilities.HTMLViewer.URLTOPOSTSCRIPT+"&ref="+thisURLlink : thisURLlink;
00114 genTable.append("<tr><td valign=top align=left>"+urlDescription+"</td><td valign=top align=left><a href="+link+">"+thisURLlink+"</a></td></tr>\n");
00115
00116 }
00117 statement.close();
00118 if(nCount==0) genTable.append("No Plots available.\n");
00119 else genTable.append("</table>\n");
00120 return genTable.toString();
00121 }
00122
00123
00124
00125
00126 public static String getHTMLDCSTable(String test_no) throws Exception {
00127
00128 StringBuffer genTable = new StringBuffer("<h3>DCS Information</h3>\n");
00129 StringBuffer sqlStat = new StringBuffer("SELECT T0,T1,VDET,IDET,VCC,ICC,VDD,IDD,TIME_POWERED FROM SCT_TSTDCSINFO WHERE TEST_NO="+test_no);
00130
00131 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00132 if(DEBUG) System.out.println(sqlStat.toString());
00133 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00134 int recordCount=0;
00135
00136
00137 int ntotal=0;
00138 int nCount=0;
00139 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00140 recordCount++;
00141 if(nCount==0) {
00142 genTable.append("<table cellspacing=5 border=1>\n");
00143 for(int i=0;i<9;i++) genTable.append("<col width=*>\n");
00144 genTable.append("<tr><td><b>T0</b></td><td><b>T1</b></td><td><b>Vdet</b></td><td><b>Idet</b></td><td><b>Vcc</b></td><td><b>Icc</b></td><td><b>Vdd</b></td><td><b>Idd</b></td><td><b>Time Powered</b></td></tr>\n");
00145 }
00146 nCount++;
00147 genTable.append("<tr>");
00148 for(int i=0;i<9;i++) genTable.append("<td>"+resultSet.getString(i+1)+"</td>");
00149 genTable.append("</tr>\n");
00150
00151 }
00152 statement.close();
00153 if(nCount==0) genTable.append("<p>No DCS information available\n");
00154 else genTable.append("</table>\n");
00155 return genTable.toString();
00156 }
00157
00158 public static String getHTMLDAQTable(String test_no) throws Exception {
00159
00160 StringBuffer genTable = new StringBuffer("<h3>DAQ Information</h3>\n");
00161 StringBuffer sqlStat = new StringBuffer("SELECT HOST,VERSION,DUT,TEST_TIME FROM SCT_TSTDAQINFO WHERE TEST_NO="+test_no);
00162
00163 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00164 if(DEBUG) System.out.println(sqlStat.toString());
00165 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00166 int recordCount=0;
00167
00168
00169 int ntotal=0;
00170 int nCount=0;
00171 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00172 recordCount++;
00173 if(nCount==0) {
00174 genTable.append("<table cellspacing=5 border=1>\n");
00175 for(int i=0;i<4;i++) genTable.append("<col width=*>\n");
00176 genTable.append("<tr><td valign=top align=left><b>Host</b></td><td valign=top align=left><b>DAQ Version</b></td><td valign=top align=left><b>DeviceType</b></td><td valign=top align=left><b>Time</b></td></tr>\n");
00177 }
00178 nCount++;
00179 genTable.append("<tr>");
00180 for(int i=0;i<4;i++) genTable.append("<td valign=top align=left>"+resultSet.getString(i+1)+"</td>");
00181 genTable.append("</tr>\n");
00182
00183 }
00184 statement.close();
00185 if(nCount==0) genTable.append("No DAQ information available\n");
00186 else genTable.append("</table>\n");
00187 return genTable.toString();
00188 }
00189
00190
00191 public static String getHTMLScanTable(String test_no) throws Exception {
00192 String[] pointValues = new String[16];
00193 StringBuffer genTable = new StringBuffer("<h3>Scan Information</h3>\n");
00194 StringBuffer sqlStat = new StringBuffer("SELECT POINT_TYPE,N_POINTS");
00195 for(int i=0;i<16;i++) sqlStat.append(",POINT_"+i);
00196 sqlStat.append(" FROM SCT_TSTSCANINFO WHERE TEST_NO="+test_no);
00197
00198 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00199 if(DEBUG) System.out.println(sqlStat.toString());
00200 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00201 int recordCount=0;
00202
00203
00204 int ntotal=0;
00205 int nCount=0;
00206 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00207 recordCount++;
00208 String point_type = resultSet.getString(1);
00209 String nPoints = resultSet.getString(2);
00210 int inPoints = Integer.parseInt(nPoints);
00211 for(int i=0;i<16;i++) pointValues[i]=resultSet.getString(i+3);
00212 if(nCount==0) {
00213 genTable.append("<table cellspacing=5 border=1>\n");
00214 for(int i=0;i<2+inPoints;i++) genTable.append("<col width=*>\n");
00215 genTable.append("<tr><td valign=top align=left><b>Type</b></td><td valign=top align=left><b># Points</b></td><td valign=top align=left><b>Values</b></td></tr>\n");
00216 }
00217 nCount++;
00218 genTable.append("<tr>");
00219 genTable.append("<td valign=top align=left>"+point_type+"</td><td valign=top align=left>"+nPoints+"</td>");
00220 genTable.append("<td valign=top align=left>"+pointValues[0]);
00221 for(int y=1;y<inPoints;y++) genTable.append(","+pointValues[y]);
00222 genTable.append("</tr>\n");
00223
00224 }
00225 statement.close();
00226 if(nCount==0) genTable.append("<p>No scan information for this test type.\n");
00227 else genTable.append("</table>\n");
00228 return genTable.toString();
00229 }
00230
00231 public static String getSCTDAQHTMLTestData(String test_no, int testType) throws Exception {
00232
00233
00234 StringBuffer genTable = new StringBuffer("<h3>Test Data</h3>\n");
00235
00236 if(testType==-1) {
00237 genTable.append("Unknown test type");
00238 return genTable.toString();
00239 }
00240 int nCount=0;
00241 SCTDBInterface db = SCTDBInterface.getInstance();
00242 Statement statement = db.connection.createStatement();
00243 ResultSet resultSet;
00244 StringBuffer sqlStat;
00245
00246 switch(testType) {
00247 case SCTDB_TEST_RESET:
00248 case SCTDB_TEST_REDUNDANCY:
00249 genTable.append("No test data available for this test type.");
00250 return genTable.toString();
00251 case SCTDB_TEST_TRIM:
00252 sqlStat = new StringBuffer("SELECT TR_CHARGE,TR_TYPE,TR_ALGORITHM FROM "+sctdaqDBTableNames[testType]);
00253 sqlStat.append(" WHERE test_no="+test_no);
00254 resultSet = statement.executeQuery(sqlStat.toString());
00255 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00256 genTable.append("Charge="+resultSet.getString(1)+" Type="+resultSet.getString(2)+" Algorithm="+resultSet.getString(3));
00257 }
00258
00259 break;
00260 default:
00261 }
00262
00263
00264 int totalRows = (testType==SCTDB_TEST_RESET || testType==SCTDB_TEST_LONGTERM || testType==SCTDB_TEST_IV) ? 1 : DBChipParameterNames[testType].length;
00265 for(int theRowNo=0;theRowNo<totalRows;theRowNo++) {
00266 sqlStat = new StringBuffer("SELECT ");
00267 switch(testType) {
00268 case SCTDB_TEST_RESET:
00269 sqlStat.append(sctdaqDBTableNames[testType]+".ICC_NOCONFIG");
00270 sqlStat.append(","+sctdaqDBTableNames[testType]+".IDD_NOCONFIG");
00271 sqlStat.append(","+sctdaqDBTableNames[testType]+".ICC_NOCLOCK");
00272 sqlStat.append(","+sctdaqDBTableNames[testType]+".IDD_NOCLOCK");
00273 break;
00274 case SCTDB_TEST_LONGTERM:
00275 sqlStat.append(sctdaqDBTableNames[testType]+".DURATION");
00276 sqlStat.append(","+sctdaqDBTableNames[testType]+".FAIL_TIME");
00277 sqlStat.append(","+sctdaqDBTableNames[testType]+".T0_MIN");
00278 sqlStat.append(","+sctdaqDBTableNames[testType]+".T0_MAX");
00279 sqlStat.append(","+sctdaqDBTableNames[testType]+".T1_MIN");
00280 sqlStat.append(","+sctdaqDBTableNames[testType]+".T1_MAX");
00281 sqlStat.append(","+sctdaqDBTableNames[testType]+".IDET_MIN");
00282 sqlStat.append(","+sctdaqDBTableNames[testType]+".IDET_MAX");
00283 sqlStat.append(","+sctdaqDBTableNames[testType]+".ICC_MIN");
00284 sqlStat.append(","+sctdaqDBTableNames[testType]+".ICC_MAX");
00285 sqlStat.append(","+sctdaqDBTableNames[testType]+".IDD_MIN");
00286 sqlStat.append(","+sctdaqDBTableNames[testType]+".IDD_MAX");
00287 break;
00288 case SCTDB_TEST_IV:
00289 sqlStat.append(sctdaqDBTableNames[testType]+".I_LEAK_150");
00290 sqlStat.append(","+sctdaqDBTableNames[testType]+".I_LEAK_350");
00291 break;
00292 default:
00293 sqlStat.append(chipDBnames[0]+DBChipParameterNames[testType][theRowNo]);
00294 for(int y=1;y<chipDBnames.length;y++) sqlStat.append(","+chipDBnames[y]+DBChipParameterNames[testType][theRowNo]);
00295 }
00296 sqlStat.append(" FROM "+sctdaqDBTableNames[testType]);
00297 sqlStat.append(" WHERE test_no="+test_no);
00298
00299
00300
00301 if(DEBUG) System.out.println(sqlStat.toString());
00302 resultSet = statement.executeQuery(sqlStat.toString());
00303 int recordCount=0;
00304
00305
00306
00307 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00308 if(nCount==0) {
00309 genTable.append("<table cellspacing=5 border=1>\n");
00310 if(testType==SCTDB_TEST_LONGTERM) {
00311 genTable.append("<tr><td><b>Duration</b></td>");
00312 genTable.append("<td><b>Fail Time</b></td>");
00313 genTable.append("<td><b>T0(min)</b></td>");
00314 genTable.append("<td><b>T0(max)</b></td>");
00315 genTable.append("<td><b>T1(min)</b></td>");
00316 genTable.append("<td><b>T1(max)</b></td>");
00317 genTable.append("<td><b>Idet(min)</b></td>");
00318 genTable.append("<td><b>Idet(max)</b></td>");
00319 genTable.append("<td><b>Icc(min)</b></td>");
00320 genTable.append("<td><b>Icc(max)</b></td>");
00321 genTable.append("<td><b>Idd(min)</b></td>");
00322 genTable.append("<td><b>Idd(max)</b></td></tr>");
00323 }
00324 else if(testType==SCTDB_TEST_RESET) {
00325 genTable.append("<tr><td><b>Icc NoConf</b></td>");
00326 genTable.append("<td><b>Idd NoConf</b></td>");
00327 genTable.append("<td><b>Icc NoClock</b></td>");
00328 genTable.append("<td><b>Idd NoClock</b></td></tr>\n");
00329 }
00330 else if(testType==SCTDB_TEST_IV) {
00331 genTable.append("<tr><td><b>I @ 150V</b></td>");
00332 genTable.append("<td><b>I @ 350V</b></td></tr>\n");
00333 }
00334 else {
00335 for(int i=0;i<13;i++) genTable.append("<col width=*>\n");
00336 genTable.append("<tr><td><b>Parameter</b></td>");
00337 for(int z=0;z<chipDBnames.length;z++) genTable.append("<td><b>"+chipDBnames[z].substring(0,chipDBnames[z].length()-1)+"</b></td>");
00338 genTable.append("</tr>\n");
00339 }
00340 }
00341 nCount++;
00342 recordCount++;
00343
00344 switch(testType) {
00345 case SCTDB_TEST_RESET:
00346 case SCTDB_TEST_LONGTERM:
00347 case SCTDB_TEST_IV:
00348 genTable.append("<tr>");
00349 break;
00350 default:
00351 genTable.append("<tr><td>"+(String)fullTestParameterNames[testType][theRowNo]+"</td>");
00352 }
00353 if(testType==SCTDB_TEST_NOISE && (theRowNo==1 || theRowNo==2)) {
00354 for(int y=0;y<chipDBnames.length;y++) {
00355 String theValue = resultSet.getString(1+y);
00356 double theNumber = Double.valueOf(theValue).doubleValue();
00357 DecimalFormat myFormatter = new DecimalFormat("0.##E0");
00358 genTable.append("<td>"+myFormatter.format(theNumber)+"</td>");
00359 }
00360 }
00361 else if(testType==SCTDB_TEST_RESET) for(int y=0;y<4;y++) genTable.append("<td>"+resultSet.getString(1+y)+"</td>");
00362 else if(testType==SCTDB_TEST_LONGTERM) for(int y=0;y<12;y++) genTable.append("<td>"+resultSet.getString(1+y)+"</td>");
00363 else if(testType==SCTDB_TEST_IV) for(int y=0;y<2;y++) genTable.append("<td>"+resultSet.getString(1+y)+"</td>");
00364 else for(int y=0;y<chipDBnames.length;y++) genTable.append("<td>"+resultSet.getString(1+y)+"</td>");
00365 genTable.append("</tr>\n");
00366 }
00367 }
00368 statement.close();
00369 if(nCount==0) genTable.append("No test data found\n");
00370 else genTable.append("</table>\n");
00371 return genTable.toString();
00372 }
00373
00374 public static String getHTMLDefectTable(String test_no) throws Exception {
00375
00376 StringBuffer genTable = new StringBuffer("<h3>Defects</h3>\n");
00377 StringBuffer sqlStat = new StringBuffer("SELECT CHAN_1ST,CHAN_LAST,DEFECT_NAME FROM DEFECTS WHERE TEST_NO="+test_no);
00378 sqlStat.append(" ORDER BY CHAN_1ST");
00379
00380
00381 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00382
00383 if(DEBUG) System.out.println(sqlStat.toString());
00384 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00385 int recordCount=0;
00386
00387
00388 int ntotal=0;
00389 int nCount=0;
00390 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00391 recordCount++;
00392 String chan1 = resultSet.getString(1);
00393 String chan2 = resultSet.getString(2);
00394 String defectname = resultSet.getString(3);
00395 if(nCount==0) {
00396 genTable.append("<table cellspacing=5 border=1>\n");
00397 for(int i=0;i<2;i++) genTable.append("<col width=*>\n");
00398 genTable.append("<tr><td><b>Channel</b></td><td><b>Defect Type</b></td></tr>\n");
00399 }
00400 nCount++;
00401 String chans = (chan1.equals(chan2)) ? chan1 : chan1+"-"+chan2;
00402 genTable.append("<tr><td>"+chans+"</td><td>"+defectname+"</td></tr>\n");
00403
00404 }
00405 statement.close();
00406 if(nCount==0) genTable.append("No defects found\n");
00407 else genTable.append("</table>\n");
00408 return genTable.toString();
00409 }
00410
00411 public static String getModuleReport(String serno) {
00412
00413 try {
00414 if(!GeneralUtilities.itemExists(serno)) return null;
00415 }catch(Exception ee){};
00416
00417 System.out.println("Generating detailed report for module "+serno+". Be patient...");
00418
00419 java.text.DecimalFormat ivFormatter = new java.text.DecimalFormat("#.###");
00420
00421 ModuleInfo moduleInfo = new ModuleInfo(serno);
00422
00423 StringBuffer html = new StringBuffer(guiUtilities.DaveUtils.getHTMLHeader("Module Summary Report for "+serno));
00424
00425 if(!moduleInfo.isModule()) {
00426 html.append("Sorry, "+serno+" is not a module!");
00427 html.append(guiUtilities.DaveUtils.getHTMLFooter());
00428 return html.toString();
00429 }
00430
00431 try {
00432 if(!moduleInfo.isBarrelModule()) html.append(createModuleEvaluationTable(serno));
00433 }catch(Exception eVal){}
00434
00435 SignoffDataInterface signoffInfo=null;
00436 if(moduleInfo.isBarrelModule()) {
00437 signoffInfo = new SignoffDataInterface(serno,"FINALSIGNOFF");
00438 html.append("<h3>Module Signoff Information</h3>");
00439 Hashtable signoffDataHash = signoffInfo.getSignoffDataHash();
00440 if(signoffDataHash.size()==0) html.append("None uploaded");
00441 else {
00442 html.append("<table border=1>");
00443 int count=1;
00444 for (java.util.Enumeration e = signoffDataHash.keys() ; e.hasMoreElements() ;) {
00445 String location = (String)e.nextElement();
00446 html.append("<tr><td colspan=2><font color=navy>"+Integer.toString(count)+" - "+signoffInfo.getUploaderInfo(location)+"</font></td></tr>");
00447 html.append("<tr><td align=right><font color=navy>Overall category:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.CATEGORY,true)+"</td></tr>");
00448 if(signoffInfo.getString(location,ModuleSignoffData.CATEGORY,true).matches("FAIL|Fail")) {
00449 html.append("<tr><td align=right><font color=navy>Reason for FAIL:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.FAILREASON,true)+"</td></tr>");
00450 }
00451 html.append("<tr><td align=right><font color=navy>Barrel Asignment:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.BARREL,true)+"</td></tr>");
00452 if(signoffInfo.getString(location,ModuleSignoffData.BARREL,true).matches("[56]+")) {
00453 html.append("<tr><td align=right>Reason for B5/6:</td><td>"+signoffInfo.getString(location,ModuleSignoffData.B56REASON,true)+"</td></tr>");
00454 }
00455 html.append("<tr><td align=right><font color=navy>Comment:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.COMMENT,true)+"</td></tr>");
00456 count++;
00457 }
00458 html.append("</table>");
00459 }
00460 if(!signoffInfo.qualityInfoIsPresent()) signoffInfo = new SignoffDataInterface(serno,"SIGNOFF");
00461 }
00462
00463 html.append("<h3>Assembly Information</h3>");
00464 html.append("<table border=1>");
00465 html.append("<tr><td><b>Component</b></td><td><b>SerialNo</b></td><td><b>Position</b></td><td colspan=2><b>Details</td></tr>\n");
00466 for(int i=0;i<moduleParts.length;i++) {
00467 if(moduleInfo.isForwardModule() && (i==SCTDBInfo.bmBB || i==SCTDBInfo.bmSB || i==SCTDBInfo.bmHPC)) continue;
00468 String sn = moduleInfo.getSerialNo(i);
00469 String testInfo = "n/a";
00470 if(moduleInfo.isBarrelModule()) {
00471 testInfo = moduleInfo.getDataSheetTestNo(i);
00472 if(testInfo==null) testInfo="Datasheet not available";
00473 else testInfo = "<a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.DATASHEET)+"&ref="+testInfo+"\">Datasheet</a>";
00474 }
00475 html.append("<tr><td>"+moduleParts[i]+"</td><td>"+sn+"</td><td>n/a</td><td colspan=2>"+testInfo+"</td></tr>\n");
00476 }
00477 Vector sensorList = moduleInfo.getSensorList();
00478 if(sensorList.size()==0) html.append("<tr><td>Sensors</td><td>Not Uploaded.</td><td>n/a</td><td colspan=2>Data not available</td></tr>\n");
00479 else {
00480 for(int i=0;i<sensorList.size();i++) {
00481 Hashtable tempHash = (Hashtable)sensorList.elementAt(i);
00482 String thisSN=(String)tempHash.get("SERIALNO");
00483 String posn = (String)tempHash.get("POSITION");
00484 String type = "Sensor";
00485 if(moduleInfo.isForwardModule()) {
00486 if(thisSN.matches("\\d{7}03\\d{5}")) type="W12 Sensor";
00487 else if(thisSN.matches("\\d{7}04\\d{5}")) type="W21 Sensor";
00488 else if(thisSN.matches("\\d{7}05\\d{5}")) type="W22 Sensor";
00489 else if(thisSN.matches("\\d{7}06\\d{5}")) type="W31 Sensor";
00490 else if(thisSN.matches("\\d{7}07\\d{5}")) type="W32 Sensor";
00491 }
00492 String link = "<a href=Type"+Integer.toString(guiUtilities.HTMLViewer.SENSORTESTDATA)+"&ref="+thisSN+">All Test Data</a>";
00493 html.append("<tr><td>"+type+"</td><td>"+thisSN+"</td><td>"+posn+"</td><td colspan=2>"+link+"</td></tr>\n");
00494 }
00495 }
00496 Vector asicList = moduleInfo.getAsicList();
00497 if(asicList.size()==0) html.append("<tr><td>ASICs</td><td>Not Uploaded.</td><td>n/a</td><td colspan=2>Data not available</td></tr>\n");
00498 else {
00499 for(int i=0;i<asicList.size();i++) {
00500 String thisASIC = (String)asicList.elementAt(i);
00501 String thisASICInfo = moduleInfo.getASICInfo(thisASIC);
00502 String thisASICcorrFactor = moduleInfo.getASICcorrFactor(thisASIC);
00503 html.append("<tr><td>ASIC</td><td>"+thisASIC+"</td><td>"+Integer.toString(i+1)+"</td><td>"+thisASICInfo+"</td><td>cFactor "+thisASICcorrFactor+"</td></tr>\n");
00504 }
00505 }
00506 html.append("</table>");
00507
00508 try {
00509 String hsn = moduleInfo.getHybridSerialNo();
00510 if(hsn!=null) html.append(createASICReWorkTable(hsn));
00511 }catch(Exception e0){System.err.println("Error retrieving dissam logs: "+e0.toString());}
00512
00513 try {
00514 html.append(createVisualTestTable(serno,"Module"));
00515 html.append(createVisualTestTable(moduleInfo.getHybridSerialNo(),"Hybrid"));
00516 }catch(Exception e){System.err.println("Error downloading visual inspection info: "+e.toString());}
00517
00518 System.out.println("Still working...");
00519
00520 html.append("<h3>Metrology Data</h3>");
00521 if(moduleInfo.noMetrologyTests()==0) html.append("No data uploaded.");
00522 else {
00523 html.append("<table border=1>");
00524 html.append("<tr><td>Type</td><td>Event</td><td>Status</td><td>Location</td><td>Date</td><td>Data</td></tr>\n");
00525 for(int i=0;i<moduleInfo.noMetrologyTests();i++) {
00526 MetrologyTest met = moduleInfo.getMetrologyTest(i);
00527 int linkType = (met.getType().equals("XY")) ? guiUtilities.HTMLViewer.XYMETDATA : guiUtilities.HTMLViewer.ZMETDATA;
00528 String link = "<a href=Type"+Integer.toString(linkType)+"&ref="+met.getTestNo()+"\">Datasheet</a>";
00529 html.append("<tr><td>"+met.getType()+"</td><td>"+met.getEvent()+"</td><td>"+met.getStatus()+"</td><td>"+met.getLocation()+"</td><td>"+met.getDate()+"</td></td>"+link+"</td></tr>");
00530 }
00531 html.append("</table>");
00532 }
00533
00534 html.append("<h3>IV Data</h3>");
00535 html.append("<table border=1>");
00536 html.append("<tr><td>Component</td><td>Location</td><td>Date</td><td>150V</td><td>350V</td><td>500V</td><td>Temperature</td><td>Data</td></tr>\n");
00537 ModuleIVInfo ivInfo = new ModuleIVInfo(serno,sensorList);
00538 html.append("<tr><td>Sensor Sum</td><td>"+ivInfo.getOrigin()+"</td><td> - </td>");
00539 double i150sensor = ivInfo.geti150SensorCurrent();
00540 double i350sensor = ivInfo.geti350SensorCurrent();
00541 double i500sensor = ivInfo.geti500SensorCurrent();
00542 html.append("<td>"+ivFormatter.format(i150sensor)+"</td><td>"+ivFormatter.format(i350sensor)+"</td><td>"+ivFormatter.format(i500sensor)+"</td><td>"+ivInfo.getTemperatureRange()+"</td><td> - </td></tr>");
00543 for(int i=0;i<ivInfo.noModuleIVs();i++) {
00544 ModuleIV mIV = ivInfo.getModuleIV(i);
00545 html.append("<tr><td>Module</td><td>"+mIV.getLocation()+"</td><td>"+mIV.getDate()+"</td>");
00546 double i150 = mIV.geti150();
00547 if(i150==0.) html.append("<td> - </td>");
00548 else {
00549 if(i150sensor>0. && i150>(i150sensor*1.25)) html.append("<td><font color=red>"+ivFormatter.format(i150)+"</td>");
00550 else html.append("<td>"+ivFormatter.format(i150)+"</td>");
00551 }
00552 double i350 = mIV.geti350();
00553 if(i350==0.) html.append("<td> - </td>");
00554 else {
00555 if(i350sensor>0. && i350>(i350sensor*1.25)) html.append("<td><font color=red>"+ivFormatter.format(i350)+"</td>");
00556 else html.append("<td>"+ivFormatter.format(i350)+"</td>");
00557 }
00558 double i500 = mIV.geti500();
00559 if(i500==0.) html.append("<td> - </td>");
00560 else {
00561 if(i500sensor>0. && i500>(i500sensor*1.25)) html.append("<td><font color=red>"+ivFormatter.format(i500)+"</font></td>");
00562 else html.append("<td>"+ivFormatter.format(i500)+"</td>");
00563 }
00564 html.append("<td>"+mIV.getTemperature()+"</td>");
00565 String plotLink = mIV.getLink();
00566 if(plotLink==null) html.append("<td> - </td>");
00567 else {
00568 boolean isPostscript = (plotLink.endsWith(".ps") || plotLink.endsWith(".ps.gz"));
00569 String link = isPostscript ? "Type"+Integer.toString(guiUtilities.HTMLViewer.URLTOPOSTSCRIPT)+"&ref="+plotLink : plotLink;
00570 html.append("<td><a href=\""+link+"\">Plot</a></td>");
00571 }
00572 html.append("</tr>");
00573 }
00574 html.append("</table>");
00575
00576 if(moduleInfo.isBarrelModule()) {
00577 if(signoffInfo!=null) {
00578 html.append("<h3>IV Quality Information</h3>");
00579 Hashtable signoffDataHash = signoffInfo.getSignoffDataHash();
00580 if(signoffDataHash.size()==0) html.append("<p>None uploaded");
00581 else {
00582 html.append("<table border=1>");
00583 int count=1;
00584 for (java.util.Enumeration e = signoffDataHash.keys() ; e.hasMoreElements() ;) {
00585 String location = (String)e.nextElement();
00586 html.append("<tr><td colspan=2><font color=navy>"+Integer.toString(count)+" - "+signoffInfo.getUploaderInfo(location)+"</font></td></tr>");
00587 html.append("<tr><td align=right valign=top><font color=navy>Category: </font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.IVCATEGORY,true)+"</td></tr>");
00588 html.append("<tr><td align=right valign=top><font color=navy>Comments: </font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.IVCOMMENT,true)+"</td></tr>");
00589 count++;
00590 }
00591 html.append("</table>");
00592 }
00593 }
00594 }
00595
00596 ModuleSCTDAQInfo sctdaqInfo = new ModuleSCTDAQInfo(serno);
00597 html.append("<h3>SCTDAQ Characterisations</h3>\n");
00598
00599 if(sctdaqInfo.noTests()>0) {
00600 html.append("<table border=1>\n");
00601 html.append("<tr><td>Location</td><td>Date</td><td>Temperature</td><td>DeltaT</td><td colspan=2 align=center>Excluding Trim Defects</td><td colspan=2 align=center>Including Trim Defects</td><td>Link</td><td>Failed Tests</td></tr>\n");
00602 html.append("<tr><td></td><td></td><td></td><td></td><td>N(defects)</td><td>N(consecutive)</td><td>N(defects)</td><td>N(consecutive)</td><td></td><td></td></tr>\n");
00603 for(int i=0;i<sctdaqInfo.noTests();i++) {
00604 SCTDAQCharacterisation sctdaq = sctdaqInfo.getCharacterisation(i);
00605 String temperature = (sctdaq.getTemperature()>10.) ? "Warm" : "Cold";
00606 double deltaT = sctdaq.getDeltaT();
00607 String deltaTS = new java.text.DecimalFormat("#.###").format(deltaT);
00608 String dT = (Math.abs(deltaT)>=1.) ? "<font color=red>"+deltaTS+"</font>" : deltaTS;
00609 html.append("<tr><td valign=top>"+sctdaq.getLocation()+"</td><td valign=top>"+sctdaq.getDate()+"</td><td valign=top>"+temperature+"</td><td valign=top>"+dT+"</td>");
00610 html.append("<td valign=top>"+Integer.toString(sctdaq.nDefects(2))+"</td><td valign=top>"+Integer.toString(sctdaq.nDefects(3))+"</td>");
00611 html.append("<td valign=top>"+Integer.toString(sctdaq.nDefects(0))+"</td><td valign=top>"+Integer.toString(sctdaq.nDefects(1))+"</td>");
00612 String weblink = serno+"__"+sctdaq.getLocation()+"__"+sctdaq.getDate()+"__"+temperature;
00613 html.append("<td valign=top><a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.SCTDAQTESTLIST)+"&ref="+weblink+"\">Characterisation Report</a></td>");
00614 html.append("<td valign=top>");
00615 Set failedTests = sctdaq.getFailedTests();
00616 if(failedTests.size()==0) html.append(" - </td>");
00617 else {
00618 int count=0;
00619 for (Iterator k = failedTests.iterator(); k.hasNext(); ) {
00620 if(count>0) html.append("<br>");
00621 html.append((String)k.next());
00622 count++;
00623 }
00624 html.append("</td>");
00625 }
00626 html.append("</tr>\n");
00627 }
00628 html.append("</table>");
00629 html.append("<br><a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.SCTDAQTESTLIST)+"&ref="+serno+"__\">Click here</a> for a full report of *all* sctdaq tests performed on this module.");
00630 }
00631 else html.append("None uploaded.<br>");
00632
00633 if(moduleInfo.isBarrelModule()) {
00634
00635 html.append("<h3>Module Quality Information</h3>");
00636 Hashtable signoffDataHash = signoffInfo.getSignoffDataHash();
00637 if(signoffDataHash.size()==0) html.append("None uploaded");
00638 else {
00639 html.append("<table border=1>");
00640 int count=1;
00641 for (java.util.Enumeration e = signoffDataHash.keys() ; e.hasMoreElements() ;) {
00642 String location = (String)e.nextElement();
00643 html.append("<tr><td colspan=2><font color=navy>"+Integer.toString(count)+" - "+signoffInfo.getUploaderInfo(location)+"</font></td></tr>");
00644 html.append("<tr><td align=right valign=top><font color=navy>Category: </font></td><td valign=top>"+signoffInfo.getString(location,ModuleSignoffData.ELECTRICALCATEGORY,true)+"</td></tr>");
00645 html.append("<tr><td align=right valign=top><font color=navy>Comments: </font></td><td valign=top>"+signoffInfo.getString(location,ModuleSignoffData.ELECTRICALCOMMENT,true)+"</td></tr>");
00646 html.append("<tr><td align=right valign=top><font color=navy>SCurve Category: </font></td><td valign=top>"+signoffInfo.getString(location,ModuleSignoffData.SCURVECATEGORY,true)+"</td></tr>");
00647 html.append("<tr><td align=right valign=top><font color=navy>SCurve Comments: </font></td><td valign=top>"+signoffInfo.getString(location,ModuleSignoffData.SCURVECOMMENT,true)+"</td></tr>");
00648 count++;
00649 }
00650 html.append("</table>");
00651 }
00652 }
00653 html.append(guiUtilities.DaveUtils.getHTMLFooter());
00654 return html.toString();
00655 }
00656
00657 public static String getSensorMfrHTMLTable(Vector snList) throws Exception {
00658
00659 StringBuffer genTable = new StringBuffer("<h3>General Wafer Properties</h3>\n");
00660
00661 String serialNos = (String)snList.elementAt(0);
00662 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00663
00664 StringBuffer sqlStat = new StringBuffer("SELECT ");
00665 sqlStat.append(" tests.ser_no,substr_orient,substr_origin,thickness,i_leak_150,i_leak_350,temperature FROM tests,tstdetmfrs");
00666 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+") AND tests.test_name='DetMfrSheet' AND tstdetmfrs.test_no=tests.test_no");
00667 sqlStat.append(" ORDER BY tests.ser_no");
00668
00669 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00670 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00671 int nCount=0;
00672
00673 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00674 if(nCount==0) {
00675 genTable.append("<table cellspacing=5 border=1>\n");
00676 for(int i=0;i<4;i++) genTable.append("<col width=*>\n");
00677 genTable.append("<tr><td><b>Serial Number</b></td><td><b>Orientation</b></td><td><b>Origin</b></td><td><b>Thickness(um)</b></td></tr>");
00678 }
00679 nCount++;
00680 genTable.append("<tr>");
00681 for(int i=1;i<=4;i++) genTable.append("<td>"+resultSet.getString(i)+"</td>");
00682 genTable.append("</tr>\n");
00683 }
00684 statement.close();
00685 if(nCount==0) genTable.append("<p>No data available\n");
00686 else genTable.append("</table>");
00687 return genTable.toString();
00688 }
00689
00690 public static String getSensorIVHTMLTable(Vector snList) throws Exception {
00691 SCTDBInterface db = SCTDBInterface.getInstance();
00692 Hashtable tempHash;
00693 Hashtable atlasHash = new Hashtable();
00694 Vector tempList;
00695 Vector mfrList = new Vector();
00696 StringBuffer ivTable = new StringBuffer("<h3>IV Data</h3>\n");
00697 String serialNos = (String)snList.elementAt(0);
00698 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00699
00700 StringBuffer sqlStat = new StringBuffer("SELECT ");
00701 sqlStat.append(" tests.ser_no,tests.locn_name,tests.test_date,i_leak_150,i_leak_350,temperature FROM tests,tstdetmfrs");
00702 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+") AND tests.test_name='DetMfrSheet' AND tstdetmfrs.test_no=tests.test_no");
00703 sqlStat.append(" ORDER BY tests.ser_no");
00704
00705 Statement statement = db.connection.createStatement();
00706
00707 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00708 int nCount=0;
00709
00710 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00711 String sn = resultSet.getString(1);
00712 tempHash = new Hashtable();
00713 tempHash.put("SERIALNO",sn);
00714 tempHash.put("NAME",resultSet.getString(2));
00715 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(3)));
00716 tempHash.put("I150",resultSet.getString(4));
00717 tempHash.put("I350",resultSet.getString(5));
00718 tempHash.put("TEMP",resultSet.getString(6));
00719 tempHash.put("STATUS","Pass");
00720 tempHash.put("COMNTS","None.");
00721 mfrList.addElement(tempHash);
00722 nCount++;
00723 }
00724 statement.close();
00725
00726 sqlStat = new StringBuffer("SELECT ");
00727 sqlStat.append("tests.test_no,tests.ser_no,tests.locn_name,tests.test_date,tests.problem,tests.pass,tstdetivs.temperature,tstdetivs.i_leak_150,tstdetivs.i_leak_350");
00728 sqlStat.append(" FROM tests,tstdetivs");
00729 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00730 sqlStat.append(" AND tests.test_name='DetIVscan'");
00731 sqlStat.append(" AND tstdetivs.test_no=tests.test_no");
00732 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00733
00734 statement = db.connection.createStatement();
00735 resultSet = statement.executeQuery(sqlStat.toString());
00736
00737 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00738 tempHash = new Hashtable();
00739 String sn = resultSet.getString(2);
00740 if(atlasHash.containsKey(sn)) tempList = (Vector)atlasHash.get(sn);
00741 else tempList = new Vector();
00742 tempHash.put("TESTNO",resultSet.getString(1));
00743 tempHash.put("SERIALNO",resultSet.getString(2));
00744 tempHash.put("NAME",resultSet.getString(3));
00745 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(4)));
00746 String problemFlag = resultSet.getString(5);
00747 String passFlag = resultSet.getString(6);
00748 String statusFlag;
00749 if(passFlag.equals("YES")) {
00750 statusFlag = (problemFlag.equals("YES")) ? "PROBLEM" : "Pass";
00751 }
00752 else statusFlag = "FAIL";
00753 tempHash.put("STATUS",statusFlag);
00754 tempHash.put("TEMP",resultSet.getString(7));
00755 tempHash.put("I150",resultSet.getString(8));
00756 tempHash.put("I350",resultSet.getString(9));
00757 tempList.addElement(tempHash);
00758 atlasHash.put(sn,tempList);
00759 nCount++;
00760 }
00761 statement.close();
00762
00763
00764 String subQuery = sqlStat.toString();
00765 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("AND tstdetivs")-1);
00766 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
00767
00768
00769 for(int i=0;i<mfrList.size();i++) {
00770 if(i==0) {
00771 ivTable.append("<table cellspacing=5 border=1>\n");
00772 for(int j=0;j<8;j++) ivTable.append("<col width=*>\n");
00773 ivTable.append("<tr><td nowrap><b>Serial Number</b></td><td nowrap><b>Location</b></td><td nowrap><b>Date</b></td><td nowrap><b>I@150V</b></td><td nowrap><b>I@350V</b></td><td nowrap><b>Temp(C)</b></td><td nowrap><b>Status</b></td><td nowrap><b>Remarks</b></td></tr>\n");
00774 }
00775 ivTable.append("<tr>");
00776 tempHash = (Hashtable)mfrList.elementAt(i);
00777 String sn = (String)tempHash.get("SERIALNO");
00778 String locn = (String)tempHash.get("NAME");
00779 String date = (String)tempHash.get("DATE");
00780 String i150 = (String)tempHash.get("I150");
00781 String i350 = (String)tempHash.get("I350");
00782 String temp = (String)tempHash.get("TEMP");
00783 String status = (String)tempHash.get("STATUS");
00784 String remarks = (String)tempHash.get("COMNTS");
00785 ivTable.append("<td>"+sn+"</td><td>"+locn+"</td><td>"+date+"</td><td>"+i150+"</td><td>"+i350+"</td><td>"+temp+"</td><td>"+status+"</td><td>"+remarks+"</td></tr>\n");
00786 if(atlasHash.containsKey(sn)) {
00787 tempList = (Vector)atlasHash.get(sn);
00788 for(int j=0;j<tempList.size();j++) {
00789 tempHash = (Hashtable)tempList.elementAt(j);
00790 String testno = (String)tempHash.get("TESTNO");
00791 sn = (String)tempHash.get("SERIALNO");
00792 locn = "<font color=green>"+(String)tempHash.get("NAME")+"</font>";
00793 date = (String)tempHash.get("DATE");
00794 i150 = (String)tempHash.get("I150");
00795 i350 = (String)tempHash.get("I350");
00796 temp = (String)tempHash.get("TEMP");
00797 status = (String)tempHash.get("STATUS");
00798 if(!status.equals("Pass")) status = "<font color=red>"+status+"</font>";
00799 remarks="None.";
00800 if(commentsHash.containsKey(testno)) remarks = (String)commentsHash.get(testno);
00801 if(!remarks.equals("None.")) remarks = "<font color=red>"+remarks+"</font>";
00802 ivTable.append("<tr><td>"+sn+"</td><td>"+locn+"</td><td>"+date+"</td><td>"+i150+"</td><td>"+i350+"</td><td>"+temp+"</td><td>"+status+"</td><td nowrap>"+remarks+"</td></tr>\n");
00803 }
00804 }
00805 }
00806 if(nCount==0) ivTable.append("<p>No data available\n");
00807 else ivTable.append("</table>");
00808 return ivTable.toString();
00809 }
00810
00811
00812 public static String getSensorDepletionHTMLTable(Vector snList) throws Exception {
00813 SCTDBInterface db = SCTDBInterface.getInstance();
00814 Hashtable tempHash;
00815 Hashtable atlasHash = new Hashtable();
00816 Vector tempList;
00817 Vector mfrList = new Vector();
00818 StringBuffer ivTable = new StringBuffer("<h3>Depletion Voltages</h3>\n");
00819 String serialNos = (String)snList.elementAt(0);
00820 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00821
00822 StringBuffer sqlStat = new StringBuffer("SELECT ");
00823 sqlStat.append(" tests.ser_no,tests.locn_name,tests.test_date,v_dep FROM tests,tstdetmfrs");
00824 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+") AND tests.test_name='DetMfrSheet' AND tstdetmfrs.test_no=tests.test_no");
00825 sqlStat.append(" ORDER BY tests.ser_no");
00826
00827 Statement statement = db.connection.createStatement();
00828 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00829 int nCount=0;
00830
00831 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00832 String sn = resultSet.getString(1);
00833 tempHash = new Hashtable();
00834 tempHash.put("SERIALNO",sn);
00835 tempHash.put("NAME",resultSet.getString(2));
00836 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(3)));
00837 tempHash.put("VDEP",resultSet.getString(4));
00838 tempHash.put("STATUS","Pass");
00839 tempHash.put("COMNTS","None.");
00840 mfrList.addElement(tempHash);
00841 nCount++;
00842 }
00843
00844 statement.close();
00845
00846 sqlStat = new StringBuffer("SELECT ");
00847 sqlStat.append("tests.test_no,tests.ser_no,tests.locn_name,tests.test_date,tests.problem,tests.pass,tstdetopts.v_dep");
00848 sqlStat.append(" FROM tests,tstdetopts");
00849 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00850 sqlStat.append(" AND tests.test_name='DetVDep'");
00851 sqlStat.append(" AND tstdetopts.test_no=tests.test_no");
00852 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00853 statement = db.connection.createStatement();
00854 resultSet = statement.executeQuery(sqlStat.toString());
00855
00856 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00857 tempHash = new Hashtable();
00858 String sn = resultSet.getString(2);
00859 if(atlasHash.containsKey(sn)) tempList = (Vector)atlasHash.get(sn);
00860 else tempList = new Vector();
00861 tempHash.put("TESTNO",resultSet.getString(1));
00862 tempHash.put("SERIALNO",resultSet.getString(2));
00863 tempHash.put("NAME",resultSet.getString(3));
00864 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(4)));
00865 String problemFlag = resultSet.getString(5);
00866 String passFlag = resultSet.getString(6);
00867 String statusFlag;
00868 if(passFlag.equals("YES")) {
00869 statusFlag = (problemFlag.equals("YES")) ? "PROBLEM" : "Pass";
00870 }
00871 else statusFlag = "FAIL";
00872 tempHash.put("STATUS",statusFlag);
00873 tempHash.put("VDEP",resultSet.getString(7));
00874 tempList.addElement(tempHash);
00875 atlasHash.put(sn,tempList);
00876 nCount++;
00877 }
00878 statement.close();
00879
00880
00881 String subQuery = sqlStat.toString();
00882 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("AND tstdetopts")-1);
00883 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
00884
00885
00886 for(int i=0;i<mfrList.size();i++) {
00887 if(i==0) {
00888 ivTable.append("<table cellspacing=5 border=1>\n");
00889 for(int j=0;j<8;j++) ivTable.append("<col width=*>\n");
00890 ivTable.append("<tr><td nowrap><b>Serial Number</b></td><td nowrap><b>Location</b></td><td nowrap><b>Date</b></td><td nowrap><b>Depletion</b></td><td nowrap><b>Status</b></td><td nowrap><b>Remarks</b></td></tr>\n");
00891 }
00892 ivTable.append("<tr>");
00893 tempHash = (Hashtable)mfrList.elementAt(i);
00894 String sn = (String)tempHash.get("SERIALNO");
00895 String locn = (String)tempHash.get("NAME");
00896 String date = (String)tempHash.get("DATE");
00897 String vdep = (String)tempHash.get("VDEP");
00898 String status = (String)tempHash.get("STATUS");
00899 String remarks = (String)tempHash.get("COMNTS");
00900 ivTable.append("<td>"+sn+"</td><td>"+locn+"</td><td>"+date+"</td><td>"+vdep+"</td><td>"+status+"</td><td>"+remarks+"</td></tr>\n");
00901 if(atlasHash.containsKey(sn)) {
00902 tempList = (Vector)atlasHash.get(sn);
00903 for(int j=0;j<tempList.size();j++) {
00904 tempHash = (Hashtable)tempList.elementAt(j);
00905 String testno = (String)tempHash.get("TESTNO");
00906 sn = (String)tempHash.get("SERIALNO");
00907 locn = "<font color=green>"+(String)tempHash.get("NAME")+"</font>";
00908 date = (String)tempHash.get("DATE");
00909 vdep = (String)tempHash.get("VDEP");
00910 status = (String)tempHash.get("STATUS");
00911 if(!status.equals("Pass")) status = "<font color=red>"+status+"</font>";
00912 remarks="None.";
00913 if(commentsHash.containsKey(testno)) remarks = (String)commentsHash.get(testno);
00914 if(!remarks.equals("None.")) remarks = "<font color=red>"+remarks+"</font>";
00915 ivTable.append("<tr><td>"+sn+"</td><td>"+locn+"</td><td>"+date+"</td><td>"+vdep+"</td><td>"+status+"</td><td nowrap>"+remarks+"</td></tr>\n");
00916 }
00917 }
00918 }
00919 if(nCount==0) ivTable.append("<p>No data available\n");
00920 else ivTable.append("</table>");
00921 return ivTable.toString();
00922 }
00923
00924
00925 public static String getSensorDefectHTMLTable(Vector snList) throws Exception {
00926 SCTDBInterface db = SCTDBInterface.getInstance();
00927 Vector itemList = new Vector();
00928 String serialNos = (String)snList.elementAt(0);
00929 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00930 Vector dets = new Vector();
00931 Vector theLine;
00932 String[] defectNames = {"Pinhole","Oxide-Punchthrough","Short","Open","Implant-Open","Implant-Short","Resistor-Break"};
00933 Hashtable nameHash = new Hashtable();
00934 int ndefectTypes = defectNames.length;
00935 Hashtable[] defectCount = new Hashtable[ndefectTypes];
00936 Hashtable[] defectList = new Hashtable[ndefectTypes];
00937
00938 StringBuffer ivTable = new StringBuffer("<h3>Defects Summary</h3>\n");
00939 for(int i=0;i<ndefectTypes;i++) {
00940 nameHash.put(defectNames[i],new Integer(i));
00941 defectCount[i] = new Hashtable();
00942 defectList[i] = new Hashtable();
00943 }
00944
00945 Hashtable totalCount = new Hashtable();
00946 Hashtable serialNoHash = new Hashtable();
00947 Hashtable dateHash = new Hashtable();
00948 Hashtable locationHash = new Hashtable();
00949
00950 String ser_no="",test_no="";
00951 String test_date,defect_name,chan1,chanlast;
00952
00953
00954
00955 StringBuffer sqlStat = new StringBuffer("SELECT tests.test_no,tests.ser_no,tests.test_date,tests.locn_name FROM tests");
00956 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00957 sqlStat.append(" AND ( tests.test_name='DetDefect' OR tests.test_name='DetMfrSheet')");
00958
00959 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00960 String string1 = sqlStat.toString();
00961
00962
00963
00964 Statement statement = db.connection.createStatement();
00965 ResultSet resultSet = statement.executeQuery(string1);
00966 int nCount=0;
00967 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00968 nCount++;
00969 ser_no = resultSet.getString(2);
00970 test_no = resultSet.getString(1);
00971 String date = resultSet.getString(3);
00972 date = guiUtilities.DaveUtils.extractDate(date);
00973 dateHash.put(test_no,date);
00974 String location_name = resultSet.getString(4);
00975 locationHash.put(test_no,location_name);
00976 for(int i=0;i<ndefectTypes;i++) {
00977 defectCount[i].put(test_no,new Integer(0));
00978 defectList[i].put(test_no,"");
00979 }
00980 totalCount.put(test_no,new Integer(0));
00981 serialNoHash.put(test_no,ser_no);
00982 dets.addElement(test_no);
00983 }
00984 statement.close();
00985 String subQuery = string1;
00986
00987
00988 int in1 = subQuery.indexOf("FROM");
00989 int in2 = subQuery.indexOf("ORDER")-1;
00990 subQuery = "SELECT tests.test_no "+subQuery.substring(in1,in2);
00991
00992 sqlStat = new StringBuffer("SELECT tests.ser_no,tests.test_no,defect_name,chan_1st,chan_last");
00993 sqlStat.append(" FROM tests,defects");
00994 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00995 sqlStat.append(" AND defects.test_no=tests.test_no");
00996 sqlStat.append(" AND tests.test_no IN ("+subQuery+")");
00997 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00998 String string2 = sqlStat.toString();
00999
01000 statement = db.connection.createStatement();
01001 resultSet = statement.executeQuery(string2);
01002 String olddata;
01003 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01004 nCount++;
01005 ser_no = resultSet.getString(1);
01006 test_no = resultSet.getString(2);
01007 defect_name = resultSet.getString(3);
01008 chan1 = resultSet.getString(4);
01009 chanlast = resultSet.getString(5);
01010 int i1 = Integer.parseInt(chan1);
01011 int i2 = Integer.parseInt(chanlast);
01012
01013 if(nameHash.containsKey(defect_name)) {
01014 int idefect = ((Integer)nameHash.get(defect_name)).intValue();
01015
01016 int defCount = ((Integer)defectCount[idefect].get(test_no)).intValue();
01017 int totalDefectCount = ((Integer)totalCount.get(test_no)).intValue();
01018 String defList = (String)defectList[idefect].get(test_no);
01019 for(int j=i1;j<=i2;j++) {
01020 if(!defList.equals("")) defList+=",";
01021 defList += Integer.toString(j);
01022 defCount++;
01023 totalDefectCount++;
01024 }
01025 defectCount[idefect].put(test_no,new Integer(defCount));
01026 defectList[idefect].put(test_no,defList);
01027 totalCount.put(test_no,new Integer(totalDefectCount));
01028
01029 }
01030 else System.out.println("**WARNING** Strange defect declaration for "+ser_no+" was ignored: "+defect_name);
01031 }
01032 statement.close();
01033
01034 for(int i=0;i<dets.size();i++) {
01035 if(i==0) {
01036 ivTable.append("<table cellspacing=5 border=1>\n");
01037 for(int j=0;j<11;j++) ivTable.append("<col width=* nowrap>\n");
01038 ivTable.append("<tr><td nowrap><b>Serial Number</b></td><td nowrap><b>Location</b></td><td nowrap><b>Date</b></td><td nowrap><b>#Defects</b></td>");
01039 for(int j=0;j<ndefectTypes;j++) {
01040 if(defectNames[j].equals("Oxide-Punchthrough")) ivTable.append("<td nowrap><b>Oxide-PT</b></td>");
01041 else if(defectNames[j].equals("Implant-Open")) ivTable.append("<td nowrap><b>Implant-O</b></td>");
01042 else if(defectNames[j].equals("Implant-Short")) ivTable.append("<td nowrap><b>Implant-S</b></td>");
01043 else if(defectNames[j].equals("Resistor-Break")) ivTable.append("<td nowrap><b>Resistor</b></td>");
01044 else ivTable.append("<td nowrap><b>"+defectNames[j]+"</b></td>");
01045 }
01046 }
01047 ivTable.append("\n<tr>");
01048 theLine = new Vector();
01049 String testno = (String)dets.elementAt(i);
01050 String serialno = (String)serialNoHash.get(testno);
01051 ivTable.append("<td>"+serialno+"</td>");
01052 String locn = (String)locationHash.get(testno);
01053 if(!locn.equals("Hamamatsu") && !locn.equals("CiS")) locn = "<font color=green>"+locn+"</font>";
01054 ivTable.append("<td>"+locn+"</td>");
01055 ivTable.append("<td>"+(String)dateHash.get(testno)+"</td>");
01056 ivTable.append("<td>"+((Integer)totalCount.get(testno)).toString()+"</td>");
01057 for(int j=0;j<ndefectTypes;j++) {
01058 String defList = (String)defectList[j].get(testno);
01059 if(!defList.equals("")) defList=" ("+defList+")";
01060 ivTable.append("<td nowrap>"+((Integer)defectCount[j].get(testno)).toString()+defList+"</td>");
01061 }
01062 ivTable.append("</tr>");
01063 }
01064 if(nCount==0) ivTable.append("No data available...");
01065 else ivTable.append("\n</table>");
01066
01067 return ivTable.toString();
01068 }
01069
01070 public static String getSensorVisualTestHTMLTable(Vector snList) throws Exception {
01071 String testnoKey = "TESTNO";
01072 String snKey = "SERIALNO";
01073 String dateKey = "DATE";
01074 String locationKey = "LOCN";
01075 String flagKey = "FLAG";
01076 Hashtable testnoHash = new Hashtable();
01077 Vector testnoList = new Vector();
01078 String serialNos = (String)snList.elementAt(0);
01079 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
01080
01081 StringBuffer ivTable = new StringBuffer("<h3>Visual Inspection Results</h3>\n");
01082
01083 StringBuffer sqlStat = new StringBuffer("SELECT ");
01084 sqlStat.append("tests.test_no,tests.ser_no,tests.test_date,tests.locn_name,tests.problem,tests.pass");
01085 sqlStat.append(" FROM tests");
01086 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
01087 sqlStat.append(" AND tests.test_name='Visual_Inspection'");
01088 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
01089
01090 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
01091 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01092 int nCount=0;
01093 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01094 Hashtable thisHash = new Hashtable();
01095 nCount++;
01096 String testno = resultSet.getString(1);
01097 thisHash.put(snKey,resultSet.getString(2));
01098 String date = resultSet.getString(3);
01099 thisHash.put(dateKey,guiUtilities.DaveUtils.extractDate(date));
01100 thisHash.put(locationKey,"<font color=green>"+resultSet.getString(4)+"</font>");
01101 String problemFlag = resultSet.getString(5);
01102 String passFlag = resultSet.getString(6);
01103 String statusFlag;
01104 if(passFlag.equals("YES")) {
01105 statusFlag = (problemFlag.equals("YES")) ? "<font color=red>PROBLEM</font>" : "Pass";
01106 }
01107 else statusFlag = "<font color=red>FAIL</font>";
01108 thisHash.put(flagKey,statusFlag);
01109 testnoHash.put(testno,thisHash);
01110 testnoList.addElement(testno);
01111
01112 }
01113
01114 statement.close();
01115
01116
01117 String subQuery = sqlStat.toString();
01118 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("ORDER")-1);
01119 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
01120 Hashtable testImagesHash = GeneralUtilities.testImages(subQuery);
01121
01122 StringBuffer picList = new StringBuffer("\n<h3>Image List:</h3>\n");
01123 int imageCount=0;
01124 for(int i=0;i<testnoList.size();i++) {
01125 if(i==0) {
01126 ivTable.append("<table cellspacing=5 border=1>\n");
01127 for(int j=0;j<6;j++) ivTable.append("<col width=* nowrap>\n");
01128 ivTable.append("<tr><td nowrap><b>Serial Number</b></td><td nowrap><b>Location</b></td><td nowrap><b>Date</b></td><td nowrap><b>Status</b></td><td nowrap><b>Remarks</b></td><td><b>Pictures</b></td>");
01129 }
01130 ivTable.append("\n<tr>");
01131
01132
01133 String testno = (String)testnoList.elementAt(i);
01134 Hashtable tempHash = (Hashtable)testnoHash.get(testno);
01135 ivTable.append("<td>"+(String)tempHash.get(snKey)+"</td>");;
01136 ivTable.append("<td>"+(String)tempHash.get(locationKey)+"</td>");
01137 ivTable.append("<td>"+(String)tempHash.get(dateKey)+"</td>");
01138
01139 ivTable.append("<td>"+(String)tempHash.get(flagKey)+"</td>");
01140 if(commentsHash.containsKey(testno)) ivTable.append("<td nowrap>"+(String)commentsHash.get(testno)+"</td>");
01141 else ivTable.append("<td></td>");
01142 if(testImagesHash.containsKey(testno)) {
01143 Vector imageList = (Vector)testImagesHash.get(testno);
01144
01145 for(int j=0;j<imageList.size()/2; j++) {
01146 imageCount++;
01147 String imageCaption = (String)imageList.elementAt(2*j);
01148 String imageName = (String)imageList.elementAt((2*j)+1);
01149 File theImageFile = new File(PreferencesInterface.getInstance().getPreference(PreferencesInterface.SCRATCH_DIR),imageName);
01150 GeneralUtilities.saveImage(testno,imageName,theImageFile);
01151 picList.append("\n<p>"+imageCaption+":");
01152 picList.append("\n<p><img src="+imageName+">");
01153 if(j==0) {
01154 ivTable.append("<td nowrap>"+imageCaption+"</td></tr>");
01155 }
01156 else {
01157
01158 ivTable.append("\n<tr>");
01159 ivTable.append("<td>"+(String)tempHash.get(snKey)+"</td>");
01160 ivTable.append("<td></td>");
01161 ivTable.append("<td></td>");
01162 ivTable.append("<td></td>");
01163 ivTable.append("<td></td>");
01164 ivTable.append("<td nowrap>"+imageCaption+"</td>");
01165 ivTable.append("</tr>");
01166 }
01167
01168 }
01169 }
01170 else ivTable.append("<td></td></tr>");
01171 }
01172 if(nCount==0) ivTable.append("No data available ...");
01173 else ivTable.append("</table>");
01174 if(imageCount>0) ivTable.append(picList);
01175 return ivTable.toString();
01176
01177
01178 }
01179
01180 public static String getImageHTMLTable(String testno) throws Exception {
01181
01182 StringBuffer ivTable = new StringBuffer("<h3>Images</h3>\n");
01183
01184 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
01185 ResultSet resultSet = statement.executeQuery("SELECT title,name FROM test_images WHERE test_no ="+testno);
01186 Vector imageList = new Vector();
01187 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01188 String title = resultSet.getString(1);
01189 String name = resultSet.getString(2);
01190 imageList.addElement(title);
01191 imageList.addElement(name);
01192 }
01193
01194 statement.close();
01195
01196 if(imageList.size()==0) {
01197 ivTable.append("None uploaded.");
01198 return ivTable.toString();
01199 }
01200
01201
01202 for(int j=0;j<imageList.size()/2; j++) {
01203
01204 String imageCaption = (String)imageList.elementAt(2*j);
01205 String imageName = (String)imageList.elementAt((2*j)+1);
01206 File theImageFile = new File(PreferencesInterface.getInstance().getPreference(PreferencesInterface.SCRATCH_DIR),imageName);
01207 GeneralUtilities.saveImage(testno,imageName,theImageFile);
01208 ivTable.append("\n<p>"+imageCaption+":");
01209 ivTable.append("\n<p><img src="+imageName+">");
01210 }
01211
01212 return ivTable.toString();
01213
01214
01215 }
01216
01217
01218 public static String getHTMLModuleSummaryData(String ref) throws Exception {
01219
01220 fillHashes();
01221
01222 String location=null;
01223 String date=null;
01224 boolean isWarm=false;
01225 boolean isCold=false;
01226
01227 String[] info = ref.split("__");
01228 String sn = info[0];
01229 System.out.println("Downloading full sctdaq report for "+sn+". Be patient...");
01230 if(info.length==4) {
01231 location = info[1];
01232 date = info[2];
01233 isWarm = (info[3].equals("Warm"));
01234 isCold = (info[3].equals("Cold"));
01235 }
01236
01237 SCTDBInterface db = SCTDBInterface.getInstance();
01238 StringBuffer testnames = new StringBuffer(" AND (tests.test_name LIKE 'Hyb%' OR tests.test_name LIKE 'DetModIV')");
01239 if(location!=null && date!=null) testnames.append(" AND tests.locn_name='"+location+"' AND tests.test_date='"+date+"'");
01240 if(isWarm) testnames.append(" AND sct_tstdcsinfo.t0>10 AND sct_tstdcsinfo.test_no=tests.test_no");
01241 else if(isCold) testnames.append(" AND sct_tstdcsinfo.t0<=10 AND sct_tstdcsinfo.test_no=tests.test_no");
01242 else testnames.append(" AND sct_tstdcsinfo.test_no=tests.test_no");
01243 StringBuffer genTable = new StringBuffer("<h3>Test Data</h3>\n");
01244
01245 StringBuffer sqlStat = new StringBuffer("SELECT tests.test_no,defects.CHAN_1ST,defects.CHAN_LAST FROM tests,DEFECTS,sct_tstdcsinfo");
01246 sqlStat.append(" WHERE tests.test_no=defects.test_no AND tests.ser_no="+sn);
01247 sqlStat.append(testnames);
01248
01249
01250 Statement statement = db.connection.createStatement();
01251 if(DEBUG) System.out.println(sqlStat.toString());
01252 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01253
01254
01255 Hashtable defectsHash = new Hashtable();
01256 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01257 String thisTestNo = resultSet.getString(1);
01258 int n1 = Integer.parseInt(resultSet.getString(2));
01259 int n2 = Integer.parseInt(resultSet.getString(3));
01260 int ntotal=0;
01261 for(int i=n1;i<=n2;i++) ntotal++;
01262 if(defectsHash.containsKey(thisTestNo)) {
01263 String thisTotal = (String)defectsHash.get(thisTestNo);
01264 int ntot = Integer.parseInt(thisTotal);
01265 ntot+=ntotal;
01266 defectsHash.put(thisTestNo,(String)Integer.toString(ntot));
01267 }
01268 else defectsHash.put(thisTestNo,(String)Integer.toString(ntotal));
01269 }
01270 statement.close();
01271
01272 sqlStat = new StringBuffer("SELECT tests.test_no,tests.test_name,test_rawdata.filename FROM tests,test_rawdata,sct_tstdcsinfo");
01273 sqlStat.append(" WHERE tests.test_no=test_rawdata.test_no AND tests.ser_no="+sn);
01274 sqlStat.append(testnames);
01275
01276
01277 statement = db.connection.createStatement();
01278
01279 if(DEBUG) System.out.println(sqlStat.toString());
01280 resultSet = statement.executeQuery(sqlStat.toString());
01281
01282 Hashtable rawDataHash = new Hashtable();
01283 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01284 String thisTestNo = resultSet.getString(1);
01285 String testname = resultSet.getString(2);
01286 String thisFilename = resultSet.getString(3);
01287 String linkName = "Raw Data";
01288 if(testname.equals("Hyb3PGain") || testname.equals("HybRC")) linkName="RC";
01289 if(testname.equals("HybTrim")) linkName = "Trim/Mask";
01290 String link="Type"+guiUtilities.HTMLViewer.RAWDATA+"&ref="+thisTestNo;
01291 if(rawDataHash.containsKey(thisTestNo)) {
01292 String thisLink = (String)rawDataHash.get(thisTestNo);
01293 thisLink += "<br><a href="+link+">"+linkName+"</a>";
01294 rawDataHash.put(thisTestNo,thisLink);
01295 }
01296 else rawDataHash.put(thisTestNo,"<a href="+link+">"+linkName+"</a>");
01297 }
01298 statement.close();
01299
01300
01301 sqlStat = new StringBuffer("SELECT tests.test_no,tests.ser_no,web_links.web_link_desc,web_links.url FROM tests,web_links,sct_tstdcsinfo");
01302 sqlStat.append(" WHERE tests.test_no=web_links.test_no AND tests.ser_no="+sn);
01303 sqlStat.append(testnames);
01304
01305
01306 statement = db.connection.createStatement();
01307 if(DEBUG) System.out.println(sqlStat.toString());
01308 resultSet = statement.executeQuery(sqlStat.toString());
01309
01310 Hashtable webLinkHash = new Hashtable();
01311 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01312 String thisTestNo = resultSet.getString(1);
01313 String thisSN = resultSet.getString(2);
01314 String urlDescription = resultSet.getString(3);
01315 String thisURLlink = resultSet.getString(4);
01316 boolean isPostscript = (thisURLlink.endsWith(".ps") || thisURLlink.endsWith(".ps.gz"));
01317 if(thisURLlink.indexOf("http://hepunx.rl.ac.uk/atlassct/cgibin/getfile.pl?file=")!=-1) thisURLlink+="&module="+thisSN;
01318 if(isPostscript) thisURLlink= "Type"+guiUtilities.HTMLViewer.URLTOPOSTSCRIPT+"&ref="+thisURLlink;
01319 if(webLinkHash.containsKey(thisTestNo)) {
01320 String thisLink = (String)webLinkHash.get(thisTestNo);
01321 thisLink += "<br><a href="+thisURLlink+">"+urlDescription+"</a>";
01322 webLinkHash.put(thisTestNo,thisLink);
01323 }
01324 else webLinkHash.put(thisTestNo,"<a href="+thisURLlink+">"+urlDescription+"</a>");
01325 }
01326 statement.close();
01327
01328
01329 sqlStat = new StringBuffer("SELECT tests.test_no,tr_type");
01330 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"tr_ntrim");
01331 sqlStat.append(" FROM tests,sct_tsthybtrim,sct_tstdcsinfo");
01332 sqlStat.append(" WHERE tests.test_no=sct_tsthybtrim.test_no AND tests.ser_no="+sn);
01333 sqlStat.append(" AND tests.test_name LIKE 'HybTrim'");
01334 sqlStat.append(testnames);
01335
01336
01337 statement = db.connection.createStatement();
01338 if(DEBUG) System.out.println(sqlStat.toString());
01339 resultSet = statement.executeQuery(sqlStat.toString());
01340
01341 Hashtable trimRangeHash = new Hashtable();
01342 Hashtable commentsHash = new Hashtable();
01343 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01344 String thisTestNo = resultSet.getString(1);
01345 String theRange = resultSet.getString(2);
01346 trimRangeHash.put(thisTestNo,theRange);
01347 int nMasked=0;
01348 for(int i=0;i<chipDBnames.length;i++) {
01349 String ntrim = resultSet.getString(3+i);
01350 int itrim = Integer.parseInt(ntrim);
01351 nMasked += (128-itrim);
01352 }
01353 if(nMasked>0) commentsHash.put(thisTestNo,Integer.toString(nMasked)+" channels masked");
01354 }
01355 statement.close();
01356
01357
01358 sqlStat = new StringBuffer("SELECT tests.test_no");
01359 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"DELAY");
01360 sqlStat.append(" FROM tests,sct_tsthybdelay,sct_tstdcsinfo");
01361 sqlStat.append(" WHERE tests.test_no=sct_tsthybdelay.test_no AND tests.ser_no="+sn);
01362 sqlStat.append(" AND tests.test_name LIKE 'HybDelay'");
01363 sqlStat.append(testnames);
01364
01365
01366 statement = db.connection.createStatement();
01367 if(DEBUG) System.out.println(sqlStat.toString());
01368 resultSet = statement.executeQuery(sqlStat.toString());
01369
01370
01371 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01372 String thisTestNo = resultSet.getString(1);
01373 int strobeLow=1000;
01374 int strobeHigh=0;
01375 for(int i=0;i<chipDBnames.length;i++) {
01376 String nStrobe = resultSet.getString(2+i);
01377 int iStrobe = Integer.parseInt(nStrobe);
01378 if(iStrobe>strobeHigh) strobeHigh=iStrobe;
01379 if(iStrobe<strobeLow) strobeLow=iStrobe;
01380 }
01381 commentsHash.put(thisTestNo,"Delay from "+strobeLow+" to "+strobeHigh);
01382 }
01383 statement.close();
01384
01385
01386 sqlStat = new StringBuffer("SELECT tests.test_no");
01387 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"RC_MN_GAIN");
01388 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"RC_MN_ENC");
01389 sqlStat.append(" FROM tests,sct_tsthybrc,sct_tstdcsinfo");
01390 sqlStat.append(" WHERE tests.test_no=sct_tsthybrc.test_no AND tests.ser_no="+sn);
01391
01392 sqlStat.append(testnames);
01393
01394
01395 statement = db.connection.createStatement();
01396 if(DEBUG) System.out.println(sqlStat.toString());
01397 resultSet = statement.executeQuery(sqlStat.toString());
01398
01399
01400 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01401 String thisTestNo = resultSet.getString(1);
01402 double gainLow=1000.;
01403 double gainHigh=0.;
01404 int ENCLow=99000;
01405 int ENCHigh=0;
01406 for(int i=0;i<chipDBnames.length;i++) {
01407 double iGain = Double.valueOf( resultSet.getString(2+i) ).doubleValue();
01408 if(iGain>gainHigh) gainHigh = iGain;
01409 if(iGain<gainLow) gainLow=iGain;
01410 }
01411 for(int i=0;i<chipDBnames.length;i++) {
01412 int iNoise = Integer.valueOf( resultSet.getString(14+i) ).intValue();
01413 if(iNoise>ENCHigh) ENCHigh=iNoise;
01414 if(iNoise<ENCLow) ENCLow=iNoise;
01415 }
01416 commentsHash.put(thisTestNo,"Gain from "+gainLow+" to "+gainHigh+"mV/fC<br>Noise from "+ENCLow+" to "+ENCHigh+" ENC");
01417 }
01418 statement.close();
01419
01420
01421 sqlStat = new StringBuffer("SELECT tests.test_no");
01422 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"NO_MN_OCC");
01423 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"NO_NSE");
01424 sqlStat.append(" FROM tests,sct_tsthybnoise,sct_tstdcsinfo");
01425 sqlStat.append(" WHERE tests.test_no=sct_tsthybnoise.test_no AND tests.ser_no="+sn);
01426 sqlStat.append(" AND tests.test_name LIKE 'HybNoise'");
01427 sqlStat.append(testnames);
01428
01429
01430 statement = db.connection.createStatement();
01431 if(DEBUG) System.out.println(sqlStat.toString());
01432 resultSet = statement.executeQuery(sqlStat.toString());
01433
01434
01435 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01436 String thisTestNo = resultSet.getString(1);
01437 double occLow=1000.;
01438 double occHigh=0.;
01439 int ENCLow=99000;
01440 int ENCHigh=0;
01441 for(int i=0;i<chipDBnames.length;i++) {
01442 double iOcc = Double.valueOf( resultSet.getString(2+i) ).doubleValue();
01443 if(iOcc>occHigh) occHigh = iOcc;
01444 if(iOcc<occLow) occLow=iOcc;
01445 }
01446 for(int i=0;i<chipDBnames.length;i++) {
01447 int iNoise = Integer.valueOf( resultSet.getString(14+i) ).intValue();
01448 if(iNoise>ENCHigh) ENCHigh=iNoise;
01449 if(iNoise<ENCLow) ENCLow=iNoise;
01450 }
01451 DecimalFormat myFormatter = new DecimalFormat("0.##E0");
01452 String theOccLow = myFormatter.format(occLow);
01453 String theOccHigh = myFormatter.format(occHigh);
01454 commentsHash.put(thisTestNo,"Occupancy at 1fC from "+theOccLow+" to "+theOccHigh+"<brEstimated ENC from "+ENCLow+" to "+ENCHigh+" ENC");
01455 }
01456 statement.close();
01457
01458
01459 sqlStat = new StringBuffer("SELECT tests.test_no");
01460 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"TW");
01461 sqlStat.append(" FROM tests,sct_tsthybTW,sct_tstdcsinfo");
01462 sqlStat.append(" WHERE tests.test_no=sct_tsthybtw.test_no AND tests.ser_no="+sn);
01463
01464 sqlStat.append(testnames);
01465
01466
01467 statement = db.connection.createStatement();
01468 if(DEBUG) System.out.println(sqlStat.toString());
01469 resultSet = statement.executeQuery(sqlStat.toString());
01470
01471 int ntw=0;
01472 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01473 String thisTestNo = resultSet.getString(1);
01474 double iTLow=1000;
01475 double iTHigh=0;
01476 ntw++;
01477 for(int i=0;i<chipDBnames.length;i++) {
01478 double iTW = Double.valueOf( resultSet.getString(2+i) ).doubleValue();
01479 if(iTW>iTHigh) iTHigh=iTW;
01480 if(iTW<iTLow) iTLow=iTW;
01481 }
01482 commentsHash.put(thisTestNo,"Timewalk from "+iTLow+" to "+iTHigh+" ns");
01483 }
01484 statement.close();
01485
01486
01487 System.out.println("Retrieved all data, now compiling list...");
01488 sqlStat = new StringBuffer("SELECT tests.test_no,tests.test_name,tests.test_date,tests.locn_name,tests.pass,tests.problem,sct_tstdcsinfo.t0,sct_tstdcsinfo.t1");
01489 sqlStat.append(" FROM tests,sct_tstdcsinfo WHERE tests.test_no=sct_tstdcsinfo.test_no AND tests.ser_no="+sn);
01490 sqlStat.append(testnames);
01491 sqlStat.append(" ORDER BY tests.test_date,tests.test_no");
01492
01493 statement = db.connection.createStatement();
01494
01495 resultSet = statement.executeQuery(sqlStat.toString());
01496 int nCount=0;
01497
01498 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01499 if(nCount==0) {
01500 genTable.append("<table cellspacing=5 border=1>\n");
01501 for(int i=0;i<10;i++) genTable.append("<col width=*>\n");
01502 genTable.append("<tr><td valign=top align=left><b>Test</b></td><td valign=top align=left><b>Date</b></td><td valign=top align=left><b>Location</b></td><td valign=top align=left><b>Status</b></td><td valign=top align=left><b>T0</b></td><td valign=top align=left><b>T1</b></td><td valign=top align=left><b>Comments</b></td><td valign=top align=left><b>Summary</b></td><td valign=top align=left><b>Raw Data</b></td><td valign=top align=left><b>Plots</b></td></tr>\n");
01503 }
01504 String thisTestNo = resultSet.getString(1);
01505 String thisTestName = resultSet.getString(2);
01506 String colTestName = sctdaqTestNameHash.containsKey(thisTestName) ? (String)sctdaqTestNameHash.get(thisTestName) : thisTestName;
01507 if(trimRangeHash.containsKey(thisTestNo)) {
01508 colTestName += "Range "+(String)trimRangeHash.get(thisTestNo);
01509 }
01510 String thisDate = guiUtilities.DaveUtils.extractDate(resultSet.getString(3));
01511 String thisLocation = resultSet.getString(4);
01512 String passFlag = resultSet.getString(5);
01513 String problemFlag = resultSet.getString(6);
01514 String statusFlag="<font color=red>FAIL</font>";
01515 if(passFlag.equals("YES")) {
01516 statusFlag = problemFlag.equals("YES") ? "Problem" : "<font color=green>Pass</font>";
01517 }
01518 String t0 = resultSet.getString(7);
01519 String t1 = resultSet.getString(8);
01520 String comments = "";
01521
01522 if(commentsHash.containsKey(thisTestNo)) {
01523 if(!comments.equals("")) comments += "<br>";
01524 comments += (String)commentsHash.get(thisTestNo);
01525 }
01526 if(defectsHash.containsKey(thisTestNo)) {
01527 if(!comments.equals("")) comments += "<br>";
01528 comments += "<b>"+(String)defectsHash.get(thisTestNo)+" defect(s)</b>";
01529 }
01530 else {
01531 if(!comments.equals("")) comments += "<br>";
01532 comments += "No defects";
01533 }
01534 int testType=-1;
01535 if(sctdaqTestNumberHash.containsKey(thisTestName)) testType = ((Integer)sctdaqTestNumberHash.get(thisTestName)).intValue();
01536
01537 String linkTestName = (colTestName.indexOf("TrimRange")!=-1) ? "TrimRange" : colTestName;
01538 String reports = (testType==-1) ? "" : "<a href=\"Type"+guiUtilities.HTMLViewer.SCTDAQTESTDATA+"&ref="+thisTestNo+"__"+Integer.toString(testType)+"\">Test Report</a>";
01539 if(!sctdaqTestNameHash.containsKey(thisTestName)) reports="";
01540
01541 String rawData = rawDataHash.containsKey(thisTestNo) ? (String)rawDataHash.get(thisTestNo) : "";
01542 String plots = webLinkHash.containsKey(thisTestNo) ? (String)webLinkHash.get(thisTestNo) : "";
01543 genTable.append("<tr><td valign=top align=left>"+colTestName+"</td><td valign=top align=left>"+thisDate+"</td><td valign=top align=left>"+thisLocation+"</td>");
01544 genTable.append("<td valign=top align=left>"+statusFlag+"</td><td valign=top align=left>"+t0+"</td><td valign=top align=left>"+t1+"</td><td valign=top align=left>"+comments+"</td>");
01545 genTable.append("<td valign=top align=left>"+reports+"</td><td valign=top align=left>"+rawData+"</td><td valign=top align=left>"+plots+"</td></tr>\n");
01546
01547 nCount++;
01548 }
01549 statement.close();
01550 if(nCount==0) {genTable.append("<p>No tests found for "+sn+"\n"); return genTable.toString();}
01551 else genTable.append("</table>\n");
01552
01553
01554 genTable.append("<p><font face=Arial color=NAVY size=+1>Defects</font>\n");
01555 sqlStat = new StringBuffer("SELECT tests.test_no,tests.test_name,tests.test_date,tests.locn_name,CHAN_1ST,CHAN_LAST,DEFECT_NAME FROM DEFECTS,tests,sct_tstdcsinfo WHERE tests.test_no=defects.test_no");
01556 sqlStat.append(" AND tests.ser_no="+sn);
01557 sqlStat.append(testnames);
01558 sqlStat.append(" ORDER by defects.chan_1st,tests.test_date,tests.test_no");
01559
01560
01561 statement = db.connection.createStatement();
01562 if(DEBUG) System.out.println(sqlStat.toString());
01563 resultSet = statement.executeQuery(sqlStat.toString());
01564
01565
01566 int ntotal=0;
01567 nCount=0;
01568 int nMaxConChannels=0;
01569 int nMaxConNonTrimChannels=0;
01570 Hashtable nonTrimDefectHash = new Hashtable();
01571 Hashtable trimDefectHash = new Hashtable();
01572 Hashtable channelHash = new Hashtable();
01573 Vector nonTrimDefectList = new Vector();
01574 Vector trimDefectList = new Vector();
01575 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01576 String thisTestNo = resultSet.getString(1);
01577 String thisTestName = resultSet.getString(2);
01578 thisTestName = sctdaqTestNameHash.containsKey(thisTestName) ? (String)sctdaqTestNameHash.get(thisTestName) : thisTestName;
01579 if(trimRangeHash.containsKey(thisTestNo)) {
01580 thisTestName += "Range "+(String)trimRangeHash.get(thisTestNo);
01581 }
01582 boolean isTrimTest = (thisTestName.indexOf("Trim")!=-1);
01583 String testDate = guiUtilities.DaveUtils.extractDate(resultSet.getString(3));
01584 String locn = resultSet.getString(4);
01585 String chan1 = resultSet.getString(5);
01586 String chan2 = resultSet.getString(6);
01587 int n1 = Integer.parseInt(chan1);
01588 int n2 = Integer.parseInt(resultSet.getString(6));
01589 String defectname = resultSet.getString(7);
01590
01591 int iDiff = n2-n1;
01592 String defectChannel = (iDiff>0) ? chan1+"-"+chan2 : chan1;
01593 String thisDefectInfo = defectname+" ("+thisTestName+" at "+locn+" on "+testDate+")";
01594
01595 for(int i=n1;i<=n2;i++) {
01596 String thisChannel = Integer.toString(i);
01597 if(!channelHash.containsKey(thisChannel)) {
01598 int status= (isTrimTest) ? 1 : 2;
01599 channelHash.put(thisChannel, new Integer(status));
01600 }
01601 else {
01602 Integer theStatus = (Integer)channelHash.get(thisChannel);
01603 int status = theStatus.intValue();
01604 if(isTrimTest) status |=1;
01605 else status |= 2;
01606 channelHash.put(thisChannel,new Integer(status));
01607 }
01608 }
01609 if(iDiff>0) {
01610 iDiff++;
01611 nMaxConChannels = iDiff>nMaxConChannels ? iDiff : nMaxConChannels;
01612 nMaxConNonTrimChannels = (iDiff>nMaxConNonTrimChannels && !isTrimTest) ? iDiff : nMaxConNonTrimChannels;
01613 }
01614
01615
01616 if(thisTestName.indexOf("Trim")==-1) {
01617 if(nonTrimDefectHash.containsKey(defectChannel)) {
01618 Vector thisDefectVector = (Vector)nonTrimDefectHash.get(defectChannel);
01619 if(!thisDefectVector.contains((String)thisDefectInfo)) thisDefectVector.addElement(thisDefectInfo);
01620 nonTrimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01621 }
01622 else {
01623 nonTrimDefectList.addElement(defectChannel);
01624 Vector thisDefectVector = new Vector();
01625 thisDefectVector.addElement(thisDefectInfo);
01626 nonTrimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01627 }
01628 }
01629
01630 else {
01631 if(trimDefectHash.containsKey(defectChannel)) {
01632 Vector thisDefectVector = (Vector)trimDefectHash.get(defectChannel);
01633 if(!thisDefectVector.contains((String)thisDefectInfo)) thisDefectVector.addElement(thisDefectInfo);
01634 trimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01635 }
01636 else {
01637 trimDefectList.addElement(defectChannel);
01638 Vector thisDefectVector = new Vector();
01639 thisDefectVector.addElement(thisDefectInfo);
01640 trimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01641 }
01642 }
01643 }
01644 statement.close();
01645
01646
01647
01648 int nDefectCount=0;
01649 int nTrimDefectCount=0;
01650 int nNonTrimDefectCount=0;
01651 int nBothCount=0;
01652
01653 for (Enumeration e = channelHash.elements() ; e.hasMoreElements() ;) {
01654 Integer theStatus = (Integer)e.nextElement();
01655 int status = theStatus.intValue();
01656 if(status>0) nDefectCount++;
01657 if((status & 1)>0) nTrimDefectCount++;
01658 if((status & 2)>0) nNonTrimDefectCount++;
01659 if((status & 3)==3) nBothCount++;
01660 }
01661 genTable.append("<br><br><b>Statistics</b>\n");
01662
01663 genTable.append("<br><table cellspacing=5 border=1>\n");
01664 genTable.append("<col width=*><col width=*>\n");
01665 genTable.append("<tr><td align=left>Channels with any defect(s)</td><td align=left>"+nDefectCount+"</td></tr>\n");
01666 genTable.append("<tr><td align=left>Channels with non-trim defect(s)</td><td align=left>"+nNonTrimDefectCount+"</td></tr>\n");
01667 genTable.append("<tr><td align=left>Channels with trim defect(s)</td><td align=left>"+nTrimDefectCount+"</td></tr>\n");
01668 genTable.append("<tr><td align=left>Channels with non-trim and trim defect(s)</td><td align=left>"+nBothCount+"</td></tr>\n");
01669 genTable.append("<tr><td align=left>Max consecutive bad channels (non-trim defects only)</td><td align=left>"+nMaxConNonTrimChannels+"</td></tr>\n");
01670 genTable.append("<tr><td align=left>Max consecutive bad channels (any defect)</td><td align=left>"+nMaxConChannels+"</td></tr>\n");
01671 genTable.append("</table>");
01672
01673 genTable.append("<br>");
01674 genTable.append("<br><b>Non-Trim Defects</b>");
01675 if(nonTrimDefectList.size()==0) genTable.append("<br>No defective channels");
01676 else {
01677 genTable.append("<table cellspacing=5 border=1>\n");
01678 genTable.append("<col width=*><col width=*>\n");
01679 genTable.append("<tr><td align=left><b>Channel(s)</b></td><td align=left><b>Non-Trim Defects</b></td></tr>");
01680 for(int i=0;i<nonTrimDefectList.size();i++) {
01681 String thisChan = (String)nonTrimDefectList.elementAt(i);
01682 Vector theList = (Vector)nonTrimDefectHash.get(thisChan);
01683 genTable.append("<tr><td align=left>"+thisChan+"</td><td align=left>");
01684 for(int j=0;j<theList.size();j++) {
01685 if(j>0) genTable.append("<br>");
01686 genTable.append((String)theList.elementAt(j));
01687 }
01688 genTable.append("</td></tr>");
01689 }
01690 genTable.append("</table>");
01691 }
01692
01693 genTable.append("<br>");
01694 genTable.append("<br><b>Trim Defects</b>");
01695 if(trimDefectList.size()==0) genTable.append("<br>No defective channels");
01696 else {
01697 genTable.append("<table cellspacing=5 border=1>\n");
01698 genTable.append("<col width=*><col width=*>\n");
01699 genTable.append("<tr><td align=left><b>Channel(s)</b></td><td align=left><b>Trim Defects</b></td></tr>");
01700 for(int i=0;i<trimDefectList.size();i++) {
01701 String thisChan = (String)trimDefectList.elementAt(i);
01702 Vector theList = (Vector)trimDefectHash.get(thisChan);
01703 genTable.append("<tr><td align=left>"+thisChan+"</td><td align=left>");
01704 for(int j=0;j<theList.size();j++) {
01705 if(j>0) genTable.append("<br>");
01706 genTable.append((String)theList.elementAt(j));
01707 }
01708 genTable.append("</td></tr>");
01709 }
01710 genTable.append("</table><br>");
01711 }
01712
01713 return genTable.toString();
01714 }
01715
01716
01717 public static String createVisualTestTable(String serno, String itemType) throws Exception {
01718 Hashtable testnoHash = new Hashtable();
01719 Vector testnoList = new Vector();
01720 Vector itemList = new Vector();
01721 Vector theLine = new Vector();
01722 String testnoKey = "TESTNO";
01723 String snKey = "SERIALNO";
01724 String dateKey = "DATE";
01725 String locationKey = "LOCN";
01726 String flagKey = "FLAG";
01727
01728 StringBuffer genTable = new StringBuffer("<h3>Visual Inspections of "+itemType+"</h3>");
01729
01730 SCTDBInterface db = SCTDBInterface.getInstance();
01731 Statement statement = db.connection.createStatement();
01732 StringBuffer sqlStat = new StringBuffer("SELECT ");
01733 sqlStat.append("tests.test_no,tests.ser_no,tests.test_date,tests.locn_name,tests.problem,tests.pass");
01734 sqlStat.append(" FROM tests");
01735 sqlStat.append(" WHERE tests.ser_no = "+serno);
01736 sqlStat.append(" AND tests.test_name='Visual_Inspection'");
01737 sqlStat.append(" ORDER BY tests.test_date, tests.test_no");
01738
01739
01740 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01741 int recordCount=0;
01742 Vector testNumberList = new Vector();
01743 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01744 Hashtable thisHash = new Hashtable();
01745 recordCount++;
01746
01747 String testno = resultSet.getString(1);
01748 thisHash.put(snKey,resultSet.getString(2));
01749 String date = resultSet.getString(3);
01750 thisHash.put(dateKey,guiUtilities.DaveUtils.extractDate(date));
01751 thisHash.put(locationKey,resultSet.getString(4));
01752 String problemFlag = resultSet.getString(5);
01753 String passFlag = resultSet.getString(6);
01754 String statusFlag;
01755 if(passFlag.equals("YES")) {
01756 statusFlag = (problemFlag.equals("YES")) ? "PROBLEM" : "Ok";
01757 }
01758 else statusFlag = "FAIL";
01759 thisHash.put(flagKey,statusFlag);
01760 testnoHash.put(testno,thisHash);
01761 testnoList.addElement(testno);
01762
01763 }
01764
01765 statement.close();
01766 if(recordCount==0) {
01767 genTable.append("None uploaded");
01768 return genTable.toString();
01769 }
01770
01771
01772 String subQuery = sqlStat.toString();
01773 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("ORDER")-1);
01774 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
01775 Hashtable testImagesHash = GeneralUtilities.testImages(subQuery);
01776
01777 genTable.append("<table border=1>\n");
01778 genTable.append("<tr><td>Date</td><td>Location</td><td>Status</td><td>Comments</td><td>Images</td></tr>\n");
01779
01780 for(int i=0;i<testnoList.size();i++) {
01781 genTable.append("<tr>");
01782 String testno = (String)testnoList.elementAt(i);
01783 Hashtable tempHash = (Hashtable)testnoHash.get(testno);
01784
01785 genTable.append("<td>"+tempHash.get(dateKey)+"</td>");
01786 genTable.append("<td>"+tempHash.get(locationKey)+"</td>");
01787 genTable.append("<td>"+tempHash.get(flagKey)+"</td>");
01788 if(commentsHash.containsKey(testno)) genTable.append("<td>"+commentsHash.get(testno)+"</td>");
01789 else genTable.append("<td>None</td>");
01790
01791 String ImageTitle = "Visual Inspection of "+serno+" at "+tempHash.get(locationKey)+" on "+tempHash.get(dateKey);
01792 if(testImagesHash.containsKey(testno)) {
01793 Vector imageList = (Vector)testImagesHash.get(testno);
01794 genTable.append("<td>");
01795 for(int j=0;j<imageList.size(); j++) {
01796 if(j%2 !=0) continue;
01797 if(j>0) genTable.append("<br>");
01798 genTable.append("<a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.SCTDBIMAGE)+"&ref="+testno+ImageTitle+"\">"+(String)imageList.elementAt(j)+"</a>");
01799
01800 }
01801 genTable.append("</td>");
01802 }
01803 else genTable.append("<td></td>");
01804 genTable.append("</tr>\n");
01805 }
01806 genTable.append("</table>");
01807 return genTable.toString();
01808
01809
01810 }
01811
01812 public static String createModuleEvaluationTable(String serno) throws Exception {
01813 Hashtable testnoHash = new Hashtable();
01814 Vector testnoList = new Vector();
01815 Vector itemList = new Vector();
01816 Vector theLine = new Vector();
01817 String testnoKey = "TESTNO";
01818 String snKey = "SERIALNO";
01819 String dateKey = "DATE";
01820 String locationKey = "LOCN";
01821 String passKey = "PASS";
01822 String problemKey = "PROBLEM";
01823
01824 StringBuffer genTable = new StringBuffer("<h3>Module Evaluation Data</h3>");
01825
01826 SCTDBInterface db = SCTDBInterface.getInstance();
01827 Statement statement = db.connection.createStatement();
01828 StringBuffer sqlStat = new StringBuffer("SELECT ");
01829 sqlStat.append("tests.test_no,tests.ser_no,tests.test_date,tests.locn_name,tests.problem,tests.pass");
01830 sqlStat.append(" FROM tests");
01831 sqlStat.append(" WHERE tests.ser_no = "+serno);
01832 sqlStat.append(" AND tests.test_name='ModEvaluation'");
01833 sqlStat.append(" ORDER BY tests.test_date, tests.test_no");
01834
01835
01836 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01837 int recordCount=0;
01838 Vector testNumberList = new Vector();
01839 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01840 Hashtable thisHash = new Hashtable();
01841 recordCount++;
01842
01843 String testno = resultSet.getString(1);
01844 thisHash.put(snKey,resultSet.getString(2));
01845 String date = resultSet.getString(3);
01846 thisHash.put(dateKey,guiUtilities.DaveUtils.extractDate(date));
01847 thisHash.put(locationKey,resultSet.getString(4));
01848 thisHash.put(problemKey,resultSet.getString(5));
01849 thisHash.put(passKey,resultSet.getString(6));
01850 testnoHash.put(testno,thisHash);
01851 testnoList.addElement(testno);
01852
01853 }
01854
01855 statement.close();
01856 if(recordCount==0) {
01857 genTable.append("None uploaded");
01858 return genTable.toString();
01859 }
01860
01861
01862 String subQuery = sqlStat.toString();
01863 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("ORDER")-1);
01864 Hashtable commentsHash = GeneralUtilities.testComments(subQuery,true);
01865 Hashtable testImagesHash = GeneralUtilities.testImages(subQuery);
01866
01867 genTable.append("<table border=1>\n");
01868 genTable.append("<tr><td>Date</td><td>Location</td><td>Pass</td><td>Problem</td><td>Comments</td><td>Images</td></tr>\n");
01869
01870 for(int i=0;i<testnoList.size();i++) {
01871 genTable.append("<tr>");
01872 String testno = (String)testnoList.elementAt(i);
01873 Hashtable tempHash = (Hashtable)testnoHash.get(testno);
01874
01875 genTable.append("<td>"+tempHash.get(dateKey)+"</td>");
01876 genTable.append("<td>"+tempHash.get(locationKey)+"</td>");
01877 genTable.append("<td>"+tempHash.get(passKey)+"</td>");
01878 genTable.append("<td>"+tempHash.get(problemKey)+"</td>");
01879 if(commentsHash.containsKey(testno)) genTable.append("<td>"+commentsHash.get(testno)+"</td>");
01880 else genTable.append("<td>None</td>");
01881
01882 String ImageTitle = "Visual Inspection of "+serno+" at "+tempHash.get(locationKey)+" on "+tempHash.get(dateKey);
01883 if(testImagesHash.containsKey(testno)) {
01884 Vector imageList = (Vector)testImagesHash.get(testno);
01885 genTable.append("<td>");
01886 for(int j=0;j<imageList.size(); j++) {
01887 if(j%2 !=0) continue;
01888 if(j>0) genTable.append("<br>");
01889 genTable.append("<a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.SCTDBIMAGE)+"&ref="+testno+ImageTitle+"\">"+(String)imageList.elementAt(j)+"</a>");
01890
01891 }
01892 genTable.append("</td>");
01893 }
01894 else genTable.append("<td></td>");
01895 genTable.append("</tr>\n");
01896 }
01897 genTable.append("</table>");
01898 return genTable.toString();
01899
01900
01901 }
01902
01903
01904 public static String createASICReWorkTable(String hybridSerialNo) throws Exception {
01905
01906 StringBuffer genTable = new StringBuffer("<h3>ASIC Replacements</h3>\n");
01907 StringBuffer sqlStat = new StringBuffer("SELECT ser_no,locn_name,disassm_date,posn FROM DISASSMLOGS where ASSM_SER_NO='"+hybridSerialNo+"'");
01908 sqlStat.append(" AND ser_no NOT IN (SELECT ser_no FROM ASSM_ITEMS where assm_ser_no="+hybridSerialNo+")");
01909 sqlStat.append(" ORDER BY DISASSM_DATE");
01910
01911
01912 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
01913 if(DEBUG) System.out.println(sqlStat.toString());
01914 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01915 int recordCount=0;
01916
01917
01918 int ntotal=0;
01919 int nCount=0;
01920 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01921 if(nCount==0) {
01922 genTable.append("<table cellspacing=5 border=1>\n");
01923 for(int i=0;i<4;i++) genTable.append("<col width=*>\n");
01924 genTable.append("<tr><td valign=top align=left><b>Serial No</b></td><td valign=top align=left><b>Location</b></td><td valign=top align=left><b>Date</b></td><td valign=top align=left><b>Position</b></td></tr>\n");
01925 }
01926 nCount++;
01927 genTable.append("<tr><td>"+resultSet.getString(1)+"</td><td>"+resultSet.getString(2)+"</td><td>"+guiUtilities.DaveUtils.extractDate(resultSet.getString(3))+"</td><td>"+resultSet.getString(4)+"</td></tr>\n");
01928 }
01929 statement.close();
01930 if(nCount==0) genTable.append("None uploaded.\n");
01931 else genTable.append("</table>\n");
01932 return genTable.toString();
01933 }
01934
01935
01936
01937 }