package org.oliot.epcis.configuration; import java.awt.Desktop; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.json.JSONObject; import org.oliot.epcis.db.DBConfig; import org.oliot.epcis.db.LoginListener; import org.oliot.epcis.serde.sql.CaptureOperationsBackend; import org.oliot.epcis.serde.sql.HibernateUtil; import org.oliot.epcis.service.query.sql.QueryOprationBackend; import org.oliot.epcis.service.subscription.MysqlSubscription; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Copyright (C) 2014-2016 Jaewook Byun * * This project is part of Oliot open source (http://oliot.org). Oliot EPCIS * v1.2.x is Java Web Service complying with Electronic Product Code Information * Service (EPCIS) v1.2. * * @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 * * @author Yalew kidane, Ph.D student * * Korea Advanced Institute of Science and Technology (KAIST) * * Real-time Embedded System Laboratory(RESL) * * yalewkidane@gmail.com/@kaist.ac.kr */ public class Configuration implements ServletContextListener { public static Logger logger; public static String webInfoPath; public static String wsdlPath; public static String contextPath; public static boolean isCaptureVerfificationOn; public static String facebookAppID; public static String adminID; public static String adminScope; public static boolean isQueryAccessControlOn; public static boolean isTriggerSupported; public static String ac_api_address; public static String epcis_ID; public static String DBxml; public static int transactionNuumber=0; public static boolean connect=false; public static CaptureOperationsBackend mysqlOperationdao; private static ApplicationContext ctx; public static QueryOprationBackend mysqlOperationdaoQr; private static ApplicationContext ctxQr; @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"); Configuration.logger.info(path); 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); Configuration.webInfoPath = path; Configuration.wsdlPath = context.getRealPath("/wsdl"); Configuration.contextPath = context.getRealPath("/"); // 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."); } // 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 (queryAC.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(); // Admin Facebook ID String aID = json.getString("admin_facebook_id"); if (aID == null) { Configuration.logger .error("admin_facebook_id, please make sure Configuration.json is correct, and restart."); } adminID = aID.trim(); // Admin Scope String aScope = json.getString("admin_scope"); if (aScope == null) { Configuration.logger.error("admin_scope, please make sure Configuration.json is correct, and restart."); } adminScope = aScope.trim(); // Trigger Support String triggerSupport = json.getString("trigger_support"); if (triggerSupport == null || triggerSupport.trim().equals("on")) { isTriggerSupported = true; } else { isTriggerSupported = false; } // Set IP Address of Access Control API String address = json.getString("ac_api_address"); if (address == null) { Configuration.logger.error( "ac_api_address is null, please make sure Configuration.json is correct, and restart."); } ac_api_address = address.trim(); String epcis_Name = json.getString("epcis_ID"); if (epcis_Name == null) { Configuration.logger.error( "ac_api_address is null, please make sure Configuration.json is correct, and restart."); } epcis_ID = epcis_Name.trim(); //window will pop up for connection dbLogin(); while(!connect){ System.out.println("..."); Thread.sleep(2000); } //open database //ApplicationContext //set database //backendDB = json.getString("backend_DB"); //backendDB=Configuration.dbNameComboBox. setDB(DBConfig.database); Configuration.logger.info("Waiting for database configuration"); if(DBConfig.database.equals("Oracle")){ mysqlOperationdao = new CaptureOperationsBackend(); mysqlOperationdao.setSessionFactory(HibernateUtil.getSessionFactory()); mysqlOperationdaoQr = new QueryOprationBackend(); mysqlOperationdaoQr.setSessionFactory(HibernateUtil.getSessionFactory()); }else{ ctx=new ClassPathXmlApplicationContext(Configuration.DBxml); mysqlOperationdao=ctx.getBean ("captureOperationsBackend", CaptureOperationsBackend.class); ctxQr=new ClassPathXmlApplicationContext(Configuration.DBxml); //ctxQr.getBean("dataSource").s mysqlOperationdaoQr=ctxQr.getBean ("queryOprationBackend", QueryOprationBackend.class); } if(frameStatus) frame.setVisible(false); if (Desktop.isDesktopSupported()) { Desktop desktop = Desktop.getDesktop(); if (desktop.isSupported(Desktop.Action.BROWSE)) { try { desktop.browse(new URI("http://localhost:8080/epcis/")); } catch(IOException ioe) { ioe.printStackTrace(); } catch(URISyntaxException use) { use.printStackTrace(); } } } } catch (Exception ex) { Configuration.logger.error(ex.toString()); } } private void setDB(String backendDB){ if(backendDB.equals("MySQL")){ Configuration.logger.info("Backend is MySQL"); DBxml="MysqlConfig.xml"; }else if(backendDB.equals("PostgreSQL")){ Configuration.logger.info("Backend is PostgreSQL"); DBxml="PostgreSQLConfig.xml"; }else if(backendDB.equals("MariaDB")){ Configuration.logger.info("Backend is MariaDB"); DBxml="MariaDBConfig.xml"; }else if(backendDB.equals("Oracle")){ Configuration.logger.info("Backend is Oracle"); DBxml="OracleConfig.xml"; } } private void loadExistingSubscription() { MysqlSubscription ms = new MysqlSubscription(); ms.init(); } private void dbLogin(){ try{ frame = new JFrame("Database Configuration"); frame.setSize(600, 300); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); frame.add(panel); placeComponents(panel); frame.setVisible(true); frameStatus=true; }catch(Exception e){ frameStatus=false; } } public static JFrame frame; public static JLabel dbNameLabelConfig; public static JComboBox<String> dbNameComboBox; public static JLabel urlLabelConfig; public static JTextField urlTextConfig; public static JLabel databaseLabelConfig; public static JTextField databaseTextConfig; public static JLabel userLabelConfig; public static JTextField userTextConfig; public static JLabel passwordLabelConfig; public static JPasswordField passwordTextConfig; public static JButton loginButtonConfig; public static boolean frameStatus; private static void placeComponents(JPanel panel) { panel.setLayout(null); JLabel imageLabel=new JLabel(); imageLabel.setBounds(10, 10, 380, 210); ImageIcon icon=new ImageIcon(Configuration.contextPath+"image/Cintro.png"); imageLabel.setIcon(icon); panel.add(imageLabel); int x1=310; int x2=400; dbNameLabelConfig= new JLabel("Database"); dbNameLabelConfig.setBounds(x1, 10, 80, 25); panel.add(dbNameLabelConfig); dbNameComboBox=new JComboBox<String>(); dbNameComboBox.setBounds(x2, 10, 160, 25); dbNameComboBox.addItem("MySQL"); dbNameComboBox.addItem("MariaDB"); dbNameComboBox.addItem("PostgreSQL"); dbNameComboBox.addItem("Oracle"); dbNameComboBox.setSelectedItem("Oracle"); panel.add(dbNameComboBox); urlLabelConfig = new JLabel("URL"); urlLabelConfig.setBounds(x1, 40, 80, 25); panel.add(urlLabelConfig); urlTextConfig = new JTextField(20); urlTextConfig.setBounds(x2, 40, 160, 25); urlTextConfig.setText("localhost"); panel.add(urlTextConfig); databaseLabelConfig = new JLabel("Database Name"); databaseLabelConfig.setBounds(x1, 80, 80, 25); panel.add(databaseLabelConfig); databaseTextConfig = new JTextField(20); databaseTextConfig.setBounds(x2, 80, 160, 25); databaseTextConfig.setText("orcl"); panel.add(databaseTextConfig); userLabelConfig = new JLabel("User"); userLabelConfig.setBounds(x1, 120, 80, 25); panel.add(userLabelConfig); userTextConfig = new JTextField(20); userTextConfig.setBounds(x2, 120, 160, 25); userTextConfig.setText("c##yale"); panel.add(userTextConfig); passwordLabelConfig = new JLabel("Password"); passwordLabelConfig.setBounds(x1, 160, 80, 25); panel.add(passwordLabelConfig); passwordTextConfig = new JPasswordField(20); passwordTextConfig.setBounds(x2, 160, 160, 25); passwordTextConfig.setText("yale"); panel.add(passwordTextConfig); loginButtonConfig = new JButton("Connect"); loginButtonConfig.setBounds(x1+40, 200, 120, 25); panel.add(loginButtonConfig); ActionListener myButtonListener = new LoginListener(); loginButtonConfig.addActionListener(myButtonListener); } /** * query_access_relation * created * 2017.02.07 * @param quri * @param qtoken * @param qurlParameters * @return result */ public static String query_access_relation(String quri, String qtoken, String qurlParameters){ Configuration.logger.info(" Client Token retrieve"); StringBuffer response = null; String result = null; try { String url = quri; URL obj = new URL(url); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); //add request header con.setRequestMethod("GET"); con.setRequestProperty("Authorization", "Bearer "+qtoken); con.setRequestProperty("Content-type", "application/x-www-form-urlencoded"); //String urlParameters = qurlParameters; // Send get request System.out.println(con.getRequestMethod()); int responseCode = con.getResponseCode(); System.out.println("\nSending 'GET' request to URL : " + url); System.out.println("Response Code : " + responseCode); BufferedReader in; in = new BufferedReader(new InputStreamReader(con.getInputStream())); String inputLine; response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } in.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //print result if(response!=null){ result=response.toString(); } return result; } }