package eflow;

import java.util.Properties;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import oracle.edge.tools.epc.BinarySet;
import oracle.edge.tools.epc.Encodings;
import oracle.edge.tools.epc.Tag;
import oracle.edge.util.Logger;


public class JmsHuguBean {
    public JmsHuguBean() {
    }



    public void onEvent( java.lang.String userData, oracle.edge.tools.eflow.Context ctxt ) 
    { 
        String id = ctxt.getParam("event.id");
        String data = ctxt.getParam("event.data");
        String siteName = ctxt.getParam("event.siteName");
        String isoTime = ctxt.getParam("event.isoTime");
        String eventXml = ctxt.getParam("event.xml");
        String sep = ","; //separator for csv

        // EPC:URN get
        Encodings encs;
        String value=null;
        try {
            encs = new Encodings();
            BinarySet bs = new BinarySet(id.length() * 4, id.toUpperCase(), 16);
            Tag tag = encs.decode(bs);
            Logger.n("JMSHuguBean --- decoded...!");
            value = tag.getField("urn");
            Logger.n("JMSHuguBean --- urn hugu ==> " + value);
            
        } catch (Exception e) {
            // TODO
            e.printStackTrace();
        }
        
        // mapping a recopier dans le fichier csv pour établir le format dans l'esb
        String sContenu = siteName + sep + id + sep + data + sep + isoTime + sep + value;
        Logger.n("JMSHuguBean --- userData -- "+ userData +" -- sContenu= "+sContenu);
        
        ////////////////////////////////////////////////////////////////////
        // JMS                      ////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////
     
        String s="";
        Context ctx = null;
        Connection connection = null;
        MessageProducer producer = null;
            
        try {
              // Create a Properties object and set properties appropriately
              Properties props = new Properties();
      
              props.put(Context.INITIAL_CONTEXT_FACTORY, "com.evermind.server.rmi.RMIInitialContextFactory");
              props.put(Context.PROVIDER_URL, "opmn:ormi://hsimonne-fr:6003:oc4j_soa");
              props.put(Context.SECURITY_PRINCIPAL, "oc4jadmin");
              props.put(Context.SECURITY_CREDENTIALS, "ora123");
              
              // Create the initial context from the properties we just created
              ctx = new InitialContext(props);
              Logger.n("JMSHuguBean --- ctx="+ctx.PROVIDER_URL+"   --- "+ctx.toString());             
              } 
        catch (NamingException e) {
                  e.printStackTrace();
              }
              
                  
              /*
               * Create connection.
               * Create session from connection; false means session is
               * not transacted.
               * Create producer and text message.
               * Send messages, varying text slightly.
               * Send end-of-messages message.
               * Finally, close connection.
               */
    
              try {
    
                  Destination destination = (Destination) ctx.lookup(userData);
                  ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/QueueConnectionFactory");
                  Logger.n("JMSHuguBean --- dest = "+destination+"\n --- cf= "+cf + " queue="+destination);
                  
                  connection = cf.createConnection();
                  
                  // Start the connection.
                  connection.start();
                  Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                  producer = session.createProducer(destination);
                  TextMessage message = session.createTextMessage();
    
                  // Envoi du message TEXT dans la file JMS
                  message.setText(sContenu);
                  Logger.n("JMSHuguBean --- Sending message: " + message.getText());
                  producer.send(message);
                  /*
                   * Send a non-text control message indicating end of
                   * messages.
                   */
                  producer.send(session.createMessage());
              } catch (Exception e) {
                  e.printStackTrace();
                  System.out.println("Exception occurred: " + e.toString());
              } finally {
                  if (connection != null) {
                      try {
                          connection.close();
                          Logger.n("JMSHuguBean --- close JMS connection");
                      } catch (JMSException e) {
                      e.printStackTrace();
                      }
                  }
              }
              
        
    }
}
