/** * Mimics org.openmrs.web.Listener.getRuntimeProperties() * * @param webappName name to use when looking up the runtime properties env var or filename * @return Properties runtime */ public static Properties getRuntimeProperties(String webappName) { Properties props = new Properties(); try { FileInputStream propertyStream = null; // Look for environment variable // {WEBAPP.NAME}_RUNTIME_PROPERTIES_FILE String env = webappName.toUpperCase() + "_RUNTIME_PROPERTIES_FILE"; String filepath = System.getenv(env); if (filepath != null) { try { propertyStream = new FileInputStream(filepath); } catch (IOException e) { } } // env is the name of the file to look for in the directories String filename = webappName + "-runtime.properties"; if (propertyStream == null) { filepath = OpenmrsUtil.getApplicationDataDirectory() + filename; try { propertyStream = new FileInputStream(filepath); } catch (IOException e) { } } // look in current directory last if (propertyStream == null) { filepath = filename; try { propertyStream = new FileInputStream(filepath); } catch (IOException e) { } } if (propertyStream == null) throw new IOException("Could not open '" + filename + "' in user or local directory."); OpenmrsUtil.loadProperties(props, propertyStream); propertyStream.close(); } catch (IOException e) { } return props; }
public static File getEmrMonitorDirectory() { File appDataDirectory = new File(OpenmrsUtil.getApplicationDataDirectory()); String emrMonitorDirectoryPath = appDataDirectory.getAbsolutePath() + File.separatorChar + EMR_MONITOR_DIRECTORY; File emrMonitorDirectory = new File(emrMonitorDirectoryPath); if (!emrMonitorDirectory.exists()) { if (emrMonitorDirectory.mkdir()) { log.debug("directory created: " + emrMonitorDirectoryPath); } else { log.error("failed to create directory: " + emrMonitorDirectoryPath); } } return emrMonitorDirectory; }
/** * Gets the folder where modules are stored. ModuleExceptions are thrown on errors * * @return folder containing modules * @should use the runtime property as the first choice if specified * @should return the correct file if the runtime property is an absolute path */ public static File getModuleRepository() { String folderName = Context.getRuntimeProperties() .getProperty(ModuleConstants.REPOSITORY_FOLDER_RUNTIME_PROPERTY); if (StringUtils.isBlank(folderName)) { AdministrationService as = Context.getAdministrationService(); folderName = as.getGlobalProperty( ModuleConstants.REPOSITORY_FOLDER_PROPERTY, ModuleConstants.REPOSITORY_FOLDER_PROPERTY_DEFAULT); } // try to load the repository folder straight away. File folder = new File(folderName); // if the property wasn't a full path already, assume it was intended to be a folder in the // application directory if (!folder.exists()) { folder = new File(OpenmrsUtil.getApplicationDataDirectory(), folderName); } // now create the modules folder if it doesn't exist if (!folder.exists()) { log.warn( "Module repository " + folder.getAbsolutePath() + " doesn't exist. Creating directories now."); folder.mkdirs(); } if (!folder.isDirectory()) throw new ModuleException( "Module repository is not a directory at: " + folder.getAbsolutePath()); return folder; }
public static File generate(HrReport report, String outputFormat, String jrxmlUrl) throws IOException { String url = Context.getRuntimeProperties().getProperty("connection.url", null); Connection conn; try { conn = connect(url); } catch (SQLException e) { log.error("Error connecting to DB.", e); return null; } Map<String, Object> map = new HashMap<String, Object>(); for (HrReportParameter reportParameter : report.getParameters()) { if (reportParameter != null) if (reportParameter.getName() != null) map.put(reportParameter.getName(), reportParameter.getValue()); } log.debug("Report parameter map: " + map); String exportPath = OpenmrsUtil.getApplicationDataDirectory(); URL resourceUrl = new URL(jrxmlUrl); InputStream is = resourceUrl.openStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); FileWriter appDirJrxml = new FileWriter(new File(exportPath + report.getFileName())); BufferedWriter bw = new BufferedWriter(appDirJrxml); String line; while ((line = br.readLine()) != null) { bw.write(line); bw.write("\n"); } bw.flush(); bw.close(); JasperPrint jasperPrint = null; try { JasperDesign jasperDesign = JRXmlLoader.load(exportPath + report.getFileName()); JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign); jasperPrint = JasperFillManager.fillReport(jasperReport, map, conn); if (outputFormat.equals("PDF")) { File pdfFile = new File( exportPath + report.getName() + new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss").format(new Date()) + ".pdf"); JasperExportManager.exportReportToPdfFile(jasperPrint, pdfFile.getAbsolutePath()); return pdfFile; } else if (outputFormat.equals("Excel")) { ByteArrayOutputStream output = new ByteArrayOutputStream(); File outputfile = new File( exportPath + report.getName() + new SimpleDateFormat("dd-MM-yyyy-HH-mm-ss").format(new Date()) + ".xls"); OutputStream outputfileStream = new FileOutputStream(outputfile); JRXlsExporter exporterXLS = new JRXlsExporter(); exporterXLS.setParameter(JRXlsExporterParameter.JASPER_PRINT, jasperPrint); exporterXLS.setParameter(JRXlsExporterParameter.OUTPUT_STREAM, output); exporterXLS.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE); exporterXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE); exporterXLS.setParameter( JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS, Boolean.TRUE); exporterXLS.exportReport(); outputfileStream.write(output.toByteArray()); outputfileStream.flush(); outputfileStream.close(); return outputfile; } } catch (JRException e) { log.error("Error generating report", e); } finally { try { if (!conn.isClosed()) { conn.close(); } } catch (SQLException e) { log.error("Exception closing report connection.", e); } } return null; }
@Override public File getFile(String relativePath) { return new File(OpenmrsUtil.getApplicationDataDirectory() + relativePath); }