package com.example.handlerTest;

import java.util.Iterator;

import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.OMNamespaceImpl;
import org.apache.axiom.om.impl.llom.OMElementImpl;
import org.apache.axiom.om.impl.llom.OMTextImpl;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.synapse.core.axis2.Axis2MessageContext;
import org.apache.synapse.rest.AbstractHandler;
import org.apache.synapse.transport.passthru.util.RelayUtils;

public class App extends AbstractHandler {

    public boolean handleRequest(org.apache.synapse.MessageContext messageContext) {
    	
    	
        try {
      
           RelayUtils.buildMessage(((Axis2MessageContext) messageContext).getAxis2MessageContext());
          /*  InputStream jsonPaylodStream = (InputStream) ((Axis2MessageContext) messageContext)
                    .getAxis2MessageContext().getProperty(
                            "org.apache.synapse.commons.json.JsonInputStream");
            StringWriter writer = new StringWriter();
            IOUtils.copy(jsonPaylodStream, writer);
            // You can get the request message here
            String payloadMessge = writer.toString();
            System.out.println("Request payload message :" + payloadMessge);*/
            
          System.out.println("messageContext0"+messageContext);  
      org.apache.axiom.soap.SOAPBody soapBody = messageContext.getEnvelope().getBody();
   		 Iterator<OMElement>it = soapBody.getChildrenWithName(new javax.xml.namespace.QName("xformValues"));
   		 
   		 OMElement xformValue = null;
   		
   		 while(it.hasNext()){
   			 xformValue = it.next();
   		 }
   		 
   		 if(xformValue == null){
   			 xformValue = new OMElementImpl("xformValues", new OMNamespaceImpl("", ""), soapBody.getOMFactory());
   		 }
   		 
   		// create grant type node
   		 OMElementImpl xgranttype = new OMElementImpl("grant_type", new OMNamespaceImpl("", ""), soapBody.getOMFactory());
   		 
   		 //add child text node corresponding to grant
   		 OMTextImpl grantNode = new OMTextImpl("password",soapBody.getOMFactory());
   		 xgranttype.addChild(grantNode);
   		 
   		 // add username node
		 OMElementImpl xusername = new OMElementImpl("username", new OMNamespaceImpl("", ""), soapBody.getOMFactory());
		 //add child text node corresponding to grant
		 OMTextImpl usernameNode = new OMTextImpl("admin",soapBody.getOMFactory());
		 xusername.addChild(usernameNode);
		 
		// String decryptedPassword = getProcessHeaders(username,password);
         //headers.put("password", decryptedPassword);
    	 OMElementImpl xPassword = new OMElementImpl("password", new OMNamespaceImpl("", ""), soapBody.getOMFactory());
         xPassword.addChild(new OMTextImpl("admin",soapBody.getOMFactory()));
		  
		 xformValue.addChild(xgranttype);
		 xformValue.addChild(xusername);
		 xformValue.addChild(xPassword);
   	
   		  
   
   		
   		 
   		 
   		 soapBody.addChild(xformValue);
   		 
   		 
   		
            
            
     
            
            
            
            
            
            
            
            SOAPEnvelope envelope = messageContext.getEnvelope();
            
            
            System.out.println("envelope"+envelope);
            
           
            messageContext.setEnvelope(envelope);
            System.out.println("Final Payload+++messageContext"+messageContext);
           
          //  String httpMethod = (String) ((Axis2MessageContext) messageContext).setAxis2MessageContext(null);
            		//.getAxis2MessageContext().getProperty("HTTP_METHOD");
          
        //    System.out.println("\n\nWSO2CustomHandler - handleRequest httpMethod!!" + httpMethod);
            
           /* String jsonPayloadToString = JsonUtil.jsonPayloadToString(((Axis2MessageContext) messageContext).getAxis2MessageContext());
         // Make a json object
         JSONObject jsonBody = new JSONObject(jsonPayloadToString);*/
            
            
            return true;
        } catch (Exception ex) {
            return true;
        }
    }

    public boolean handleResponse(org.apache.synapse.MessageContext messageContext) {
        try {
            /*RelayUtils.buildMessage(((Axis2MessageContext) messageContext).getAxis2MessageContext());

            InputStream jsonPaylodStream = (InputStream) ((Axis2MessageContext) messageContext)
                    .getAxis2MessageContext().getProperty(
                            "org.apache.synapse.commons.json.JsonInputStream");
            StringWriter writer = new StringWriter();
            IOUtils.copy(jsonPaylodStream, writer);
            // You can get the response message here
            String payloadMessge = writer.toString();
            System.out.println("Response payload message :" + payloadMessge);*/
            return true;
        } catch (Exception ex) {
            return true;
        }
    }
}