diff options
Diffstat (limited to 'xmerge/source/palmtests/qa/comparator/pdbcomparison.java')
-rw-r--r-- | xmerge/source/palmtests/qa/comparator/pdbcomparison.java | 542 |
1 files changed, 542 insertions, 0 deletions
diff --git a/xmerge/source/palmtests/qa/comparator/pdbcomparison.java b/xmerge/source/palmtests/qa/comparator/pdbcomparison.java new file mode 100644 index 000000000000..785abbad0e75 --- /dev/null +++ b/xmerge/source/palmtests/qa/comparator/pdbcomparison.java @@ -0,0 +1,542 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +import java.io.*; +import java.util.*; + +public class pdbcomparison +{ + + private String LOGTAG ="LOGFILE"; + private String OUTTAG ="OUTFILE"; + private String LISTTAG ="LISTFILE"; + private String PDBTAG1 ="PDBNAME1"; + private String PDBTAG2 ="PDBNAME2"; + + private String OUTFILE="pdbcomparison.out"; + private String LOGFILE="pdbcomparison.log"; + + private String pdbarr1[]; + private String pdbarr2[]; + + + /** + * Default Constructor + * + * @param + * @return + * + */ + public void pdbcomparison() + { + } + + /** + * Prints the command line arguments for this class + * + * @param + * + * @return void + * + */ + public void usage() + { + String str = new String(); + str += "********************************************************\n"; + str += " java pdbcomparison.java <propFile> \n"; + str += " where propFile is name of Property File...\n"; + str += "********************************************************\n"; + + System.out.println(str); + + } + + /** + * This method, read the Property file and validates the + * entries in that file, and accordingly sets the log file + * output file and updates the array pdbarr1 and pdbarr2 with + * list of pdb's to be compared. + * + * @param propFile Property filename which list the log/outputfile/list/pdb + * names + * @return + * + */ + public void parsePropertyFile(String propFile) + { + Properties defaultProps = new Properties(); + + try { + FileInputStream in = new FileInputStream(propFile); + defaultProps.load(in); + in.close(); + } catch (IOException e) { + System.out.println("Could not open Property File " + propFile); + return; + } + + + String logFile = defaultProps.getProperty(this.LOGTAG); + String outFile = defaultProps.getProperty(this.OUTTAG); + String listFile = defaultProps.getProperty(this.LISTTAG); + String pdbname1 = defaultProps.getProperty(this.PDBTAG1); + String pdbname2 = defaultProps.getProperty(this.PDBTAG2); + + // validate all command line arguments + if ((listFile == null) && ((pdbname1 == null) || (pdbname2 == null))) + { + System.out.println("Missing listFile or missing pdb filenames in Property file " + propFile); + return; + } + + if (logFile == null || logFile.length() == 0) + logFile = this.LOGFILE; + + if (outFile == null || outFile.length() == 0) + outFile = this.LOGFILE; + + + // validate log and output files + if (! validateAndCreateFile(logFile)) return; + if (! validateAndCreateFile(outFile)) return; + LOGFILE = logFile; + OUTFILE = outFile; + + System.out.println("Output is written to log file... " + LOGFILE); + if (listFile != null) + { + if (! checkFile(listFile)) return; + populatePDBArray(listFile); + } else { + if (! checkFile(pdbname1)) return; + if (! checkFile(pdbname2)) return; + populatePDBArray(pdbname1, pdbname2); + } + } + + /** + * This method validates if the file passed exists. + * If it does , then it is moved to <filename>.bak and then creates a newFile. + * Also validates permissions to create. + * + * @param filename name of file to be created + * @return true, if file could be created + * false, if could not. + * + */ + private boolean validateAndCreateFile (String filename) + { + if (filename == null) return false; + + File f = null; + try { + f = new File(filename); + } catch (NullPointerException e) { + System.out.println("Could not create a File object for file " + filename); + return false; + } + + if (f.exists()) + { + String newFile = filename + ".bak"; + File newF=null; + try { + newF = new File(newFile); + } catch (Exception ex) { + System.out.println("Could not get File Object instance for " + newFile); + return false; + } + + if (newF.exists()) + { + try { + newF.delete(); + } catch ( SecurityException se) { + System.out.println("Could not get delete " + newFile); + return false; + } + } + + try { + if (! f.renameTo(newF)) + { + System.out.println("Could not rename " + filename + " to " + newFile ); + return false; + } + } catch (SecurityException s) { + System.out.println("SecurityException: " + s.toString()); + return false; + } catch (NullPointerException n) { + System.out.println("NullPointerException: " + n.toString()); + return false; + } + } else { + try { + if (! f.createNewFile()) + { + System.out.println("Could not create " + filename + " Check permissions.."); + return false; + } + } catch (IOException e) { + System.out.println("IOException: " + e.toString()); + return false; + } catch (SecurityException s) { + System.out.println("SecuriityException: " + s.toString() ); + return false; + } + + } + + return true; + + } + + /** + * This method validates if the file exists and is readable + * + * @param filename name of file to be created + * @return true, if file exists and is readable + * false, if not. + * + */ + private boolean checkFile(String filename) + { + if (filename == null) return false; + + File f = null; + try { + f = new File(filename); + } catch (NullPointerException e) { + System.out.println("Could not create a File object for file " + filename); + return false; + } + + if (! f.exists()) + { + System.out.println("File " + filename + " does not exist... "); + return false; + } + + if (! f.canRead()) + { + System.out.println("Cannot read file " + filename); + return false; + } + + return true; + + } + + /** + * This method populates the pdb arrays with the names of the pdbs to + * compare. Ths listFile lists a series of entries, wherein each + * line indicates the PDB names to be compared. + * <pdbname1>=<pdbname2> + * + * @param listFile name of the listfile + * @return + * + */ + private void populatePDBArray(String listFile) + { + // open ListFile and populate the PDB list to be compared + if (listFile != null) + { + Properties listProps = new Properties(); + try { + FileInputStream in = new FileInputStream(listFile); + listProps.load(in); + in.close(); + } catch (IOException ex) { + System.out.println("Could not open List File " + listFile); + return; + } + + pdbarr1 = new String[listProps.size()]; + pdbarr2 = new String[listProps.size()]; + Enumeration e = listProps.keys(); + int j=0; + while (e.hasMoreElements()) + { + pdbarr1[j] = (String)e.nextElement(); + pdbarr2[j] = listProps.getProperty(pdbarr1[j]); + j++; + } + + } + } + + /** + * This method populates the pdb arrays with the names of the pdbs to + * compare. + * + * @param pdbname1 Name of 2nd PDB file to be compared + * @param pdbname2 Name of 2nd PDB file to be compared + * @return + * + */ + private void populatePDBArray(String pdbname1, String pdbname2) + { + if (pdbname1 == null) return; + if (pdbname2 == null) return; + + if ((pdbname1 != null) && (pdbname2 != null)) + { + pdbarr1 = new String[1]; + pdbarr2 = new String[1]; + + pdbarr1[0] = pdbname1; + pdbarr2[0] = pdbname2; + } + } + + /** + * This method populates the pdb arrays with the names of the pdbs to + * compare. + * + * @param arrayno Array number which corresponds to the pdb array + * containing list of pdbs + * If 1 then send pdbarr1, if 2 send pdbarr2 else null + * + * @return PDB string array containing list of PDB's + * + */ + private String[] getPDBArray(int arrayno) + { + if (arrayno == 1) return pdbarr1; + if (arrayno == 2) return pdbarr2; + + return null; + } + + /** + * This method comares 2 PDB's and returns true if comparison is equal. + * It uses the PDB Decoder class to decode to a PDB structure and then + * does record comparison + * + * @param pdbname1 Name of one PDB file to be compared + * @param pdbname2 Name of other PDB file to be compared + * + * @return returns true if both PDB's are equal else returns false + * + */ + private boolean comparePDB(String pdbname1, String pdbname2) + { + PalmDB pdb1=null, pdb2=null; + PDBDecoder decoder = new PDBDecoder(); + try { + pdb1 = decoder.parse(pdbname1); + } catch (Exception e) { + System.out.println("Could not parse PDB " + pdbname1); + return false; + } + + try { + pdb2 = decoder.parse(pdbname2); + } catch (Exception e) { + System.out.println("Could not parse PDB " + pdbname2); + return false; + } + + if (pdb1.equals(pdb2)) { + writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are equal"); + + return true; + } else { + writeToLog("PDB " + pdbname1 + " and PDB " + pdbname2 + " are not equal"); + return false; + } + } + + + + /** + * Write message to LOGFILE + * + * @param msg Message to be written to log file + * @return + * + */ + private void writeToLog(String msg) + { + if (msg == null) return; + + // Get Output Stream from Log file + RandomAccessFile raf=null; + try { + raf = new RandomAccessFile(LOGFILE, "rw"); + } catch (Exception e) { + System.out.println ("Could not open file " + LOGFILE); + return; + } + + try { + long len = raf.length(); + raf.seek(len); + raf.write(msg.getBytes()); + raf.write("\n".getBytes()); + } catch (IOException e) { + System.out.println("ERROR: Could not write to File " + LOGFILE); + return; + } + } + + /** + * Write status of comparison to OUTFILE + * + * @param status Indicates whether comparsion of PDB's PASSED or FAILED + * @param pdbname1 file name of pdb which was compared. + * @param pdbname2 file name of pdb which was compared. + * + * @return + * + */ + private void writeToOutputFile(String status, String pdbname1, String pdbname2) + { + if (status == null) return; + if (pdbname1 == null) return; + if (pdbname2 == null) return; + + String msg = pdbname1 + "=" + pdbname2 + ":" + status; + + // Get Output Stream from Log file + RandomAccessFile raf=null; + try { + raf = new RandomAccessFile(OUTFILE, "rw"); + } catch (Exception e) { + System.out.println ("Could not open file " + OUTFILE); + return; + } + + try { + long len = raf.length(); + raf.seek(len); + + raf.write(msg.getBytes()); + raf.write("\n".getBytes()); + } catch (IOException e) { + System.out.println("ERROR: Could not write to File " + OUTFILE); + return; + } + + try { + raf.close(); + } catch (Exception e) { + System.out.println("ERROR: Could not close File " + OUTFILE); + return; + } + + } + + + + /** + * Main starting block of execution + * + * @param command line args captured in an array of Strings + * @return + * + */ + public static void main(String args[]) + { + + Date startTime = new Date(); + pdbcomparison pdbcmp = new pdbcomparison(); + int nargs = args.length; + int status=0; + + if (nargs != 1) + { + System.out.println("Incorrect no. of arguments passed..."); + pdbcmp.usage(); + System.exit(-1); + + } + + String propFile = args[0]; + + File f=null; + try { + f = new File(propFile); + } catch (Exception e) { + System.out.println("Exception: Could not open file " + propFile); + System.exit(-1); + } + + if (! f.canRead()) { + System.out.println("Exception: " + propFile + " is not a file "); + System.exit(-1); + } + + if (! f.canRead()) { + System.out.println("Exception: Cannot open file for reading. Please check permissions "); + System.exit(-1); + } + + // parse Property file + pdbcmp.parsePropertyFile(propFile); + + String pdbarr1[] = pdbcmp.getPDBArray(1); + String pdbarr2[] = pdbcmp.getPDBArray(2); + if ( (pdbarr1 == null) || + (pdbarr2 == null) || + (pdbarr1.length == 0) || + (pdbarr1.length == 0)) + { + System.out.println("pdbArray is empty. No PDBS to compare... \n"); + System.exit(-1); + } + + + pdbcmp.writeToLog("************** Start *****************"); + pdbcmp.writeToLog("PDB Comparison: start time " + startTime); + for (int i=0; i<pdbarr1.length; i++) + { + Date pdb_startTime = new Date(); + pdbcmp.writeToLog("\n"); + pdbcmp.writeToLog("start time " + pdb_startTime); + boolean val = pdbcmp.comparePDB(pdbarr1[i], pdbarr2[i]); + Date pdb_endTime = new Date(); + pdbcmp.writeToLog("end time " + pdb_endTime); + + if (val) { + pdbcmp.writeToOutputFile("PASSED", pdbarr1[i], pdbarr2[i]); + status=0; + } else { + pdbcmp.writeToOutputFile("FAILED", pdbarr1[i], pdbarr2[i]); + status=-1; + } + } + + Date endTime = new Date(); + pdbcmp.writeToLog("PDB Comparison: end time " + endTime); + pdbcmp.writeToLog("************** End *****************n"); + pdbcmp.writeToLog("\n"); + + System.exit(status); + } +} |