From df95f627e40ca892c60e37d83a96358fbbe21d22 Mon Sep 17 00:00:00 2001 From: Parshad Patel Date: Fri, 10 Aug 2018 18:41:57 +0900 Subject: Fix NPE & use try-with-resources issues Sonar issues fix in ReportHandler.java Issue-ID: PORTAL-342 Change-Id: Iaab16fefb8abe99e70793dbb8ae12e66cdf6b365 Signed-off-by: Parshad Patel --- .../portalsdk/analytics/model/ReportHandler.java | 269 ++++++++------------- 1 file changed, 100 insertions(+), 169 deletions(-) diff --git a/ecomp-sdk/epsdk-analytics/src/main/java/org/onap/portalsdk/analytics/model/ReportHandler.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/onap/portalsdk/analytics/model/ReportHandler.java index 415edb0c..00e9dfea 100644 --- a/ecomp-sdk/epsdk-analytics/src/main/java/org/onap/portalsdk/analytics/model/ReportHandler.java +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/onap/portalsdk/analytics/model/ReportHandler.java @@ -505,13 +505,15 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { name = ""; } */ } - int cw = 0; - cw = name.trim().length() + 12; + //int cw = 0; + //cw = name.trim().length() + 12; // if(i!=cellWidth.size()-1) - if(sheet.getColumnWidth((short)0)< (short) name.trim().length()) - sheet.setColumnWidth((short)0, (short) name.trim().length()); - if(sheet.getColumnWidth((short)1)< (short) value.trim().length()) - sheet.setColumnWidth((short)1, (short) value.trim().length()); + if(name!=null && (sheet.getColumnWidth((short)0)< (short) name.trim().length())){ + sheet.setColumnWidth((short)0, (short) name.trim().length()); + } + if(sheet.getColumnWidth((short)1)< (short) value.trim().length()){ + sheet.setColumnWidth((short)1, (short) value.trim().length()); + } name = ""; value = ""; @@ -969,22 +971,16 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { SimpleDateFormat MMMMMDDYYYYHHMMSS = new SimpleDateFormat("MMMMM-dd-yyyy HH:mm:ss"); - - - ResultSet rs = null; - Connection conn = null; - Statement st = null; ResultSetMetaData rsmd = null; CreationHelper createHelper = wb.getCreationHelper(); if(nvl(sql_whole).length() >0 && rr.getReportType().equals(AppConstants.RT_LINEAR)) { - try { - conn = ConnectionUtils.getConnection(rr.getDbInfo()); - st = conn.createStatement(); + try(Connection conn = ConnectionUtils.getConnection(rr.getDbInfo()); + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery(sql_whole)) { System.out.println("************* Map Whole SQL *************"); System.out.println(sql_whole); System.out.println("*****************************************"); - rs = st.executeQuery(sql_whole); rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); HashMap colHash = new HashMap(); @@ -1655,18 +1651,7 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { } catch (Exception ex) { if(!(ex.getCause() instanceof java.net.SocketException) ) throw new RaptorException (ex); - } finally { - try { - if(conn!=null) - conn.close(); - if(st!=null) - st.close(); - if(rs!=null) - rs.close(); - } catch (SQLException ex) { - throw new RaptorException(ex); - } - } + } /*if(Globals.getShowDisclaimer() && !Globals.disclaimerPositionedTopInCSVExcel()) { rowNum += 1; @@ -2793,8 +2778,8 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { logger.debug(EELFLoggerDelegate.debugLogger, ("Xls File name " + AppUtils.getTempFolderPath() + xlsFName)); - FileOutputStream xlsOut = new FileOutputStream(FilenameUtils.normalize(AppUtils.getTempFolderPath() - + xlsFName)); + try(FileOutputStream xlsOut = new FileOutputStream(FilenameUtils.normalize(AppUtils.getTempFolderPath() + + xlsFName))){ // BufferedWriter xlsOut = new BufferedWriter(new // FileWriter(AppUtils // .getTempFolderPath() @@ -2832,7 +2817,7 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { // + user_id + ".xls"); wb.write(xlsOut); xlsOut.flush(); - xlsOut.close(); + } return xlsFName; } catch (Exception e) { e.printStackTrace(); @@ -3269,8 +3254,6 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { Map styles = new HashMap(); HttpSession session = request.getSession(); - ServletOutputStream sos = null; - BufferedInputStream buf = null; XSSFWorkbook wb = null; String formattedReportName = new HtmlStripper().stripSpecialCharacters(rr.getReportName()); String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date()); @@ -3324,7 +3307,6 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { String sheetRef = null; - FileOutputStream os = null; //template file File templateFile = null; if(isDashboard) { @@ -3344,7 +3326,7 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { count++; Map.Entry entry = (Entry) iter.next(); ReportRuntime rrDashRep = (ReportRuntime) entry.getValue(); - os = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); + try(FileOutputStream os = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"))){ if(count==1) { if(nvl(rr.getTemplateFile()).length()>0) { @@ -3374,21 +3356,18 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { os.flush(); if(nvl(rr.getTemplateFile()).length()>0) { readTemplate.close(); - } - os.close(); - - FileInputStream inF = new FileInputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); - FileOutputStream outStream = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx")); - copyStream(inF, outStream); - outStream.flush(); - outStream.close(); - inF.close(); + } + + try(FileInputStream inF = new FileInputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); + FileOutputStream outStream = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"))){ + copyStream(inF, outStream); + outStream.flush(); + } } - + } FileInputStream xlsIn = null; POIFSFileSystem fileSystem = null; - buf = null; FileOutputStream xlsOut = null; formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date()); String xlsFName = "dashboard"+formattedDate+user_id+".xls"; @@ -3417,39 +3396,37 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { //Step 2. Generate XML file. File tmp = File.createTempFile("sheet", ".xml"); - FileOutputStream fileOutTemp = new FileOutputStream(tmp); - Writer fw = new OutputStreamWriter(fileOutTemp, XML_ENCODING); - String sql_whole = rrDashRep.getWholeSQL(); + try(FileOutputStream fileOutTemp = new FileOutputStream(tmp); + Writer fw = new OutputStreamWriter(fileOutTemp, XML_ENCODING)){ - SpreadsheetWriter sw = new SpreadsheetWriter(fw); - sw.beginSheet(); - - - generate(wb, sw, styles, rdDashRep, sql_whole, rrDashRep, request, sheet); - - - sw.endSheet(); - - fw.flush(); - fw.close(); - fileOutTemp.flush(); - fileOutTemp.close(); - + String sql_whole = rrDashRep.getWholeSQL(); + + SpreadsheetWriter sw = new SpreadsheetWriter(fw); + sw.beginSheet(); + + + generate(wb, sw, styles, rdDashRep, sql_whole, rrDashRep, request, sheet); + + + sw.endSheet(); + + fw.flush(); + fileOutTemp.flush(); + } //Step 3. Substitute the template entry with the generated data - FileOutputStream outF = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx")); - templateFile = new File(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); - substitute(templateFile, tmp, sheetRef.substring(1), outF); - outF.flush(); - outF.close(); + try(FileOutputStream outF = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"))){ + templateFile = new File(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); + substitute(templateFile, tmp, sheetRef.substring(1), outF); + outF.flush(); + } - FileInputStream inF = new FileInputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx")); - FileOutputStream outStream = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); + try(FileInputStream inF = new FileInputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx")); + FileOutputStream outStream = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"))){ copyStream(inF, outStream); outStream.flush(); - outStream.close(); - inF.close(); + } } } } else { @@ -3459,12 +3436,12 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { extension = templateFilename.substring(templateFilename.lastIndexOf(".")+1); filename = formattedReportName+formattedDate+user_id; //filename = templateFilename.substring(0, templateFilename.lastIndexOf("."))+"_"+formattedDate+user_id; - } else + } else { filename = formattedReportName+formattedDate+user_id; - + } if(nvl(rr.getTemplateFile()).length()<=0) { - os = new FileOutputStream(AppUtils.getTempFolderPath()+"template"+formattedDate+user_id+".xlsx"); + try(FileOutputStream os = new FileOutputStream(AppUtils.getTempFolderPath()+"template"+formattedDate+user_id+".xlsx")){ wb=new XSSFWorkbook(); //Load customized styles if (rr != null) @@ -3490,11 +3467,11 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { wb.write(os); os.flush(); //wb = null; - os.close(); + } } else { - os = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); - FileInputStream readTemplate = new FileInputStream(org.onap.portalsdk.analytics.system.AppUtils.getExcelTemplatePath()+rr.getTemplateFile()); + try(FileOutputStream os = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); + FileInputStream readTemplate = new FileInputStream(org.onap.portalsdk.analytics.system.AppUtils.getExcelTemplatePath()+rr.getTemplateFile());){ wb=new XSSFWorkbook(readTemplate); if (rr != null) styles = loadXSSFStyles(rr, wb, styles); @@ -3507,15 +3484,14 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { sheetRef = sheet.getPackagePart().getPartName().getName(); wb.write(os); os.flush(); - readTemplate.close(); //wb = null; - os.close(); + } } //Step 2. Generate XML file. File tmp = File.createTempFile("sheet", ".xml"); - FileOutputStream fileOutTemp = new FileOutputStream(tmp); - Writer fw = new OutputStreamWriter(fileOutTemp, XML_ENCODING); + try(FileOutputStream fileOutTemp = new FileOutputStream(tmp); + Writer fw = new OutputStreamWriter(fileOutTemp, XML_ENCODING)){ //String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE); String sql_whole = ""; @@ -3541,30 +3517,29 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { sw.endSheet(); fw.flush(); - fw.close(); fileOutTemp.flush(); - fileOutTemp.close(); - - + } //Step 3. Substitute the template entry with the generated data - FileOutputStream outF = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx")); + try(FileOutputStream outF = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"))){ if(nvl(rr.getTemplateFile()).length()>0) { templateFile = new File(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx")); - } else + } else { templateFile = new File(AppUtils.getTempFolderPath()+"template"+formattedDate+user_id+".xlsx"); - + } substitute(templateFile, tmp, sheetRef.substring(1), outF); outF.flush(); - outF.close(); + } } //get servlet output stream response.reset(); - sos = response.getOutputStream(); + try(BufferedInputStream buf = new BufferedInputStream(new FileInputStream(AppUtils.getTempFolderPath()+filename + "."+ nvls(extension, "xlsx"))); + ServletOutputStream sos = response.getOutputStream()){ + String mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; if(extension.equals("xlsm")) mime_type = "application/vnd.ms-excel.sheet.macroEnabled.12"; @@ -3572,16 +3547,16 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { response.setHeader("Content-disposition", "attachment;filename="+filename+"."+ nvls(extension, "xlsx")); - buf = new BufferedInputStream(new FileInputStream(AppUtils.getTempFolderPath()+filename + "."+ nvls(extension, "xlsx"))); + int readBytes = 0; //read from the file; write to the ServletOutputStream while ((readBytes = buf.read()) != -1) sos.write(readBytes); - buf.close(); + sos.flush(); - sos.close(); + } logger.debug(EELFLoggerDelegate.debugLogger, ("ENDING..DOWNLOADING XLSX...")); logger.debug(EELFLoggerDelegate.debugLogger, ("##### Heap utilization statistics [MB] #####")); logger.debug(EELFLoggerDelegate.debugLogger, ("Used Memory:" @@ -3601,9 +3576,10 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { * @param out the stream to write the result to */ private static void substitute(File zipfile, File tmpfile, String entry, OutputStream out) throws IOException { - ZipFile zip = new ZipFile(zipfile); + try(ZipFile zip = new ZipFile(zipfile); + ZipOutputStream zos = new ZipOutputStream(out)){ - ZipOutputStream zos = new ZipOutputStream(out); + @SuppressWarnings("unchecked") Enumeration en = (Enumeration) zip.entries(); @@ -3611,18 +3587,17 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { ZipEntry ze = en.nextElement(); if(!ze.getName().equals(entry)){ zos.putNextEntry(new ZipEntry(ze.getName())); - InputStream is = zip.getInputStream(ze); + try(InputStream is = zip.getInputStream(ze)){ copyStream(is, zos); - is.close(); + } } } zos.putNextEntry(new ZipEntry(entry)); - InputStream is = new FileInputStream(tmpfile); - copyStream(is, zos); - zos.flush(); - zos.close(); - is.close(); - zip.close(); + try(InputStream is = new FileInputStream(tmpfile)){ + copyStream(is, zos); + } + zos.flush(); + } } private static void copyStream(InputStream in, OutputStream out) throws IOException { @@ -3641,8 +3616,6 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { //String reportTitle = rr.getReportName(); //String reportDescr = rr.getReportDescr(); PrintWriter csvOut = new PrintWriter(out); - ServletOutputStream sos = null; - BufferedInputStream buf = null; String fileName = ""; String formattedReportName = new HtmlStripper().stripSpecialCharacters(rr.getReportName()); String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date()); @@ -3667,13 +3640,10 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { } } HtmlStripper strip = new HtmlStripper(); - ResultSet rs = null; //OracleConnection conn = null; //OracleStatement st = null; //Connection conO = null; //Statement stO = null; - Connection conn = null; - Statement st = null; ResultSetMetaData rsmd = null; ColumnHeaderRow chr = null; int mb = 1024*1024; @@ -3751,16 +3721,16 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { if(nvl(sql_whole).length()>0) { - try { - conn = ConnectionUtils.getConnection(rr.getDbInfo()); - st = conn.createStatement(); + try(Connection conn = ConnectionUtils.getConnection(rr.getDbInfo()); + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery(sql_whole)) { + //conn.setDefaultRowPrefetch(1000); //st.setFetchDirection(ResultSet.TYPE_FORWARD_ONLY); //st.setFetchSize(1000); System.out.println("************* Map Whole SQL *************"); System.out.println(sql_whole); System.out.println("*****************************************"); - rs = st.executeQuery(sql_whole); //st.setFetchSize(1000); rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); @@ -3852,17 +3822,6 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { throw new RaptorException(ex); } catch (Exception ex) { throw new RaptorException (ex); - } finally { - try { - if(conn!=null) - conn.close(); - if(st!=null) - st.close(); - if(rs!=null) - rs.close(); - } catch (SQLException ex) { - throw new RaptorException(ex); - } } if(!raw) { @@ -3990,8 +3949,9 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { csvOut.println(); } // if */ - if(true && !raw) { - try { + if(!raw) { + try(ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(AppUtils.getTempFolderPath()+""+zipFName)); + FileInputStream fis = new FileInputStream(fileName)) { //final int BUFFER = 2048; @@ -4002,9 +3962,7 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { //CRC32 crc = new CRC32(); //PrintStream fos = new PrintStream(new WriterOutputStream(out)); //BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER); - //ZipOutputStream s = new ZipOutputStream(dest); - ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(AppUtils.getTempFolderPath()+""+zipFName)); - FileInputStream fis = new FileInputStream(fileName); + //ZipOutputStream s = new ZipOutputStream(dest); //s.setLevel(6); @@ -4032,7 +3990,7 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { response.reset(); java.io.File file = null; - if(true && !raw) { + if(!raw) { response.setContentType("application/octet-stream"); response.setHeader("Content-disposition","attachment;filename="+fName+".zip"); file = new java.io.File(AppUtils.getTempFolderPath()+""+fName+".zip"); @@ -4043,12 +4001,11 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { } - FileInputStream fileIn = null; int c; - try { - sos = response.getOutputStream(); - fileIn = new FileInputStream(file); - buf = new BufferedInputStream(fileIn); + try(ServletOutputStream sos = response.getOutputStream(); + FileInputStream fileIn = new FileInputStream(file); + BufferedInputStream buf = new BufferedInputStream(fileIn);) { + byte [] bOut = new byte [4096]; //read from the file; write to the ServletOutputStream //while ((readBytes = buf.read()) != -1) @@ -4062,18 +4019,6 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { ex.printStackTrace(); } catch (Exception e) { e.printStackTrace(); - } finally { - try { - if (sos != null) - sos.close(); - if (buf != null) - buf.close(); - if (fileIn!=null) { - fileIn.close(); - } - } catch (Exception e1) { - e1.printStackTrace(); - } } File f = new File (AppUtils.getTempFolderPath() @@ -4136,10 +4081,10 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { try { String xmlFName = AppUtils.generateUniqueFileName(request, reportName, AppConstants.FT_XML); - PrintWriter xmlOut = new PrintWriter(new BufferedWriter(new FileWriter(new File( - AppUtils.getTempFolderPath() + xmlFName)))); - xmlOut.println(reportXML); - xmlOut.close(); + try(PrintWriter xmlOut = new PrintWriter(new BufferedWriter(new FileWriter(new File( + AppUtils.getTempFolderPath() + xmlFName))))){ + xmlOut.println(reportXML); + } //return AppUtils.getTempFolderURL() // + java.net.URLEncoder.encode(java.net.URLDecoder.decode(xmlFName)); @@ -4810,20 +4755,17 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { dateFormat = createHelper.createDataFormat().getFormat("MMMMM-dd-yyyy HH:mm:ss"); dateFormatMap.put("MMMMMDDYYYYHHMMSS", new Short(dateFormat)); - ResultSet rs = null; - Connection conn = null; - Statement st = null; ResultSetMetaData rsmd = null; if(nvl(sql_whole).length() >0 && (rr.getReportType().equals(AppConstants.RT_LINEAR) || rr.getReportType().equals(AppConstants.RT_HIVE) )) { - try { - conn = ConnectionUtils.getConnection(rr.getDbInfo()); - st = conn.createStatement(); + try(Connection conn = ConnectionUtils.getConnection(rr.getDbInfo()); + Statement st = conn.createStatement(); + ResultSet rs = st.executeQuery(sql_whole)) { + logger.debug(EELFLoggerDelegate.debugLogger, ("************* Map Whole SQL *************")); logger.debug(EELFLoggerDelegate.debugLogger, (sql_whole)); logger.debug(EELFLoggerDelegate.debugLogger, ("*****************************************")); - rs = st.executeQuery(sql_whole); rsmd = rs.getMetaData(); int numberOfColumns = rsmd.getColumnCount(); HashMap colHash = new HashMap(); @@ -5492,18 +5434,7 @@ public class ReportHandler extends org.onap.portalsdk.analytics.RaptorObject { } catch (Exception ex) { if(!(ex.getCause() instanceof java.net.SocketException) ) throw new RaptorException (ex); - } finally { - try { - if(conn!=null) - conn.close(); - if(st!=null) - st.close(); - if(rs!=null) - rs.close(); - } catch (SQLException ex) { - throw new RaptorException(ex); - } - } + } String footer = (String) session.getAttribute("FOOTER_"+index); if(nvl(footer).length()>0) { -- cgit 1.2.3-korg