diff --git a/NMSReportingSuite/pom.xml b/NMSReportingSuite/pom.xml index d2ae0535..83270b55 100644 --- a/NMSReportingSuite/pom.xml +++ b/NMSReportingSuite/pom.xml @@ -315,6 +315,39 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/ma + + + org.apache.activemq + activemq-broker + 5.15.16 + + + org.apache.activemq + activemq-client + 5.15.16 + + + org.apache.activemq + activemq-spring + 5.15.16 + + + org.apache.activemq + activemq-pool + 5.15.16 + + + org.springframework + spring-jms + ${springframework.version} + + + javax.jms + javax.jms-api + 2.0.1 + + + com.ibm.icu diff --git a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/EtlNotificationServiceImpl.java b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/EtlNotificationServiceImpl.java index 03694472..7df1edb3 100644 --- a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/EtlNotificationServiceImpl.java +++ b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/business/impl/EtlNotificationServiceImpl.java @@ -12,6 +12,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.core.JmsTemplate; import org.springframework.stereotype.Service; import javax.transaction.Transactional; @@ -33,6 +34,9 @@ public class EtlNotificationServiceImpl implements EtlNotificationService { @Autowired private NoticeDao noticeDao; + @Autowired + private JmsTemplate jmsTemplate; + public final String getNoticeTypeAsMonthlyReports = "MONTHLY_REPORTS"; public final String getNoticeTypeAsQuarterReports = "QUARTERLY_NOTICE"; public final String getNoticeTypeAsYearlyReports = "YEARLY_NOTICE"; @@ -213,18 +217,21 @@ private void addGeneratedReportNotifications(List notices, List @Override @Transactional public boolean scheduledNotification() { - if (isAutoGenerate()){ - try { - dailyNotifications(); - } catch (Exception e) { - LOGGER.error("Error occurred while processing daily failed ETL: ", e); + if (isAutoGenerate()) { + try { + jmsTemplate.convertAndSend("etl-notification", "PROCESS_DAILY_NOTIFICATIONS"); + LOGGER.info("Successfully sent PROCESS_DAILY_NOTIFICATIONS to etl-notification queue."); + } catch (Exception e) { + LOGGER.error("Error occurred while sending message to etl-notification queue: ", e); + return false; + } + return true; } - LOGGER.info("Finished dailyFailedEtlForTheDay method"); - return true; - } + LOGGER.info("Auto-generation is disabled. Skipping scheduled notification."); return false; } + private java.sql.Date getYesterdayDate() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); diff --git a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/config/ActiveMQConfig.java b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/config/ActiveMQConfig.java new file mode 100644 index 00000000..80544d77 --- /dev/null +++ b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/config/ActiveMQConfig.java @@ -0,0 +1,67 @@ +package com.beehyv.nmsreporting.config; + +import org.apache.activemq.ActiveMQConnectionFactory; +import org.apache.activemq.command.ActiveMQQueue; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.jms.annotation.EnableJms; +import org.springframework.jms.config.DefaultJmsListenerContainerFactory; +import org.springframework.jms.config.JmsListenerContainerFactory; +import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.support.converter.MessageConverter; +import org.springframework.jms.support.converter.SimpleMessageConverter; + +import javax.jms.ConnectionFactory; +import javax.jms.Queue; + +import java.util.Arrays; + +import static com.beehyv.nmsreporting.utils.Global.getPropertyValueApp; + +@Configuration +@EnableJms +@ComponentScan(basePackages = {"com.beehyv.nmsreporting.listeners", "com.beehyv.nmsreporting.otherpackages"}) +public class ActiveMQConfig { + + private static final String activeMqUrl = getPropertyValueApp("activeMqUrl"); + + + @Bean + public ActiveMQConnectionFactory connectionFactory() { + ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(); + factory.setBrokerURL(activeMqUrl); + factory.setTrustAllPackages(false); + factory.setTrustedPackages(Arrays.asList( + "com.beehyv.nmsreporting.model", + "com.beehyv.nmsreporting.entity", + "java.util", + "java.lang" + )); + return factory; + } + + @Bean + public JmsTemplate jmsTemplate() { + JmsTemplate template = new JmsTemplate(); + template.setConnectionFactory(connectionFactory()); + template.setMessageConverter(messageConverter()); + return template; + } + + @Bean + public MessageConverter messageConverter() { + return new SimpleMessageConverter(); + } + + @Bean + public JmsListenerContainerFactory jmsListenerContainerFactory(ConnectionFactory connectionFactory) { + DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory(); + factory.setConnectionFactory(connectionFactory); + // Optional: Configure additional settings + factory.setConcurrency("1-5"); // 1-5 concurrent consumers + factory.setRecoveryInterval(1000L); // 1 second recovery interval + return factory; + } +} \ No newline at end of file diff --git a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/entity/ReportMessage.java b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/entity/ReportMessage.java new file mode 100644 index 00000000..bbd6c2f0 --- /dev/null +++ b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/entity/ReportMessage.java @@ -0,0 +1,54 @@ +package com.beehyv.nmsreporting.entity; + +import java.io.Serializable; +import java.util.Date; + + +public class ReportMessage implements Serializable { + private static final long serialVersionUID = 1L; + private String reportType; + private Date fromDate; + private Date toDate; + private boolean isWeekly; + + public ReportMessage() {} + + public ReportMessage(String reportType, Date fromDate, Date toDate, boolean isWeekly) { + this.reportType = reportType; + this.fromDate = fromDate; + this.toDate = toDate; + this.isWeekly = isWeekly; + } + + public String getReportType() { + return reportType; + } + + public void setReportType(String reportType) { + this.reportType = reportType; + } + + public Date getFromDate() { + return fromDate; + } + + public void setFromDate(Date fromDate) { + this.fromDate = fromDate; + } + + public Date getToDate() { + return toDate; + } + + public void setToDate(Date toDate) { + this.toDate = toDate; + } + + public boolean isWeekly() { + return isWeekly; + } + + public void setWeekly(boolean weekly) { + isWeekly = weekly; + } +} diff --git a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AshaSmsAutoTargetFileGeneration.java b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AshaSmsAutoTargetFileGeneration.java index ba581fa4..9250de69 100644 --- a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AshaSmsAutoTargetFileGeneration.java +++ b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AshaSmsAutoTargetFileGeneration.java @@ -6,6 +6,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.core.JmsTemplate; import static com.beehyv.nmsreporting.utils.Global.isAutoGenerate; @@ -19,18 +20,19 @@ public class AshaSmsAutoTargetFileGeneration { @Autowired AshaTargetFileService ashaTargetFileService; + @Autowired + private JmsTemplate jmsTemplate; + public void processTargetFile() { if (isAutoGenerate()) { try { - TargetFileNotification targetFileNotification = ashaTargetFileService.generateTargetFile(); - if (targetFileNotification != null) { - smsNotificationService.sendNotificationRequest(targetFileNotification); - } else { - LOGGER.error("Failed to generate target file."); - } + + jmsTemplate.convertAndSend("target-file-queue", "PROCESS_TARGET_FILE"); + + LOGGER.info("Published target file processing event to 'target-file-queue'."); } catch (Exception e) { - LOGGER.error("Error processing target file: {}", e.getMessage(), e); + LOGGER.error("Failed to publish target file processing event: {}", e.getMessage(), e); } } } diff --git a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AutoReportEmailGeneration.java b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AutoReportEmailGeneration.java index eb222ffe..0483988b 100644 --- a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AutoReportEmailGeneration.java +++ b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/job/AutoReportEmailGeneration.java @@ -2,12 +2,19 @@ import com.beehyv.nmsreporting.business.AdminService; import com.beehyv.nmsreporting.business.EmailService; +import com.beehyv.nmsreporting.entity.ReportMessage; import com.beehyv.nmsreporting.enums.ReportType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.core.JmsTemplate; +import org.springframework.transaction.annotation.Transactional; +import javax.jms.Destination; import java.util.Calendar; import java.util.Date; import java.util.HashMap; +import java.util.Queue; import static com.beehyv.nmsreporting.enums.ReportType.maCourse; import static com.beehyv.nmsreporting.utils.Global.isAutoGenerate; @@ -20,27 +27,39 @@ public class AutoReportEmailGeneration { @Autowired AdminService adminService; + @Autowired + private JmsTemplate jmsTemplate; + @Autowired EmailService emailService; + + + private static final Logger LOGGER = LoggerFactory.getLogger(AutoReportEmailGeneration.class); + + + public boolean executeInternal() { - if(isAutoGenerate()) { - Calendar aCalendar = Calendar.getInstance(); - aCalendar.add(Calendar.MONTH, -1); - aCalendar.set(Calendar.DATE, 1); - aCalendar.set(Calendar.MILLISECOND, 0); - aCalendar.set(Calendar.SECOND, 0); - aCalendar.set(Calendar.MINUTE, 0); - aCalendar.set(Calendar.HOUR_OF_DAY, 0); + if (!isAutoGenerate()) { + LOGGER.info("Auto-generation is disabled. Skipping report generation."); + return false; + } + try { - Date fromDate = aCalendar.getTime(); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH, -1); + calendar.set(Calendar.DATE, 1); + calendar.set(Calendar.MILLISECOND, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.HOUR_OF_DAY, 0); + Date fromDate = calendar.getTime(); + calendar.add(Calendar.MONTH, 1); + Date toDate = calendar.getTime(); + + LOGGER.info("Starting report generation preprocessing for period from {} to {}", fromDate, toDate); - aCalendar.add(Calendar.MONTH, 1); - Date toDate = aCalendar.getTime(); - Date startDate = new Date(0); - /*adminService.getCircleWiseAnonymousFiles(fromDate,toDate);*/ - System.out.println("Report generation started"); adminService.createFiles(maCourse.getReportType()); adminService.createFolders(ReportType.maAnonymous.getReportType()); adminService.createFiles(ReportType.maInactive.getReportType()); @@ -51,52 +70,69 @@ public boolean executeInternal() { adminService.createFiles(ReportType.motherRejected.getReportType()); adminService.createFiles(ReportType.childRejected.getReportType()); + LOGGER.info("Preprocessing complete. Files and folders created."); + - adminService.createMotherImportRejectedFiles(1,false); - System.out.println("Mother_Rejection Monthly reports generated"); - adminService.createChildImportRejectedFiles(1,false); - System.out.println("Child_Rejection Monthly reports generated"); - adminService.getCircleWiseAnonymousFiles(fromDate, toDate); - System.out.println("MA_Anonymous reports generated"); - adminService.getCumulativeCourseCompletionFiles(toDate); - System.out.println("MA_Course_Completion reports generated"); - adminService.getCumulativeInactiveFiles(toDate); - System.out.println("MA_Inactive reports generated"); - adminService.porcessKilkariSixWeekNoAnswerFiles(fromDate, toDate); - System.out.println("KilkariSixWeekNoAnswer reports generated"); - adminService.processKilkariLowListenershipDeactivationFiles(fromDate, toDate); - System.out.println("LowListenershipDeactivation reports generated"); - adminService.getKilkariSelfDeactivationFiles(fromDate, toDate); - System.out.println("KilkariSelfDeactivation reports generated"); - adminService.processKilkariLowUsageFiles(fromDate, toDate); - System.out.println("KilkariLowUsage reports generated"); - System.out.println("Report generation done"); + publishReportEvent("Mother_Rejected", "mother-rejected", fromDate, toDate, false); + publishReportEvent("Child_Rejected", "child-rejected", fromDate, toDate, false); + publishReportEvent("MA_ANONYMOUS", "ma-anonymous-queue", fromDate, toDate, false); + publishReportEvent("MA_Course_Completion", "ma-course-completion", fromDate, toDate, false); + publishReportEvent("MA_Inactive", "ma-inactive-reports", fromDate, toDate, false); + publishReportEvent("KilkariSixWeekNoAnswer", "kilkar-sixWeek-NoAnswer", fromDate, toDate, false); + publishReportEvent("LowListenershipDeactivation", "low-listenership-deactivation", fromDate, toDate, false); + publishReportEvent("KilkariSelfDeactivation", "kilkari-self-deactivation", fromDate, toDate, false); + publishReportEvent("KilkariLowUsage", "kilkari-low-usage", fromDate, toDate, false); + LOGGER.info("Report generation events published successfully."); return true; + } catch (Exception e) { + LOGGER.error("Error during report generation processing: ", e); + return false; } - return false; } + + private void publishReportEvent(String reportType, String queueName, Date fromDate, Date toDate, boolean isWeekly) { + ReportMessage reportMessage = new ReportMessage(reportType, fromDate, toDate, isWeekly); + try { + jmsTemplate.convertAndSend(queueName, reportMessage); + LOGGER.info("Published report event: {} to queue: {}", reportType, queueName); + } catch (Exception e) { + LOGGER.error("Failed to publish report event {} to queue {}: ", reportType, queueName, e); + } + } + + + public boolean executeWeekly() { - if(isAutoGenerate()) { - Calendar aCalendar = Calendar.getInstance(); - aCalendar.add(Calendar.DAY_OF_WEEK, -(aCalendar.get(Calendar.DAY_OF_WEEK) - 1)); - Date toDate = aCalendar.getTime(); + if (!isAutoGenerate()) { + LOGGER.info("Auto-generation is disabled. Skipping weekly report generation."); + return false; + } + try { + Calendar calendar = Calendar.getInstance(); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + calendar.add(Calendar.DAY_OF_WEEK, -(dayOfWeek - 1)); + Date weekStartDate = calendar.getTime(); + + Date toDate = new Date(); + + LOGGER.info("Weekly report generation: weekStartDate = {}, toDate = {}", weekStartDate, toDate); + -// adminService.createFiles(ReportType.flwRejected.getReportType()); adminService.createFiles(ReportType.motherRejected.getReportType()); adminService.createFiles(ReportType.childRejected.getReportType()); -// adminService.createFlwImportRejectedFiles(toDate); -// System.out.println("FLW_Rejection reports generated"); - adminService.createMotherImportRejectedFiles(1,true); - System.out.println("Mother_Rejection reports generated"); - adminService.createChildImportRejectedFiles(1,true); - System.out.println("Child_Rejection reports generated"); + LOGGER.info("Weekly report generation preprocessing complete. Files and folders created."); + publishReportEvent("Mother_Rejected", "mother-rejected", weekStartDate, toDate, true); + publishReportEvent("Child_Rejected", "child-rejected", weekStartDate, toDate, true); + LOGGER.info("Weekly report generation events published successfully."); return true; + } catch (Exception e) { + LOGGER.error("Error during weekly report generation processing: ", e); + return false; } - return false; } public HashMap sendFirstMail() { diff --git a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/listeners/ReportGenerationListener.java b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/listeners/ReportGenerationListener.java new file mode 100644 index 00000000..3e3e5968 --- /dev/null +++ b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/listeners/ReportGenerationListener.java @@ -0,0 +1,170 @@ +package com.beehyv.nmsreporting.listeners; + +import com.beehyv.nmsreporting.business.AshaTargetFileService; +import com.beehyv.nmsreporting.business.EtlNotificationService; +import com.beehyv.nmsreporting.business.SmsNotificationService; +import com.beehyv.nmsreporting.business.impl.TargetFileNotification; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jms.annotation.JmsListener; +import org.springframework.stereotype.Component; + +import com.beehyv.nmsreporting.entity.ReportMessage; +import com.beehyv.nmsreporting.business.AdminService; + +@Component +public class ReportGenerationListener { + + @Autowired + private AdminService adminService; + + @Autowired + SmsNotificationService smsNotificationService; + + @Autowired + AshaTargetFileService ashaTargetFileService; + + @Autowired + private EtlNotificationService etlNotificationService; + + private Logger LOGGER = LoggerFactory.getLogger(ReportGenerationListener.class); + + @JmsListener(destination = "ma-anonymous-queue") + public void handleMaAnonymousReport(ReportMessage message) { + try { + LOGGER.info("Processing MA_ANONYMOUS report: from {} to {}", message.getFromDate(), message.getToDate()); + adminService.getCircleWiseAnonymousFiles(message.getFromDate(), message.getToDate()); + LOGGER.info("MA_ANONYMOUS report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing MA_ANONYMOUS report: ", e); + } + } + + @JmsListener(destination = "ma-course-completion") + public void handleMaCourseCompletionReport(ReportMessage message) { + try { + LOGGER.info("Processing MA_Course_Completion report: toDate {}", message.getToDate()); + adminService.getCumulativeCourseCompletionFiles(message.getToDate()); + LOGGER.info("MA_Course_Completion report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing MA_Course_Completion report: ", e); + } + } + + @JmsListener(destination = "mother-rejected") + public void handleMotherRejectedReport(ReportMessage message) { + try { + LOGGER.info("Processing Mother_Rejected report."); + adminService.createMotherImportRejectedFiles(1, message.isWeekly()); + LOGGER.info("Mother_Rejected report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing Mother_Rejected report: ", e); + } + } + + @JmsListener(destination = "child-rejected") + public void handleChildRejectedReport(ReportMessage message) { + try { + LOGGER.info("Processing Child_Rejected report."); + adminService.createChildImportRejectedFiles(1, message.isWeekly()); + LOGGER.info("Child_Rejected report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing Child_Rejected report: ", e); + } + } + + @JmsListener(destination = "ma-inactive-reports") + public void handleMaInactiveReport(ReportMessage message) { + try { + LOGGER.info("Processing MA_Inactive report: toDate {}", message.getToDate()); + adminService.getCumulativeInactiveFiles(message.getToDate()); + LOGGER.info("MA_Inactive report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing MA_Inactive report: ", e); + } + } + + @JmsListener(destination = "kilkar-sixWeek-NoAnswer") + public void handleKilkariSixWeekNoAnswerReport(ReportMessage message) { + try { + LOGGER.info("Processing KilkariSixWeekNoAnswer report: from {} to {}", message.getFromDate(), message.getToDate()); + adminService.porcessKilkariSixWeekNoAnswerFiles(message.getFromDate(), message.getToDate()); + LOGGER.info("KilkariSixWeekNoAnswer report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing KilkariSixWeekNoAnswer report: ", e); + } + } + + @JmsListener(destination = "low-listenership-deactivation") + public void handleLowListenershipDeactivationReport(ReportMessage message) { + try { + LOGGER.info("Processing LowListenershipDeactivation report: from {} to {}", message.getFromDate(), message.getToDate()); + adminService.processKilkariLowListenershipDeactivationFiles(message.getFromDate(), message.getToDate()); + LOGGER.info("LowListenershipDeactivation report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing LowListenershipDeactivation report: ", e); + } + } + + @JmsListener(destination = "kilkari-self-deactivation") + public void handleKilkariSelfDeactivationReport(ReportMessage message) { + try { + LOGGER.info("Processing KilkariSelfDeactivation report: from {} to {}", message.getFromDate(), message.getToDate()); + adminService.getKilkariSelfDeactivationFiles(message.getFromDate(), message.getToDate()); + LOGGER.info("KilkariSelfDeactivation report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing KilkariSelfDeactivation report: ", e); + } + } + + @JmsListener(destination = "kilkari-low-usage") + public void handleKilkariLowUsageReport(ReportMessage message) { + try { + LOGGER.info("Processing KilkariLowUsage report: from {} to {}", message.getFromDate(), message.getToDate()); + adminService.processKilkariLowUsageFiles(message.getFromDate(), message.getToDate()); + LOGGER.info("KilkariLowUsage report generated successfully."); + } catch (Exception e) { + LOGGER.error("Error processing KilkariLowUsage report: ", e); + } + } + + + + @JmsListener(destination = "target-file-queue") + public void handleTargetFileMessage(String message) { + if (message == null) { + LOGGER.error("Target file message cannot be null"); + return; + } + + LOGGER.info("Processing target file event: {}", message); + try { + TargetFileNotification notification = ashaTargetFileService.generateTargetFile(); + if (notification == null) { + LOGGER.error("Failed to generate target file."); + } + smsNotificationService.sendNotificationRequest(notification); + LOGGER.info("Target file processed successfully"); + } catch (Exception e) { + LOGGER.error("Error processing target file: {}", e.getMessage(), e); + } + } + + @JmsListener(destination = "etl-notification") + public void handleEtlNotificationMessage(String message) { + if (message == null || message.trim().isEmpty()) { + LOGGER.warn("Received an empty or null daily notification message. Skipping processing."); + return; + } + + LOGGER.info("Received daily notification message: {}", message); + try { + etlNotificationService.dailyNotifications(); + LOGGER.info("Daily notification processing completed successfully for message: {}", message); + } catch (Exception e) { + LOGGER.error("Error processing daily notification message: {}. Exception: {}", message, e.getMessage(), e); + } + } + +} diff --git a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/utils/Global.java b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/utils/Global.java index bd8e0dd1..3e7844d1 100644 --- a/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/utils/Global.java +++ b/NMSReportingSuite/src/main/java/com/beehyv/nmsreporting/utils/Global.java @@ -130,6 +130,21 @@ public static String retrieveUiAddress() { return uiAddress; } + private static Properties loadAppProperties() { + Properties prop = new Properties(); + try (InputStream input = new FileInputStream(new File("../webapps/NMSReportingSuite/WEB-INF/classes/app.properties"))) { + prop.load(input); + } catch (IOException ex) { + LOGGER.error("Failed to load app.properties", ex); + } + return prop; + } + + public static String getPropertyValueApp(String key) { + return loadAppProperties().getProperty(key); + } + + public static boolean isAutoGenerate() { Properties prop = new Properties(); InputStream input = null;