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 SignoffDataInterface signoffInfo=null;
00432 if(moduleInfo.isBarrelModule()) {
00433 signoffInfo = new SignoffDataInterface(serno,"FINALSIGNOFF");
00434 html.append("<h3>Module Signoff Information</h3>");
00435 Hashtable signoffDataHash = signoffInfo.getSignoffDataHash();
00436 if(signoffDataHash.size()==0) html.append("None uploaded");
00437 else {
00438 html.append("<table border=1>");
00439 int count=1;
00440 for (java.util.Enumeration e = signoffDataHash.keys() ; e.hasMoreElements() ;) {
00441 String location = (String)e.nextElement();
00442 html.append("<tr><td colspan=2><font color=navy>"+Integer.toString(count)+" - "+signoffInfo.getUploaderInfo(location)+"</font></td></tr>");
00443 html.append("<tr><td align=right><font color=navy>Overall category:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.CATEGORY,true)+"</td></tr>");
00444 if(signoffInfo.getString(location,ModuleSignoffData.CATEGORY,true).matches("FAIL|Fail")) {
00445 html.append("<tr><td align=right><font color=navy>Reason for FAIL:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.FAILREASON,true)+"</td></tr>");
00446 }
00447 html.append("<tr><td align=right><font color=navy>Barrel Asignment:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.BARREL,true)+"</td></tr>");
00448 if(signoffInfo.getString(location,ModuleSignoffData.BARREL,true).matches("[56]+")) {
00449 html.append("<tr><td align=right>Reason for B5/6:</td><td>"+signoffInfo.getString(location,ModuleSignoffData.B56REASON,true)+"</td></tr>");
00450 }
00451 html.append("<tr><td align=right><font color=navy>Comment:</font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.COMMENT,true)+"</td></tr>");
00452 count++;
00453 }
00454 html.append("</table>");
00455 }
00456 if(!signoffInfo.qualityInfoIsPresent()) signoffInfo = new SignoffDataInterface(serno,"SIGNOFF");
00457 }
00458
00459 html.append("<h3>Assembly Information</h3>");
00460 html.append("<table border=1>");
00461 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");
00462 for(int i=0;i<moduleParts.length;i++) {
00463 if(moduleInfo.isForwardModule() && (i==SCTDBInfo.bmBB || i==SCTDBInfo.bmSB || i==SCTDBInfo.bmHPC)) continue;
00464 String sn = moduleInfo.getSerialNo(i);
00465 String testInfo = "n/a";
00466 if(moduleInfo.isBarrelModule()) {
00467 testInfo = moduleInfo.getDataSheetTestNo(i);
00468 if(testInfo==null) testInfo="Datasheet not available";
00469 else testInfo = "<a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.DATASHEET)+"&ref="+testInfo+"\">Datasheet</a>";
00470 }
00471 html.append("<tr><td>"+moduleParts[i]+"</td><td>"+sn+"</td><td>n/a</td><td colspan=2>"+testInfo+"</td></tr>\n");
00472 }
00473 Vector sensorList = moduleInfo.getSensorList();
00474 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");
00475 else {
00476 for(int i=0;i<sensorList.size();i++) {
00477 Hashtable tempHash = (Hashtable)sensorList.elementAt(i);
00478 String thisSN=(String)tempHash.get("SERIALNO");
00479 String posn = (String)tempHash.get("POSITION");
00480 String type = "Sensor";
00481 if(moduleInfo.isForwardModule()) {
00482 if(thisSN.matches("\\d{7}03\\d{5}")) type="W12 Sensor";
00483 else if(thisSN.matches("\\d{7}04\\d{5}")) type="W21 Sensor";
00484 else if(thisSN.matches("\\d{7}05\\d{5}")) type="W22 Sensor";
00485 else if(thisSN.matches("\\d{7}06\\d{5}")) type="W31 Sensor";
00486 else if(thisSN.matches("\\d{7}07\\d{5}")) type="W32 Sensor";
00487 }
00488 String link = "<a href=Type"+Integer.toString(guiUtilities.HTMLViewer.SENSORTESTDATA)+"&ref="+thisSN+">All Test Data</a>";
00489 html.append("<tr><td>"+type+"</td><td>"+thisSN+"</td><td>"+posn+"</td><td colspan=2>"+link+"</td></tr>\n");
00490 }
00491 }
00492 Vector asicList = moduleInfo.getAsicList();
00493 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");
00494 else {
00495 for(int i=0;i<asicList.size();i++) {
00496 String thisASIC = (String)asicList.elementAt(i);
00497 String thisASICInfo = moduleInfo.getASICInfo(thisASIC);
00498 String thisASICcorrFactor = moduleInfo.getASICcorrFactor(thisASIC);
00499 html.append("<tr><td>ASIC</td><td>"+thisASIC+"</td><td>"+Integer.toString(i+1)+"</td><td>"+thisASICInfo+"</td><td>cFactor "+thisASICcorrFactor+"</td></tr>\n");
00500 }
00501 }
00502 html.append("</table>");
00503
00504 try {
00505 String hsn = moduleInfo.getHybridSerialNo();
00506 if(hsn!=null) html.append(createASICReWorkTable(hsn));
00507 }catch(Exception e0){System.err.println("Error retrieving dissam logs: "+e0.toString());}
00508
00509 try {
00510 html.append(createVisualTestTable(serno,"Module"));
00511 html.append(createVisualTestTable(moduleInfo.getHybridSerialNo(),"Hybrid"));
00512 }catch(Exception e){System.err.println("Error downloading visual inspection info: "+e.toString());}
00513
00514 System.out.println("Still working...");
00515
00516 html.append("<h3>Metrology Data</h3>");
00517 if(moduleInfo.noMetrologyTests()==0) html.append("No data uploaded.");
00518 else {
00519 html.append("<table border=1>");
00520 html.append("<tr><td>Type</td><td>Event</td><td>Status</td><td>Location</td><td>Date</td><td>Data</td></tr>\n");
00521 for(int i=0;i<moduleInfo.noMetrologyTests();i++) {
00522 MetrologyTest met = moduleInfo.getMetrologyTest(i);
00523 int linkType = (met.getType().equals("XY")) ? guiUtilities.HTMLViewer.XYMETDATA : guiUtilities.HTMLViewer.ZMETDATA;
00524 String link = "<a href=Type"+Integer.toString(linkType)+"&ref="+met.getTestNo()+"\">Datasheet</a>";
00525 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>");
00526 }
00527 html.append("</table>");
00528 }
00529
00530 html.append("<h3>IV Data</h3>");
00531 html.append("<table border=1>");
00532 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");
00533 ModuleIVInfo ivInfo = new ModuleIVInfo(serno,sensorList);
00534 html.append("<tr><td>Sensor Sum</td><td>"+ivInfo.getOrigin()+"</td><td> - </td>");
00535 double i150sensor = ivInfo.geti150SensorCurrent();
00536 double i350sensor = ivInfo.geti350SensorCurrent();
00537 double i500sensor = ivInfo.geti500SensorCurrent();
00538 html.append("<td>"+ivFormatter.format(i150sensor)+"</td><td>"+ivFormatter.format(i350sensor)+"</td><td>"+ivFormatter.format(i500sensor)+"</td><td>"+ivInfo.getTemperatureRange()+"</td><td> - </td></tr>");
00539 for(int i=0;i<ivInfo.noModuleIVs();i++) {
00540 ModuleIV mIV = ivInfo.getModuleIV(i);
00541 html.append("<tr><td>Module</td><td>"+mIV.getLocation()+"</td><td>"+mIV.getDate()+"</td>");
00542 double i150 = mIV.geti150();
00543 if(i150==0.) html.append("<td> - </td>");
00544 else {
00545 if(i150sensor>0. && i150>(i150sensor*1.25)) html.append("<td><font color=red>"+ivFormatter.format(i150)+"</td>");
00546 else html.append("<td>"+ivFormatter.format(i150)+"</td>");
00547 }
00548 double i350 = mIV.geti350();
00549 if(i350==0.) html.append("<td> - </td>");
00550 else {
00551 if(i350sensor>0. && i350>(i350sensor*1.25)) html.append("<td><font color=red>"+ivFormatter.format(i350)+"</td>");
00552 else html.append("<td>"+ivFormatter.format(i350)+"</td>");
00553 }
00554 double i500 = mIV.geti500();
00555 if(i500==0.) html.append("<td> - </td>");
00556 else {
00557 if(i500sensor>0. && i500>(i500sensor*1.25)) html.append("<td><font color=red>"+ivFormatter.format(i500)+"</font></td>");
00558 else html.append("<td>"+ivFormatter.format(i500)+"</td>");
00559 }
00560 html.append("<td>"+mIV.getTemperature()+"</td>");
00561 String plotLink = mIV.getLink();
00562 if(plotLink==null) html.append("<td> - </td>");
00563 else {
00564 boolean isPostscript = (plotLink.endsWith(".ps") || plotLink.endsWith(".ps.gz"));
00565 String link = isPostscript ? "Type"+Integer.toString(guiUtilities.HTMLViewer.URLTOPOSTSCRIPT)+"&ref="+plotLink : plotLink;
00566 html.append("<td><a href=\""+link+"\">Plot</a></td>");
00567 }
00568 html.append("</tr>");
00569 }
00570 html.append("</table>");
00571
00572 if(moduleInfo.isBarrelModule()) {
00573 if(signoffInfo!=null) {
00574 html.append("<h3>IV Quality Information</h3>");
00575 Hashtable signoffDataHash = signoffInfo.getSignoffDataHash();
00576 if(signoffDataHash.size()==0) html.append("<p>None uploaded");
00577 else {
00578 html.append("<table border=1>");
00579 int count=1;
00580 for (java.util.Enumeration e = signoffDataHash.keys() ; e.hasMoreElements() ;) {
00581 String location = (String)e.nextElement();
00582 html.append("<tr><td colspan=2><font color=navy>"+Integer.toString(count)+" - "+signoffInfo.getUploaderInfo(location)+"</font></td></tr>");
00583 html.append("<tr><td align=right valign=top><font color=navy>Category: </font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.IVCATEGORY,true)+"</td></tr>");
00584 html.append("<tr><td align=right valign=top><font color=navy>Comments: </font></td><td>"+signoffInfo.getString(location,ModuleSignoffData.IVCOMMENT,true)+"</td></tr>");
00585 count++;
00586 }
00587 html.append("</table>");
00588 }
00589 }
00590 }
00591
00592 ModuleSCTDAQInfo sctdaqInfo = new ModuleSCTDAQInfo(serno);
00593 html.append("<h3>SCTDAQ Characterisations</h3>\n");
00594
00595 if(sctdaqInfo.noTests()>0) {
00596 html.append("<table border=1>\n");
00597 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");
00598 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");
00599 for(int i=0;i<sctdaqInfo.noTests();i++) {
00600 SCTDAQCharacterisation sctdaq = sctdaqInfo.getCharacterisation(i);
00601 String temperature = (sctdaq.getTemperature()>10.) ? "Warm" : "Cold";
00602 double deltaT = sctdaq.getDeltaT();
00603 String deltaTS = new java.text.DecimalFormat("#.###").format(deltaT);
00604 String dT = (Math.abs(deltaT)>=1.) ? "<font color=red>"+deltaTS+"</font>" : deltaTS;
00605 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>");
00606 html.append("<td valign=top>"+Integer.toString(sctdaq.nDefects(2))+"</td><td valign=top>"+Integer.toString(sctdaq.nDefects(3))+"</td>");
00607 html.append("<td valign=top>"+Integer.toString(sctdaq.nDefects(0))+"</td><td valign=top>"+Integer.toString(sctdaq.nDefects(1))+"</td>");
00608 String weblink = serno+"__"+sctdaq.getLocation()+"__"+sctdaq.getDate()+"__"+temperature;
00609 html.append("<td valign=top><a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.SCTDAQTESTLIST)+"&ref="+weblink+"\">Characterisation Report</a></td>");
00610 html.append("<td valign=top>");
00611 Set failedTests = sctdaq.getFailedTests();
00612 if(failedTests.size()==0) html.append(" - </td>");
00613 else {
00614 int count=0;
00615 for (Iterator k = failedTests.iterator(); k.hasNext(); ) {
00616 if(count>0) html.append("<br>");
00617 html.append((String)k.next());
00618 count++;
00619 }
00620 html.append("</td>");
00621 }
00622 html.append("</tr>\n");
00623 }
00624 html.append("</table>");
00625 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.");
00626 }
00627 else html.append("None uploaded.<br>");
00628
00629 if(moduleInfo.isBarrelModule()) {
00630
00631 html.append("<h3>Module Quality Information</h3>");
00632 Hashtable signoffDataHash = signoffInfo.getSignoffDataHash();
00633 if(signoffDataHash.size()==0) html.append("None uploaded");
00634 else {
00635 html.append("<table border=1>");
00636 int count=1;
00637 for (java.util.Enumeration e = signoffDataHash.keys() ; e.hasMoreElements() ;) {
00638 String location = (String)e.nextElement();
00639 html.append("<tr><td colspan=2><font color=navy>"+Integer.toString(count)+" - "+signoffInfo.getUploaderInfo(location)+"</font></td></tr>");
00640 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>");
00641 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>");
00642 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>");
00643 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>");
00644 count++;
00645 }
00646 html.append("</table>");
00647 }
00648 }
00649 html.append(guiUtilities.DaveUtils.getHTMLFooter());
00650 return html.toString();
00651 }
00652
00653 public static String getSensorMfrHTMLTable(Vector snList) throws Exception {
00654
00655 StringBuffer genTable = new StringBuffer("<h3>General Wafer Properties</h3>\n");
00656
00657 String serialNos = (String)snList.elementAt(0);
00658 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00659
00660 StringBuffer sqlStat = new StringBuffer("SELECT ");
00661 sqlStat.append(" tests.ser_no,substr_orient,substr_origin,thickness,i_leak_150,i_leak_350,temperature FROM tests,tstdetmfrs");
00662 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+") AND tests.test_name='DetMfrSheet' AND tstdetmfrs.test_no=tests.test_no");
00663 sqlStat.append(" ORDER BY tests.ser_no");
00664
00665 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
00666 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00667 int nCount=0;
00668
00669 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00670 if(nCount==0) {
00671 genTable.append("<table cellspacing=5 border=1>\n");
00672 for(int i=0;i<4;i++) genTable.append("<col width=*>\n");
00673 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>");
00674 }
00675 nCount++;
00676 genTable.append("<tr>");
00677 for(int i=1;i<=4;i++) genTable.append("<td>"+resultSet.getString(i)+"</td>");
00678 genTable.append("</tr>\n");
00679 }
00680 statement.close();
00681 if(nCount==0) genTable.append("<p>No data available\n");
00682 else genTable.append("</table>");
00683 return genTable.toString();
00684 }
00685
00686 public static String getSensorIVHTMLTable(Vector snList) throws Exception {
00687 SCTDBInterface db = SCTDBInterface.getInstance();
00688 Hashtable tempHash;
00689 Hashtable atlasHash = new Hashtable();
00690 Vector tempList;
00691 Vector mfrList = new Vector();
00692 StringBuffer ivTable = new StringBuffer("<h3>IV Data</h3>\n");
00693 String serialNos = (String)snList.elementAt(0);
00694 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00695
00696 StringBuffer sqlStat = new StringBuffer("SELECT ");
00697 sqlStat.append(" tests.ser_no,tests.locn_name,tests.test_date,i_leak_150,i_leak_350,temperature FROM tests,tstdetmfrs");
00698 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+") AND tests.test_name='DetMfrSheet' AND tstdetmfrs.test_no=tests.test_no");
00699 sqlStat.append(" ORDER BY tests.ser_no");
00700
00701 Statement statement = db.connection.createStatement();
00702
00703 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00704 int nCount=0;
00705
00706 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00707 String sn = resultSet.getString(1);
00708 tempHash = new Hashtable();
00709 tempHash.put("SERIALNO",sn);
00710 tempHash.put("NAME",resultSet.getString(2));
00711 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(3)));
00712 tempHash.put("I150",resultSet.getString(4));
00713 tempHash.put("I350",resultSet.getString(5));
00714 tempHash.put("TEMP",resultSet.getString(6));
00715 tempHash.put("STATUS","Pass");
00716 tempHash.put("COMNTS","None.");
00717 mfrList.addElement(tempHash);
00718 nCount++;
00719 }
00720 statement.close();
00721
00722 sqlStat = new StringBuffer("SELECT ");
00723 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");
00724 sqlStat.append(" FROM tests,tstdetivs");
00725 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00726 sqlStat.append(" AND tests.test_name='DetIVscan'");
00727 sqlStat.append(" AND tstdetivs.test_no=tests.test_no");
00728 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00729
00730 statement = db.connection.createStatement();
00731 resultSet = statement.executeQuery(sqlStat.toString());
00732
00733 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00734 tempHash = new Hashtable();
00735 String sn = resultSet.getString(2);
00736 if(atlasHash.containsKey(sn)) tempList = (Vector)atlasHash.get(sn);
00737 else tempList = new Vector();
00738 tempHash.put("TESTNO",resultSet.getString(1));
00739 tempHash.put("SERIALNO",resultSet.getString(2));
00740 tempHash.put("NAME",resultSet.getString(3));
00741 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(4)));
00742 String problemFlag = resultSet.getString(5);
00743 String passFlag = resultSet.getString(6);
00744 String statusFlag;
00745 if(passFlag.equals("YES")) {
00746 statusFlag = (problemFlag.equals("YES")) ? "PROBLEM" : "Pass";
00747 }
00748 else statusFlag = "FAIL";
00749 tempHash.put("STATUS",statusFlag);
00750 tempHash.put("TEMP",resultSet.getString(7));
00751 tempHash.put("I150",resultSet.getString(8));
00752 tempHash.put("I350",resultSet.getString(9));
00753 tempList.addElement(tempHash);
00754 atlasHash.put(sn,tempList);
00755 nCount++;
00756 }
00757 statement.close();
00758
00759
00760 String subQuery = sqlStat.toString();
00761 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("AND tstdetivs")-1);
00762 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
00763
00764
00765 for(int i=0;i<mfrList.size();i++) {
00766 if(i==0) {
00767 ivTable.append("<table cellspacing=5 border=1>\n");
00768 for(int j=0;j<8;j++) ivTable.append("<col width=*>\n");
00769 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");
00770 }
00771 ivTable.append("<tr>");
00772 tempHash = (Hashtable)mfrList.elementAt(i);
00773 String sn = (String)tempHash.get("SERIALNO");
00774 String locn = (String)tempHash.get("NAME");
00775 String date = (String)tempHash.get("DATE");
00776 String i150 = (String)tempHash.get("I150");
00777 String i350 = (String)tempHash.get("I350");
00778 String temp = (String)tempHash.get("TEMP");
00779 String status = (String)tempHash.get("STATUS");
00780 String remarks = (String)tempHash.get("COMNTS");
00781 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");
00782 if(atlasHash.containsKey(sn)) {
00783 tempList = (Vector)atlasHash.get(sn);
00784 for(int j=0;j<tempList.size();j++) {
00785 tempHash = (Hashtable)tempList.elementAt(j);
00786 String testno = (String)tempHash.get("TESTNO");
00787 sn = (String)tempHash.get("SERIALNO");
00788 locn = "<font color=green>"+(String)tempHash.get("NAME")+"</font>";
00789 date = (String)tempHash.get("DATE");
00790 i150 = (String)tempHash.get("I150");
00791 i350 = (String)tempHash.get("I350");
00792 temp = (String)tempHash.get("TEMP");
00793 status = (String)tempHash.get("STATUS");
00794 if(!status.equals("Pass")) status = "<font color=red>"+status+"</font>";
00795 remarks="None.";
00796 if(commentsHash.containsKey(testno)) remarks = (String)commentsHash.get(testno);
00797 if(!remarks.equals("None.")) remarks = "<font color=red>"+remarks+"</font>";
00798 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");
00799 }
00800 }
00801 }
00802 if(nCount==0) ivTable.append("<p>No data available\n");
00803 else ivTable.append("</table>");
00804 return ivTable.toString();
00805 }
00806
00807
00808 public static String getSensorDepletionHTMLTable(Vector snList) throws Exception {
00809 SCTDBInterface db = SCTDBInterface.getInstance();
00810 Hashtable tempHash;
00811 Hashtable atlasHash = new Hashtable();
00812 Vector tempList;
00813 Vector mfrList = new Vector();
00814 StringBuffer ivTable = new StringBuffer("<h3>Depletion Voltages</h3>\n");
00815 String serialNos = (String)snList.elementAt(0);
00816 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00817
00818 StringBuffer sqlStat = new StringBuffer("SELECT ");
00819 sqlStat.append(" tests.ser_no,tests.locn_name,tests.test_date,v_dep FROM tests,tstdetmfrs");
00820 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+") AND tests.test_name='DetMfrSheet' AND tstdetmfrs.test_no=tests.test_no");
00821 sqlStat.append(" ORDER BY tests.ser_no");
00822
00823 Statement statement = db.connection.createStatement();
00824 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
00825 int nCount=0;
00826
00827 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00828 String sn = resultSet.getString(1);
00829 tempHash = new Hashtable();
00830 tempHash.put("SERIALNO",sn);
00831 tempHash.put("NAME",resultSet.getString(2));
00832 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(3)));
00833 tempHash.put("VDEP",resultSet.getString(4));
00834 tempHash.put("STATUS","Pass");
00835 tempHash.put("COMNTS","None.");
00836 mfrList.addElement(tempHash);
00837 nCount++;
00838 }
00839
00840 statement.close();
00841
00842 sqlStat = new StringBuffer("SELECT ");
00843 sqlStat.append("tests.test_no,tests.ser_no,tests.locn_name,tests.test_date,tests.problem,tests.pass,tstdetopts.v_dep");
00844 sqlStat.append(" FROM tests,tstdetopts");
00845 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00846 sqlStat.append(" AND tests.test_name='DetVDep'");
00847 sqlStat.append(" AND tstdetopts.test_no=tests.test_no");
00848 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00849 statement = db.connection.createStatement();
00850 resultSet = statement.executeQuery(sqlStat.toString());
00851
00852 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00853 tempHash = new Hashtable();
00854 String sn = resultSet.getString(2);
00855 if(atlasHash.containsKey(sn)) tempList = (Vector)atlasHash.get(sn);
00856 else tempList = new Vector();
00857 tempHash.put("TESTNO",resultSet.getString(1));
00858 tempHash.put("SERIALNO",resultSet.getString(2));
00859 tempHash.put("NAME",resultSet.getString(3));
00860 tempHash.put("DATE",guiUtilities.DaveUtils.extractDate(resultSet.getString(4)));
00861 String problemFlag = resultSet.getString(5);
00862 String passFlag = resultSet.getString(6);
00863 String statusFlag;
00864 if(passFlag.equals("YES")) {
00865 statusFlag = (problemFlag.equals("YES")) ? "PROBLEM" : "Pass";
00866 }
00867 else statusFlag = "FAIL";
00868 tempHash.put("STATUS",statusFlag);
00869 tempHash.put("VDEP",resultSet.getString(7));
00870 tempList.addElement(tempHash);
00871 atlasHash.put(sn,tempList);
00872 nCount++;
00873 }
00874 statement.close();
00875
00876
00877 String subQuery = sqlStat.toString();
00878 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("AND tstdetopts")-1);
00879 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
00880
00881
00882 for(int i=0;i<mfrList.size();i++) {
00883 if(i==0) {
00884 ivTable.append("<table cellspacing=5 border=1>\n");
00885 for(int j=0;j<8;j++) ivTable.append("<col width=*>\n");
00886 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");
00887 }
00888 ivTable.append("<tr>");
00889 tempHash = (Hashtable)mfrList.elementAt(i);
00890 String sn = (String)tempHash.get("SERIALNO");
00891 String locn = (String)tempHash.get("NAME");
00892 String date = (String)tempHash.get("DATE");
00893 String vdep = (String)tempHash.get("VDEP");
00894 String status = (String)tempHash.get("STATUS");
00895 String remarks = (String)tempHash.get("COMNTS");
00896 ivTable.append("<td>"+sn+"</td><td>"+locn+"</td><td>"+date+"</td><td>"+vdep+"</td><td>"+status+"</td><td>"+remarks+"</td></tr>\n");
00897 if(atlasHash.containsKey(sn)) {
00898 tempList = (Vector)atlasHash.get(sn);
00899 for(int j=0;j<tempList.size();j++) {
00900 tempHash = (Hashtable)tempList.elementAt(j);
00901 String testno = (String)tempHash.get("TESTNO");
00902 sn = (String)tempHash.get("SERIALNO");
00903 locn = "<font color=green>"+(String)tempHash.get("NAME")+"</font>";
00904 date = (String)tempHash.get("DATE");
00905 vdep = (String)tempHash.get("VDEP");
00906 status = (String)tempHash.get("STATUS");
00907 if(!status.equals("Pass")) status = "<font color=red>"+status+"</font>";
00908 remarks="None.";
00909 if(commentsHash.containsKey(testno)) remarks = (String)commentsHash.get(testno);
00910 if(!remarks.equals("None.")) remarks = "<font color=red>"+remarks+"</font>";
00911 ivTable.append("<tr><td>"+sn+"</td><td>"+locn+"</td><td>"+date+"</td><td>"+vdep+"</td><td>"+status+"</td><td nowrap>"+remarks+"</td></tr>\n");
00912 }
00913 }
00914 }
00915 if(nCount==0) ivTable.append("<p>No data available\n");
00916 else ivTable.append("</table>");
00917 return ivTable.toString();
00918 }
00919
00920
00921 public static String getSensorDefectHTMLTable(Vector snList) throws Exception {
00922 SCTDBInterface db = SCTDBInterface.getInstance();
00923 Vector itemList = new Vector();
00924 String serialNos = (String)snList.elementAt(0);
00925 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
00926 Vector dets = new Vector();
00927 Vector theLine;
00928 String[] defectNames = {"Pinhole","Oxide-Punchthrough","Short","Open","Implant-Open","Implant-Short","Resistor-Break"};
00929 Hashtable nameHash = new Hashtable();
00930 int ndefectTypes = defectNames.length;
00931 Hashtable[] defectCount = new Hashtable[ndefectTypes];
00932 Hashtable[] defectList = new Hashtable[ndefectTypes];
00933
00934 StringBuffer ivTable = new StringBuffer("<h3>Defects Summary</h3>\n");
00935 for(int i=0;i<ndefectTypes;i++) {
00936 nameHash.put(defectNames[i],new Integer(i));
00937 defectCount[i] = new Hashtable();
00938 defectList[i] = new Hashtable();
00939 }
00940
00941 Hashtable totalCount = new Hashtable();
00942 Hashtable serialNoHash = new Hashtable();
00943 Hashtable dateHash = new Hashtable();
00944 Hashtable locationHash = new Hashtable();
00945
00946 String ser_no="",test_no="";
00947 String test_date,defect_name,chan1,chanlast;
00948
00949
00950
00951 StringBuffer sqlStat = new StringBuffer("SELECT tests.test_no,tests.ser_no,tests.test_date,tests.locn_name FROM tests");
00952 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00953 sqlStat.append(" AND ( tests.test_name='DetDefect' OR tests.test_name='DetMfrSheet')");
00954
00955 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00956 String string1 = sqlStat.toString();
00957
00958
00959
00960 Statement statement = db.connection.createStatement();
00961 ResultSet resultSet = statement.executeQuery(string1);
00962 int nCount=0;
00963 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
00964 nCount++;
00965 ser_no = resultSet.getString(2);
00966 test_no = resultSet.getString(1);
00967 String date = resultSet.getString(3);
00968 date = guiUtilities.DaveUtils.extractDate(date);
00969 dateHash.put(test_no,date);
00970 String location_name = resultSet.getString(4);
00971 locationHash.put(test_no,location_name);
00972 for(int i=0;i<ndefectTypes;i++) {
00973 defectCount[i].put(test_no,new Integer(0));
00974 defectList[i].put(test_no,"");
00975 }
00976 totalCount.put(test_no,new Integer(0));
00977 serialNoHash.put(test_no,ser_no);
00978 dets.addElement(test_no);
00979 }
00980 statement.close();
00981 String subQuery = string1;
00982
00983
00984 int in1 = subQuery.indexOf("FROM");
00985 int in2 = subQuery.indexOf("ORDER")-1;
00986 subQuery = "SELECT tests.test_no "+subQuery.substring(in1,in2);
00987
00988 sqlStat = new StringBuffer("SELECT tests.ser_no,tests.test_no,defect_name,chan_1st,chan_last");
00989 sqlStat.append(" FROM tests,defects");
00990 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
00991 sqlStat.append(" AND defects.test_no=tests.test_no");
00992 sqlStat.append(" AND tests.test_no IN ("+subQuery+")");
00993 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
00994 String string2 = sqlStat.toString();
00995
00996 statement = db.connection.createStatement();
00997 resultSet = statement.executeQuery(string2);
00998 String olddata;
00999 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01000 nCount++;
01001 ser_no = resultSet.getString(1);
01002 test_no = resultSet.getString(2);
01003 defect_name = resultSet.getString(3);
01004 chan1 = resultSet.getString(4);
01005 chanlast = resultSet.getString(5);
01006 int i1 = Integer.parseInt(chan1);
01007 int i2 = Integer.parseInt(chanlast);
01008
01009 if(nameHash.containsKey(defect_name)) {
01010 int idefect = ((Integer)nameHash.get(defect_name)).intValue();
01011
01012 int defCount = ((Integer)defectCount[idefect].get(test_no)).intValue();
01013 int totalDefectCount = ((Integer)totalCount.get(test_no)).intValue();
01014 String defList = (String)defectList[idefect].get(test_no);
01015 for(int j=i1;j<=i2;j++) {
01016 if(!defList.equals("")) defList+=",";
01017 defList += Integer.toString(j);
01018 defCount++;
01019 totalDefectCount++;
01020 }
01021 defectCount[idefect].put(test_no,new Integer(defCount));
01022 defectList[idefect].put(test_no,defList);
01023 totalCount.put(test_no,new Integer(totalDefectCount));
01024
01025 }
01026 else System.out.println("**WARNING** Strange defect declaration for "+ser_no+" was ignored: "+defect_name);
01027 }
01028 statement.close();
01029
01030 for(int i=0;i<dets.size();i++) {
01031 if(i==0) {
01032 ivTable.append("<table cellspacing=5 border=1>\n");
01033 for(int j=0;j<11;j++) ivTable.append("<col width=* nowrap>\n");
01034 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>");
01035 for(int j=0;j<ndefectTypes;j++) {
01036 if(defectNames[j].equals("Oxide-Punchthrough")) ivTable.append("<td nowrap><b>Oxide-PT</b></td>");
01037 else if(defectNames[j].equals("Implant-Open")) ivTable.append("<td nowrap><b>Implant-O</b></td>");
01038 else if(defectNames[j].equals("Implant-Short")) ivTable.append("<td nowrap><b>Implant-S</b></td>");
01039 else if(defectNames[j].equals("Resistor-Break")) ivTable.append("<td nowrap><b>Resistor</b></td>");
01040 else ivTable.append("<td nowrap><b>"+defectNames[j]+"</b></td>");
01041 }
01042 }
01043 ivTable.append("\n<tr>");
01044 theLine = new Vector();
01045 String testno = (String)dets.elementAt(i);
01046 String serialno = (String)serialNoHash.get(testno);
01047 ivTable.append("<td>"+serialno+"</td>");
01048 String locn = (String)locationHash.get(testno);
01049 if(!locn.equals("Hamamatsu") && !locn.equals("CiS")) locn = "<font color=green>"+locn+"</font>";
01050 ivTable.append("<td>"+locn+"</td>");
01051 ivTable.append("<td>"+(String)dateHash.get(testno)+"</td>");
01052 ivTable.append("<td>"+((Integer)totalCount.get(testno)).toString()+"</td>");
01053 for(int j=0;j<ndefectTypes;j++) {
01054 String defList = (String)defectList[j].get(testno);
01055 if(!defList.equals("")) defList=" ("+defList+")";
01056 ivTable.append("<td nowrap>"+((Integer)defectCount[j].get(testno)).toString()+defList+"</td>");
01057 }
01058 ivTable.append("</tr>");
01059 }
01060 if(nCount==0) ivTable.append("No data available...");
01061 else ivTable.append("\n</table>");
01062
01063 return ivTable.toString();
01064 }
01065
01066 public static String getSensorVisualTestHTMLTable(Vector snList) throws Exception {
01067 String testnoKey = "TESTNO";
01068 String snKey = "SERIALNO";
01069 String dateKey = "DATE";
01070 String locationKey = "LOCN";
01071 String flagKey = "FLAG";
01072 Hashtable testnoHash = new Hashtable();
01073 Vector testnoList = new Vector();
01074 String serialNos = (String)snList.elementAt(0);
01075 for(int i=1;i<snList.size();i++) serialNos+=","+snList.elementAt(i);
01076
01077 StringBuffer ivTable = new StringBuffer("<h3>Visual Inspection Results</h3>\n");
01078
01079 StringBuffer sqlStat = new StringBuffer("SELECT ");
01080 sqlStat.append("tests.test_no,tests.ser_no,tests.test_date,tests.locn_name,tests.problem,tests.pass");
01081 sqlStat.append(" FROM tests");
01082 sqlStat.append(" WHERE tests.ser_no IN ("+serialNos+")");
01083 sqlStat.append(" AND tests.test_name='Visual_Inspection'");
01084 sqlStat.append(" ORDER BY tests.ser_no,tests.test_no");
01085
01086 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
01087 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01088 int nCount=0;
01089 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01090 Hashtable thisHash = new Hashtable();
01091 nCount++;
01092 String testno = resultSet.getString(1);
01093 thisHash.put(snKey,resultSet.getString(2));
01094 String date = resultSet.getString(3);
01095 thisHash.put(dateKey,guiUtilities.DaveUtils.extractDate(date));
01096 thisHash.put(locationKey,"<font color=green>"+resultSet.getString(4)+"</font>");
01097 String problemFlag = resultSet.getString(5);
01098 String passFlag = resultSet.getString(6);
01099 String statusFlag;
01100 if(passFlag.equals("YES")) {
01101 statusFlag = (problemFlag.equals("YES")) ? "<font color=red>PROBLEM</font>" : "Pass";
01102 }
01103 else statusFlag = "<font color=red>FAIL</font>";
01104 thisHash.put(flagKey,statusFlag);
01105 testnoHash.put(testno,thisHash);
01106 testnoList.addElement(testno);
01107
01108 }
01109
01110 statement.close();
01111
01112
01113 String subQuery = sqlStat.toString();
01114 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("ORDER")-1);
01115 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
01116 Hashtable testImagesHash = GeneralUtilities.testImages(subQuery);
01117
01118 StringBuffer picList = new StringBuffer("\n<h3>Image List:</h3>\n");
01119 int imageCount=0;
01120 for(int i=0;i<testnoList.size();i++) {
01121 if(i==0) {
01122 ivTable.append("<table cellspacing=5 border=1>\n");
01123 for(int j=0;j<6;j++) ivTable.append("<col width=* nowrap>\n");
01124 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>");
01125 }
01126 ivTable.append("\n<tr>");
01127
01128
01129 String testno = (String)testnoList.elementAt(i);
01130 Hashtable tempHash = (Hashtable)testnoHash.get(testno);
01131 ivTable.append("<td>"+(String)tempHash.get(snKey)+"</td>");;
01132 ivTable.append("<td>"+(String)tempHash.get(locationKey)+"</td>");
01133 ivTable.append("<td>"+(String)tempHash.get(dateKey)+"</td>");
01134
01135 ivTable.append("<td>"+(String)tempHash.get(flagKey)+"</td>");
01136 if(commentsHash.containsKey(testno)) ivTable.append("<td nowrap>"+(String)commentsHash.get(testno)+"</td>");
01137 else ivTable.append("<td></td>");
01138 if(testImagesHash.containsKey(testno)) {
01139 Vector imageList = (Vector)testImagesHash.get(testno);
01140
01141 for(int j=0;j<imageList.size()/2; j++) {
01142 imageCount++;
01143 String imageCaption = (String)imageList.elementAt(2*j);
01144 String imageName = (String)imageList.elementAt((2*j)+1);
01145 File theImageFile = new File(PreferencesInterface.getInstance().getPreference(PreferencesInterface.SCRATCH_DIR),imageName);
01146 GeneralUtilities.saveImage(testno,imageName,theImageFile);
01147 picList.append("\n<p>"+imageCaption+":");
01148 picList.append("\n<p><img src="+imageName+">");
01149 if(j==0) {
01150 ivTable.append("<td nowrap>"+imageCaption+"</td></tr>");
01151 }
01152 else {
01153
01154 ivTable.append("\n<tr>");
01155 ivTable.append("<td>"+(String)tempHash.get(snKey)+"</td>");
01156 ivTable.append("<td></td>");
01157 ivTable.append("<td></td>");
01158 ivTable.append("<td></td>");
01159 ivTable.append("<td></td>");
01160 ivTable.append("<td nowrap>"+imageCaption+"</td>");
01161 ivTable.append("</tr>");
01162 }
01163
01164 }
01165 }
01166 else ivTable.append("<td></td></tr>");
01167 }
01168 if(nCount==0) ivTable.append("No data available ...");
01169 else ivTable.append("</table>");
01170 if(imageCount>0) ivTable.append(picList);
01171 return ivTable.toString();
01172
01173
01174 }
01175
01176 public static String getImageHTMLTable(String testno) throws Exception {
01177
01178 StringBuffer ivTable = new StringBuffer("<h3>Images</h3>\n");
01179
01180 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
01181 ResultSet resultSet = statement.executeQuery("SELECT title,name FROM test_images WHERE test_no ="+testno);
01182 Vector imageList = new Vector();
01183 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01184 String title = resultSet.getString(1);
01185 String name = resultSet.getString(2);
01186 imageList.addElement(title);
01187 imageList.addElement(name);
01188 }
01189
01190 statement.close();
01191
01192 if(imageList.size()==0) {
01193 ivTable.append("None uploaded.");
01194 return ivTable.toString();
01195 }
01196
01197
01198 for(int j=0;j<imageList.size()/2; j++) {
01199
01200 String imageCaption = (String)imageList.elementAt(2*j);
01201 String imageName = (String)imageList.elementAt((2*j)+1);
01202 File theImageFile = new File(PreferencesInterface.getInstance().getPreference(PreferencesInterface.SCRATCH_DIR),imageName);
01203 GeneralUtilities.saveImage(testno,imageName,theImageFile);
01204 ivTable.append("\n<p>"+imageCaption+":");
01205 ivTable.append("\n<p><img src="+imageName+">");
01206 }
01207
01208 return ivTable.toString();
01209
01210
01211 }
01212
01213
01214 public static String getHTMLModuleSummaryData(String ref) throws Exception {
01215
01216 fillHashes();
01217
01218 String location=null;
01219 String date=null;
01220 boolean isWarm=false;
01221 boolean isCold=false;
01222
01223 String[] info = ref.split("__");
01224 String sn = info[0];
01225 System.out.println("Downloading full sctdaq report for "+sn+". Be patient...");
01226 if(info.length==4) {
01227 location = info[1];
01228 date = info[2];
01229 isWarm = (info[3].equals("Warm"));
01230 isCold = (info[3].equals("Cold"));
01231 }
01232
01233 SCTDBInterface db = SCTDBInterface.getInstance();
01234 StringBuffer testnames = new StringBuffer(" AND (tests.test_name LIKE 'Hyb%' OR tests.test_name LIKE 'DetModIV')");
01235 if(location!=null && date!=null) testnames.append(" AND tests.locn_name='"+location+"' AND tests.test_date='"+date+"'");
01236 if(isWarm) testnames.append(" AND sct_tstdcsinfo.t0>10 AND sct_tstdcsinfo.test_no=tests.test_no");
01237 else if(isCold) testnames.append(" AND sct_tstdcsinfo.t0<=10 AND sct_tstdcsinfo.test_no=tests.test_no");
01238 else testnames.append(" AND sct_tstdcsinfo.test_no=tests.test_no");
01239 StringBuffer genTable = new StringBuffer("<h3>Test Data</h3>\n");
01240
01241 StringBuffer sqlStat = new StringBuffer("SELECT tests.test_no,defects.CHAN_1ST,defects.CHAN_LAST FROM tests,DEFECTS,sct_tstdcsinfo");
01242 sqlStat.append(" WHERE tests.test_no=defects.test_no AND tests.ser_no="+sn);
01243 sqlStat.append(testnames);
01244
01245
01246 Statement statement = db.connection.createStatement();
01247 if(DEBUG) System.out.println(sqlStat.toString());
01248 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01249
01250
01251 Hashtable defectsHash = new Hashtable();
01252 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01253 String thisTestNo = resultSet.getString(1);
01254 int n1 = Integer.parseInt(resultSet.getString(2));
01255 int n2 = Integer.parseInt(resultSet.getString(3));
01256 int ntotal=0;
01257 for(int i=n1;i<=n2;i++) ntotal++;
01258 if(defectsHash.containsKey(thisTestNo)) {
01259 String thisTotal = (String)defectsHash.get(thisTestNo);
01260 int ntot = Integer.parseInt(thisTotal);
01261 ntot+=ntotal;
01262 defectsHash.put(thisTestNo,(String)Integer.toString(ntot));
01263 }
01264 else defectsHash.put(thisTestNo,(String)Integer.toString(ntotal));
01265 }
01266 statement.close();
01267
01268 sqlStat = new StringBuffer("SELECT tests.test_no,tests.test_name,test_rawdata.filename FROM tests,test_rawdata,sct_tstdcsinfo");
01269 sqlStat.append(" WHERE tests.test_no=test_rawdata.test_no AND tests.ser_no="+sn);
01270 sqlStat.append(testnames);
01271
01272
01273 statement = db.connection.createStatement();
01274
01275 if(DEBUG) System.out.println(sqlStat.toString());
01276 resultSet = statement.executeQuery(sqlStat.toString());
01277
01278 Hashtable rawDataHash = new Hashtable();
01279 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01280 String thisTestNo = resultSet.getString(1);
01281 String testname = resultSet.getString(2);
01282 String thisFilename = resultSet.getString(3);
01283 String linkName = "Raw Data";
01284 if(testname.equals("Hyb3PGain") || testname.equals("HybRC")) linkName="RC";
01285 if(testname.equals("HybTrim")) linkName = "Trim/Mask";
01286 String link="Type"+guiUtilities.HTMLViewer.RAWDATA+"&ref="+thisTestNo;
01287 if(rawDataHash.containsKey(thisTestNo)) {
01288 String thisLink = (String)rawDataHash.get(thisTestNo);
01289 thisLink += "<br><a href="+link+">"+linkName+"</a>";
01290 rawDataHash.put(thisTestNo,thisLink);
01291 }
01292 else rawDataHash.put(thisTestNo,"<a href="+link+">"+linkName+"</a>");
01293 }
01294 statement.close();
01295
01296
01297 sqlStat = new StringBuffer("SELECT tests.test_no,tests.ser_no,web_links.web_link_desc,web_links.url FROM tests,web_links,sct_tstdcsinfo");
01298 sqlStat.append(" WHERE tests.test_no=web_links.test_no AND tests.ser_no="+sn);
01299 sqlStat.append(testnames);
01300
01301
01302 statement = db.connection.createStatement();
01303 if(DEBUG) System.out.println(sqlStat.toString());
01304 resultSet = statement.executeQuery(sqlStat.toString());
01305
01306 Hashtable webLinkHash = new Hashtable();
01307 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01308 String thisTestNo = resultSet.getString(1);
01309 String thisSN = resultSet.getString(2);
01310 String urlDescription = resultSet.getString(3);
01311 String thisURLlink = resultSet.getString(4);
01312 boolean isPostscript = (thisURLlink.endsWith(".ps") || thisURLlink.endsWith(".ps.gz"));
01313 if(thisURLlink.indexOf("http://hepunx.rl.ac.uk/atlassct/cgibin/getfile.pl?file=")!=-1) thisURLlink+="&module="+thisSN;
01314 if(isPostscript) thisURLlink= "Type"+guiUtilities.HTMLViewer.URLTOPOSTSCRIPT+"&ref="+thisURLlink;
01315 if(webLinkHash.containsKey(thisTestNo)) {
01316 String thisLink = (String)webLinkHash.get(thisTestNo);
01317 thisLink += "<br><a href="+thisURLlink+">"+urlDescription+"</a>";
01318 webLinkHash.put(thisTestNo,thisLink);
01319 }
01320 else webLinkHash.put(thisTestNo,"<a href="+thisURLlink+">"+urlDescription+"</a>");
01321 }
01322 statement.close();
01323
01324
01325 sqlStat = new StringBuffer("SELECT tests.test_no,tr_type");
01326 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"tr_ntrim");
01327 sqlStat.append(" FROM tests,sct_tsthybtrim,sct_tstdcsinfo");
01328 sqlStat.append(" WHERE tests.test_no=sct_tsthybtrim.test_no AND tests.ser_no="+sn);
01329 sqlStat.append(" AND tests.test_name LIKE 'HybTrim'");
01330 sqlStat.append(testnames);
01331
01332
01333 statement = db.connection.createStatement();
01334 if(DEBUG) System.out.println(sqlStat.toString());
01335 resultSet = statement.executeQuery(sqlStat.toString());
01336
01337 Hashtable trimRangeHash = new Hashtable();
01338 Hashtable commentsHash = new Hashtable();
01339 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01340 String thisTestNo = resultSet.getString(1);
01341 String theRange = resultSet.getString(2);
01342 trimRangeHash.put(thisTestNo,theRange);
01343 int nMasked=0;
01344 for(int i=0;i<chipDBnames.length;i++) {
01345 String ntrim = resultSet.getString(3+i);
01346 int itrim = Integer.parseInt(ntrim);
01347 nMasked += (128-itrim);
01348 }
01349 if(nMasked>0) commentsHash.put(thisTestNo,Integer.toString(nMasked)+" channels masked");
01350 }
01351 statement.close();
01352
01353
01354 sqlStat = new StringBuffer("SELECT tests.test_no");
01355 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"DELAY");
01356 sqlStat.append(" FROM tests,sct_tsthybdelay,sct_tstdcsinfo");
01357 sqlStat.append(" WHERE tests.test_no=sct_tsthybdelay.test_no AND tests.ser_no="+sn);
01358 sqlStat.append(" AND tests.test_name LIKE 'HybDelay'");
01359 sqlStat.append(testnames);
01360
01361
01362 statement = db.connection.createStatement();
01363 if(DEBUG) System.out.println(sqlStat.toString());
01364 resultSet = statement.executeQuery(sqlStat.toString());
01365
01366
01367 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01368 String thisTestNo = resultSet.getString(1);
01369 int strobeLow=1000;
01370 int strobeHigh=0;
01371 for(int i=0;i<chipDBnames.length;i++) {
01372 String nStrobe = resultSet.getString(2+i);
01373 int iStrobe = Integer.parseInt(nStrobe);
01374 if(iStrobe>strobeHigh) strobeHigh=iStrobe;
01375 if(iStrobe<strobeLow) strobeLow=iStrobe;
01376 }
01377 commentsHash.put(thisTestNo,"Delay from "+strobeLow+" to "+strobeHigh);
01378 }
01379 statement.close();
01380
01381
01382 sqlStat = new StringBuffer("SELECT tests.test_no");
01383 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"RC_MN_GAIN");
01384 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"RC_MN_ENC");
01385 sqlStat.append(" FROM tests,sct_tsthybrc,sct_tstdcsinfo");
01386 sqlStat.append(" WHERE tests.test_no=sct_tsthybrc.test_no AND tests.ser_no="+sn);
01387
01388 sqlStat.append(testnames);
01389
01390
01391 statement = db.connection.createStatement();
01392 if(DEBUG) System.out.println(sqlStat.toString());
01393 resultSet = statement.executeQuery(sqlStat.toString());
01394
01395
01396 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01397 String thisTestNo = resultSet.getString(1);
01398 double gainLow=1000.;
01399 double gainHigh=0.;
01400 int ENCLow=99000;
01401 int ENCHigh=0;
01402 for(int i=0;i<chipDBnames.length;i++) {
01403 double iGain = Double.valueOf( resultSet.getString(2+i) ).doubleValue();
01404 if(iGain>gainHigh) gainHigh = iGain;
01405 if(iGain<gainLow) gainLow=iGain;
01406 }
01407 for(int i=0;i<chipDBnames.length;i++) {
01408 int iNoise = Integer.valueOf( resultSet.getString(14+i) ).intValue();
01409 if(iNoise>ENCHigh) ENCHigh=iNoise;
01410 if(iNoise<ENCLow) ENCLow=iNoise;
01411 }
01412 commentsHash.put(thisTestNo,"Gain from "+gainLow+" to "+gainHigh+"mV/fC<br>Noise from "+ENCLow+" to "+ENCHigh+" ENC");
01413 }
01414 statement.close();
01415
01416
01417 sqlStat = new StringBuffer("SELECT tests.test_no");
01418 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"NO_MN_OCC");
01419 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"NO_NSE");
01420 sqlStat.append(" FROM tests,sct_tsthybnoise,sct_tstdcsinfo");
01421 sqlStat.append(" WHERE tests.test_no=sct_tsthybnoise.test_no AND tests.ser_no="+sn);
01422 sqlStat.append(" AND tests.test_name LIKE 'HybNoise'");
01423 sqlStat.append(testnames);
01424
01425
01426 statement = db.connection.createStatement();
01427 if(DEBUG) System.out.println(sqlStat.toString());
01428 resultSet = statement.executeQuery(sqlStat.toString());
01429
01430
01431 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01432 String thisTestNo = resultSet.getString(1);
01433 double occLow=1000.;
01434 double occHigh=0.;
01435 int ENCLow=99000;
01436 int ENCHigh=0;
01437 for(int i=0;i<chipDBnames.length;i++) {
01438 double iOcc = Double.valueOf( resultSet.getString(2+i) ).doubleValue();
01439 if(iOcc>occHigh) occHigh = iOcc;
01440 if(iOcc<occLow) occLow=iOcc;
01441 }
01442 for(int i=0;i<chipDBnames.length;i++) {
01443 int iNoise = Integer.valueOf( resultSet.getString(14+i) ).intValue();
01444 if(iNoise>ENCHigh) ENCHigh=iNoise;
01445 if(iNoise<ENCLow) ENCLow=iNoise;
01446 }
01447 DecimalFormat myFormatter = new DecimalFormat("0.##E0");
01448 String theOccLow = myFormatter.format(occLow);
01449 String theOccHigh = myFormatter.format(occHigh);
01450 commentsHash.put(thisTestNo,"Occupancy at 1fC from "+theOccLow+" to "+theOccHigh+"<brEstimated ENC from "+ENCLow+" to "+ENCHigh+" ENC");
01451 }
01452 statement.close();
01453
01454
01455 sqlStat = new StringBuffer("SELECT tests.test_no");
01456 for(int i=0;i<chipDBnames.length;i++) sqlStat.append(","+chipDBnames[i]+"TW");
01457 sqlStat.append(" FROM tests,sct_tsthybTW,sct_tstdcsinfo");
01458 sqlStat.append(" WHERE tests.test_no=sct_tsthybtw.test_no AND tests.ser_no="+sn);
01459
01460 sqlStat.append(testnames);
01461
01462
01463 statement = db.connection.createStatement();
01464 if(DEBUG) System.out.println(sqlStat.toString());
01465 resultSet = statement.executeQuery(sqlStat.toString());
01466
01467 int ntw=0;
01468 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01469 String thisTestNo = resultSet.getString(1);
01470 double iTLow=1000;
01471 double iTHigh=0;
01472 ntw++;
01473 for(int i=0;i<chipDBnames.length;i++) {
01474 double iTW = Double.valueOf( resultSet.getString(2+i) ).doubleValue();
01475 if(iTW>iTHigh) iTHigh=iTW;
01476 if(iTW<iTLow) iTLow=iTW;
01477 }
01478 commentsHash.put(thisTestNo,"Timewalk from "+iTLow+" to "+iTHigh+" ns");
01479 }
01480 statement.close();
01481
01482
01483 System.out.println("Retrieved all data, now compiling list...");
01484 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");
01485 sqlStat.append(" FROM tests,sct_tstdcsinfo WHERE tests.test_no=sct_tstdcsinfo.test_no AND tests.ser_no="+sn);
01486 sqlStat.append(testnames);
01487 sqlStat.append(" ORDER BY tests.test_date,tests.test_no");
01488
01489 statement = db.connection.createStatement();
01490
01491 resultSet = statement.executeQuery(sqlStat.toString());
01492 int nCount=0;
01493
01494 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01495 if(nCount==0) {
01496 genTable.append("<table cellspacing=5 border=1>\n");
01497 for(int i=0;i<10;i++) genTable.append("<col width=*>\n");
01498 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");
01499 }
01500 String thisTestNo = resultSet.getString(1);
01501 String thisTestName = resultSet.getString(2);
01502 String colTestName = sctdaqTestNameHash.containsKey(thisTestName) ? (String)sctdaqTestNameHash.get(thisTestName) : thisTestName;
01503 if(trimRangeHash.containsKey(thisTestNo)) {
01504 colTestName += "Range "+(String)trimRangeHash.get(thisTestNo);
01505 }
01506 String thisDate = guiUtilities.DaveUtils.extractDate(resultSet.getString(3));
01507 String thisLocation = resultSet.getString(4);
01508 String passFlag = resultSet.getString(5);
01509 String problemFlag = resultSet.getString(6);
01510 String statusFlag="<font color=red>FAIL</font>";
01511 if(passFlag.equals("YES")) {
01512 statusFlag = problemFlag.equals("YES") ? "Problem" : "<font color=green>Pass</font>";
01513 }
01514 String t0 = resultSet.getString(7);
01515 String t1 = resultSet.getString(8);
01516 String comments = "";
01517
01518 if(commentsHash.containsKey(thisTestNo)) {
01519 if(!comments.equals("")) comments += "<br>";
01520 comments += (String)commentsHash.get(thisTestNo);
01521 }
01522 if(defectsHash.containsKey(thisTestNo)) {
01523 if(!comments.equals("")) comments += "<br>";
01524 comments += "<b>"+(String)defectsHash.get(thisTestNo)+" defect(s)</b>";
01525 }
01526 else {
01527 if(!comments.equals("")) comments += "<br>";
01528 comments += "No defects";
01529 }
01530 int testType=-1;
01531 if(sctdaqTestNumberHash.containsKey(thisTestName)) testType = ((Integer)sctdaqTestNumberHash.get(thisTestName)).intValue();
01532
01533 String linkTestName = (colTestName.indexOf("TrimRange")!=-1) ? "TrimRange" : colTestName;
01534 String reports = (testType==-1) ? "" : "<a href=\"Type"+guiUtilities.HTMLViewer.SCTDAQTESTDATA+"&ref="+thisTestNo+"__"+Integer.toString(testType)+"\">Test Report</a>";
01535 if(!sctdaqTestNameHash.containsKey(thisTestName)) reports="";
01536
01537 String rawData = rawDataHash.containsKey(thisTestNo) ? (String)rawDataHash.get(thisTestNo) : "";
01538 String plots = webLinkHash.containsKey(thisTestNo) ? (String)webLinkHash.get(thisTestNo) : "";
01539 genTable.append("<tr><td valign=top align=left>"+colTestName+"</td><td valign=top align=left>"+thisDate+"</td><td valign=top align=left>"+thisLocation+"</td>");
01540 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>");
01541 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");
01542
01543 nCount++;
01544 }
01545 statement.close();
01546 if(nCount==0) {genTable.append("<p>No tests found for "+sn+"\n"); return genTable.toString();}
01547 else genTable.append("</table>\n");
01548
01549
01550 genTable.append("<p><font face=Arial color=NAVY size=+1>Defects</font>\n");
01551 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");
01552 sqlStat.append(" AND tests.ser_no="+sn);
01553 sqlStat.append(testnames);
01554 sqlStat.append(" ORDER by defects.chan_1st,tests.test_date,tests.test_no");
01555
01556
01557 statement = db.connection.createStatement();
01558 if(DEBUG) System.out.println(sqlStat.toString());
01559 resultSet = statement.executeQuery(sqlStat.toString());
01560
01561
01562 int ntotal=0;
01563 nCount=0;
01564 int nMaxConChannels=0;
01565 int nMaxConNonTrimChannels=0;
01566 Hashtable nonTrimDefectHash = new Hashtable();
01567 Hashtable trimDefectHash = new Hashtable();
01568 Hashtable channelHash = new Hashtable();
01569 Vector nonTrimDefectList = new Vector();
01570 Vector trimDefectList = new Vector();
01571 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01572 String thisTestNo = resultSet.getString(1);
01573 String thisTestName = resultSet.getString(2);
01574 thisTestName = sctdaqTestNameHash.containsKey(thisTestName) ? (String)sctdaqTestNameHash.get(thisTestName) : thisTestName;
01575 if(trimRangeHash.containsKey(thisTestNo)) {
01576 thisTestName += "Range "+(String)trimRangeHash.get(thisTestNo);
01577 }
01578 boolean isTrimTest = (thisTestName.indexOf("Trim")!=-1);
01579 String testDate = guiUtilities.DaveUtils.extractDate(resultSet.getString(3));
01580 String locn = resultSet.getString(4);
01581 String chan1 = resultSet.getString(5);
01582 String chan2 = resultSet.getString(6);
01583 int n1 = Integer.parseInt(chan1);
01584 int n2 = Integer.parseInt(resultSet.getString(6));
01585 String defectname = resultSet.getString(7);
01586
01587 int iDiff = n2-n1;
01588 String defectChannel = (iDiff>0) ? chan1+"-"+chan2 : chan1;
01589 String thisDefectInfo = defectname+" ("+thisTestName+" at "+locn+" on "+testDate+")";
01590
01591 for(int i=n1;i<=n2;i++) {
01592 String thisChannel = Integer.toString(i);
01593 if(!channelHash.containsKey(thisChannel)) {
01594 int status= (isTrimTest) ? 1 : 2;
01595 channelHash.put(thisChannel, new Integer(status));
01596 }
01597 else {
01598 Integer theStatus = (Integer)channelHash.get(thisChannel);
01599 int status = theStatus.intValue();
01600 if(isTrimTest) status |=1;
01601 else status |= 2;
01602 channelHash.put(thisChannel,new Integer(status));
01603 }
01604 }
01605 if(iDiff>0) {
01606 iDiff++;
01607 nMaxConChannels = iDiff>nMaxConChannels ? iDiff : nMaxConChannels;
01608 nMaxConNonTrimChannels = (iDiff>nMaxConNonTrimChannels && !isTrimTest) ? iDiff : nMaxConNonTrimChannels;
01609 }
01610
01611
01612 if(thisTestName.indexOf("Trim")==-1) {
01613 if(nonTrimDefectHash.containsKey(defectChannel)) {
01614 Vector thisDefectVector = (Vector)nonTrimDefectHash.get(defectChannel);
01615 if(!thisDefectVector.contains((String)thisDefectInfo)) thisDefectVector.addElement(thisDefectInfo);
01616 nonTrimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01617 }
01618 else {
01619 nonTrimDefectList.addElement(defectChannel);
01620 Vector thisDefectVector = new Vector();
01621 thisDefectVector.addElement(thisDefectInfo);
01622 nonTrimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01623 }
01624 }
01625
01626 else {
01627 if(trimDefectHash.containsKey(defectChannel)) {
01628 Vector thisDefectVector = (Vector)trimDefectHash.get(defectChannel);
01629 if(!thisDefectVector.contains((String)thisDefectInfo)) thisDefectVector.addElement(thisDefectInfo);
01630 trimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01631 }
01632 else {
01633 trimDefectList.addElement(defectChannel);
01634 Vector thisDefectVector = new Vector();
01635 thisDefectVector.addElement(thisDefectInfo);
01636 trimDefectHash.put(defectChannel,(Vector)thisDefectVector);
01637 }
01638 }
01639 }
01640 statement.close();
01641
01642
01643
01644 int nDefectCount=0;
01645 int nTrimDefectCount=0;
01646 int nNonTrimDefectCount=0;
01647 int nBothCount=0;
01648
01649 for (Enumeration e = channelHash.elements() ; e.hasMoreElements() ;) {
01650 Integer theStatus = (Integer)e.nextElement();
01651 int status = theStatus.intValue();
01652 if(status>0) nDefectCount++;
01653 if((status & 1)>0) nTrimDefectCount++;
01654 if((status & 2)>0) nNonTrimDefectCount++;
01655 if((status & 3)==3) nBothCount++;
01656 }
01657 genTable.append("<br><br><b>Statistics</b>\n");
01658
01659 genTable.append("<br><table cellspacing=5 border=1>\n");
01660 genTable.append("<col width=*><col width=*>\n");
01661 genTable.append("<tr><td align=left>Channels with any defect(s)</td><td align=left>"+nDefectCount+"</td></tr>\n");
01662 genTable.append("<tr><td align=left>Channels with non-trim defect(s)</td><td align=left>"+nNonTrimDefectCount+"</td></tr>\n");
01663 genTable.append("<tr><td align=left>Channels with trim defect(s)</td><td align=left>"+nTrimDefectCount+"</td></tr>\n");
01664 genTable.append("<tr><td align=left>Channels with non-trim and trim defect(s)</td><td align=left>"+nBothCount+"</td></tr>\n");
01665 genTable.append("<tr><td align=left>Max consecutive bad channels (non-trim defects only)</td><td align=left>"+nMaxConNonTrimChannels+"</td></tr>\n");
01666 genTable.append("<tr><td align=left>Max consecutive bad channels (any defect)</td><td align=left>"+nMaxConChannels+"</td></tr>\n");
01667 genTable.append("</table>");
01668
01669 genTable.append("<br>");
01670 genTable.append("<br><b>Non-Trim Defects</b>");
01671 if(nonTrimDefectList.size()==0) genTable.append("<br>No defective channels");
01672 else {
01673 genTable.append("<table cellspacing=5 border=1>\n");
01674 genTable.append("<col width=*><col width=*>\n");
01675 genTable.append("<tr><td align=left><b>Channel(s)</b></td><td align=left><b>Non-Trim Defects</b></td></tr>");
01676 for(int i=0;i<nonTrimDefectList.size();i++) {
01677 String thisChan = (String)nonTrimDefectList.elementAt(i);
01678 Vector theList = (Vector)nonTrimDefectHash.get(thisChan);
01679 genTable.append("<tr><td align=left>"+thisChan+"</td><td align=left>");
01680 for(int j=0;j<theList.size();j++) {
01681 if(j>0) genTable.append("<br>");
01682 genTable.append((String)theList.elementAt(j));
01683 }
01684 genTable.append("</td></tr>");
01685 }
01686 genTable.append("</table>");
01687 }
01688
01689 genTable.append("<br>");
01690 genTable.append("<br><b>Trim Defects</b>");
01691 if(trimDefectList.size()==0) genTable.append("<br>No defective channels");
01692 else {
01693 genTable.append("<table cellspacing=5 border=1>\n");
01694 genTable.append("<col width=*><col width=*>\n");
01695 genTable.append("<tr><td align=left><b>Channel(s)</b></td><td align=left><b>Trim Defects</b></td></tr>");
01696 for(int i=0;i<trimDefectList.size();i++) {
01697 String thisChan = (String)trimDefectList.elementAt(i);
01698 Vector theList = (Vector)trimDefectHash.get(thisChan);
01699 genTable.append("<tr><td align=left>"+thisChan+"</td><td align=left>");
01700 for(int j=0;j<theList.size();j++) {
01701 if(j>0) genTable.append("<br>");
01702 genTable.append((String)theList.elementAt(j));
01703 }
01704 genTable.append("</td></tr>");
01705 }
01706 genTable.append("</table><br>");
01707 }
01708
01709 return genTable.toString();
01710 }
01711
01712
01713 public static String createVisualTestTable(String serno, String itemType) throws Exception {
01714 Hashtable testnoHash = new Hashtable();
01715 Vector testnoList = new Vector();
01716 Vector itemList = new Vector();
01717 Vector theLine = new Vector();
01718 String testnoKey = "TESTNO";
01719 String snKey = "SERIALNO";
01720 String dateKey = "DATE";
01721 String locationKey = "LOCN";
01722 String flagKey = "FLAG";
01723
01724 StringBuffer genTable = new StringBuffer("<h3>Visual Inspections of "+itemType+"</h3>");
01725
01726 SCTDBInterface db = SCTDBInterface.getInstance();
01727 Statement statement = db.connection.createStatement();
01728 StringBuffer sqlStat = new StringBuffer("SELECT ");
01729 sqlStat.append("tests.test_no,tests.ser_no,tests.test_date,tests.locn_name,tests.problem,tests.pass");
01730 sqlStat.append(" FROM tests");
01731 sqlStat.append(" WHERE tests.ser_no = "+serno);
01732 sqlStat.append(" AND tests.test_name='Visual_Inspection'");
01733 sqlStat.append(" ORDER BY tests.test_date, tests.test_no");
01734
01735
01736 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01737 int recordCount=0;
01738 Vector testNumberList = new Vector();
01739 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01740 Hashtable thisHash = new Hashtable();
01741 recordCount++;
01742
01743 String testno = resultSet.getString(1);
01744 thisHash.put(snKey,resultSet.getString(2));
01745 String date = resultSet.getString(3);
01746 thisHash.put(dateKey,guiUtilities.DaveUtils.extractDate(date));
01747 thisHash.put(locationKey,resultSet.getString(4));
01748 String problemFlag = resultSet.getString(5);
01749 String passFlag = resultSet.getString(6);
01750 String statusFlag;
01751 if(passFlag.equals("YES")) {
01752 statusFlag = (problemFlag.equals("YES")) ? "PROBLEM" : "Ok";
01753 }
01754 else statusFlag = "FAIL";
01755 thisHash.put(flagKey,statusFlag);
01756 testnoHash.put(testno,thisHash);
01757 testnoList.addElement(testno);
01758
01759 }
01760
01761 statement.close();
01762 if(recordCount==0) {
01763 genTable.append("None uploaded");
01764 return genTable.toString();
01765 }
01766
01767
01768 String subQuery = sqlStat.toString();
01769 subQuery = subQuery.substring(subQuery.indexOf("WHERE"),subQuery.indexOf("ORDER")-1);
01770 Hashtable commentsHash = GeneralUtilities.testComments(subQuery);
01771 Hashtable testImagesHash = GeneralUtilities.testImages(subQuery);
01772
01773 genTable.append("<table border=1>\n");
01774 genTable.append("<tr><td>Date</td><td>Location</td><td>Status</td><td>Comments</td><td>Images</td></tr>\n");
01775
01776 for(int i=0;i<testnoList.size();i++) {
01777 genTable.append("<tr>");
01778 String testno = (String)testnoList.elementAt(i);
01779 Hashtable tempHash = (Hashtable)testnoHash.get(testno);
01780
01781 genTable.append("<td>"+tempHash.get(dateKey)+"</td>");
01782 genTable.append("<td>"+tempHash.get(locationKey)+"</td>");
01783 genTable.append("<td>"+tempHash.get(flagKey)+"</td>");
01784 if(commentsHash.containsKey(testno)) genTable.append("<td>"+commentsHash.get(testno)+"</td>");
01785 else genTable.append("<td>None</td>");
01786
01787 String ImageTitle = "Visual Inspection of "+serno+" at "+tempHash.get(locationKey)+" on "+tempHash.get(dateKey);
01788 if(testImagesHash.containsKey(testno)) {
01789 Vector imageList = (Vector)testImagesHash.get(testno);
01790 genTable.append("<td>");
01791 for(int j=0;j<imageList.size(); j++) {
01792 if(j%2 !=0) continue;
01793 if(j>0) genTable.append("<br>");
01794 genTable.append("<a href=\"Type"+Integer.toString(guiUtilities.HTMLViewer.SCTDBIMAGE)+"&ref="+testno+ImageTitle+"\">"+(String)imageList.elementAt(j)+"</a>");
01795
01796 }
01797 genTable.append("</td>");
01798 }
01799 else genTable.append("<td></td>");
01800 genTable.append("</tr>\n");
01801 }
01802 genTable.append("</table>");
01803 return genTable.toString();
01804
01805
01806 }
01807
01808
01809 public static String createASICReWorkTable(String hybridSerialNo) throws Exception {
01810
01811 StringBuffer genTable = new StringBuffer("<h3>ASIC Replacements</h3>\n");
01812 StringBuffer sqlStat = new StringBuffer("SELECT ser_no,locn_name,disassm_date,posn FROM DISASSMLOGS where ASSM_SER_NO='"+hybridSerialNo+"'");
01813 sqlStat.append(" AND ser_no NOT IN (SELECT ser_no FROM ASSM_ITEMS where assm_ser_no="+hybridSerialNo+")");
01814 sqlStat.append(" ORDER BY DISASSM_DATE");
01815
01816
01817 Statement statement = SCTDBInterface.getInstance().connection.createStatement();
01818 if(DEBUG) System.out.println(sqlStat.toString());
01819 ResultSet resultSet = statement.executeQuery(sqlStat.toString());
01820 int recordCount=0;
01821
01822
01823 int ntotal=0;
01824 int nCount=0;
01825 for(boolean n = resultSet.next() ; n==true ; n=resultSet.next() ){
01826 if(nCount==0) {
01827 genTable.append("<table cellspacing=5 border=1>\n");
01828 for(int i=0;i<4;i++) genTable.append("<col width=*>\n");
01829 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");
01830 }
01831 nCount++;
01832 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");
01833 }
01834 statement.close();
01835 if(nCount==0) genTable.append("None uploaded.\n");
01836 else genTable.append("</table>\n");
01837 return genTable.toString();
01838 }
01839
01840
01841
01842 }