package org.oliot.epcis.configuration; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.json.JSONObject; import org.oliot.epcis.service.subscription.MongoSubscription; import com.mongodb.MongoClient; import com.mongodb.client.MongoDatabase; /** * Copyright (C) 2014 Jaewook Jack Byun * * This project is part of Oliot (oliot.org), pursuing the implementation of * Electronic Product Code Information Service(EPCIS) v1.1 specification in * EPCglobal. * [http://www.gs1.org/gsmp/kc/epcglobal/epcis/epcis_1_1-standard-20140520.pdf] * * * @author Jaewook Jack Byun, Ph.D student * * Korea Advanced Institute of Science and Technology (KAIST) * * Real-time Embedded System Laboratory(RESL) * * bjw0829@kaist.ac.kr, bjw0829@gmail.com */ public class Configuration implements ServletContextListener { public static String backend; public static Logger logger; public static String webInfoPath; public static String wsdlPath; public static boolean isCaptureVerfificationOn; public static boolean isServiceRegistryReportOn; public static String onsAddress; public static boolean isQueryAccessControlOn; public static String facebookAppID; public static boolean isTriggerSupported; public static MongoClient mongoClient; public static MongoDatabase mongoDatabase; @Override public void contextDestroyed(ServletContextEvent arg0) { } @Override public void contextInitialized(ServletContextEvent servletContextEvent) { // Set Logger setLogger(); // Set Basic Configuration with Configuration.json setBasicConfiguration(servletContextEvent.getServletContext()); // load existing subscription loadExistingSubscription(); } private void setLogger() { // Log4j Setting BasicConfigurator.configure(); Logger.getRootLogger().setLevel(Level.INFO); Configuration.logger = Logger.getRootLogger(); } private void setBasicConfiguration(ServletContext context) { String path = context.getRealPath("/WEB-INF"); try { // Get Configuration.json File file = new File(path + "/Configuration.json"); FileReader fileReader = new FileReader(file); BufferedReader reader = new BufferedReader(fileReader); String data = ""; String line = null; while ((line = reader.readLine()) != null) { data += line; } reader.close(); JSONObject json = new JSONObject(data); // Set up Backend String backend = json.getString("backend"); if (backend == null) { Configuration.logger .error("Backend is null, please make sure Configuration.json is correct, and restart."); } else { Configuration.backend = backend; Configuration.logger.info("Backend - " + Configuration.backend); } Configuration.webInfoPath = context.getRealPath("/WEB-INF"); Configuration.wsdlPath = context.getRealPath("/wsdl"); // Set up capture_verification String captureVerification = json.getString("capture_verification"); if (captureVerification == null) { Configuration.logger.error( "capture_verification is null, please make sure Configuration.json is correct, and restart."); } captureVerification = captureVerification.trim(); if (captureVerification.equals("on")) { Configuration.isCaptureVerfificationOn = true; Configuration.logger.info("Capture_Verification - ON "); } else if (captureVerification.equals("off")) { Configuration.isCaptureVerfificationOn = false; Configuration.logger.info("Capture_Verification - OFF "); } else { Configuration.logger.error( "capture_verification should be (on|off), please make sure Configuration.json is correct, and restart."); } // Set up service_registry_report String serviceRegistryReport = json.getString("service_registry_report"); if (serviceRegistryReport == null) { Configuration.logger.error( "service_registry_report is null, please make sure Configuration.json is correct, and restart."); } serviceRegistryReport = serviceRegistryReport.trim(); if (serviceRegistryReport.equals("on")) { Configuration.isServiceRegistryReportOn = true; Configuration.logger.info("Service_Registry_Report - ON"); } else if (serviceRegistryReport.equals("off")) { Configuration.isServiceRegistryReportOn = false; Configuration.logger.info("Service_Registry_Report - OFF"); } else { Configuration.logger.error( "service_registry_report should be (on|off), please make sure Configuration.json is correct, and restart."); } // Set up ons_address String ons_address = json.getString("ons_address"); if (ons_address == null) { Configuration.logger .error("ons_address is null, please make sure Configuration.json is correct, and restart."); } else { Configuration.onsAddress = ons_address; } // Query Access Control // Set up capture_verification String queryAC = json.getString("query_access_control"); if (queryAC == null) { Configuration.logger.error( "query_access_control, please make sure Configuration.json is correct, and restart."); } queryAC = queryAC.trim(); if (queryAC.equals("on")) { Configuration.isQueryAccessControlOn = true; Configuration.logger.info("Query_AccessControl - ON "); } else if (captureVerification.equals("off")) { Configuration.isQueryAccessControlOn = false; Configuration.logger.info("Query_AccessControl - OFF "); } else { Configuration.logger.error( "query_access_control should be (on|off), please make sure Configuration.json is correct, and restart."); } // Facebook Application ID String fai = json.getString("facebook_app_id"); if (fai == null) { Configuration.logger.error( "facebook_app_id, please make sure Configuration.json is correct, and restart."); } facebookAppID = fai.trim(); if( backend.equals("MongoDB")){ setMongoDB(json); } // Trigger Support String triggerSupport = json.getString("trigger_support"); if (triggerSupport == null || triggerSupport.trim().equals("on")){ isTriggerSupported = true; }else{ isTriggerSupported = false; } } catch (Exception ex) { Configuration.logger.error(ex.toString()); } } private void setMongoDB(JSONObject json) { String backend_ip; if(json.isNull("backend_ip")){ backend_ip = "localhost"; }else{ backend_ip = json.getString("backend_ip"); } int backend_port; if(json.isNull("backend_port")){ backend_port = 27017; }else{ backend_port = json.getInt("backend_port"); } mongoClient = new MongoClient(backend_ip, backend_port); mongoDatabase = mongoClient.getDatabase("epcis"); } private void loadExistingSubscription() { if (Configuration.backend.equals("MongoDB")) { MongoSubscription ms = new MongoSubscription(); ms.init(); } else if (Configuration.backend.equals("Cassandra")) { } else if (Configuration.backend.equals("MySQL")) { } } }