Subversion Repositories SmartDukaan

Rev

Rev 12459 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package com.amazonaws.mws.samples;

import in.shop2020.feeds.products.AmazonEnvelope;
import in.shop2020.feeds.products.AmazonEnvelope.Message;
import in.shop2020.feeds.products.Header;
import in.shop2020.feeds.products.OrderAcknowledgement;
import in.shop2020.model.v1.order.AmazonOrdersToAcknowledge;
import in.shop2020.model.v1.order.OrderSource;
import in.shop2020.thrift.clients.TransactionClient;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.math.BigInteger;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import org.apache.commons.codec.binary.Base64;
import org.apache.thrift.TException;
import org.apache.thrift.transport.TTransportException;


public class CreateOrderAcknowledgementFeed {
        static java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
        static Calendar cal=GregorianCalendar.getInstance();
        private static final String AMAZON_ORDER_ACKNOWLEDGEMENT_XML = "/home/amazon/OrderAck/OrderAcknowledgement"+sdf.format(cal.getTime())+".xml";

        public static void main(String... args) {
                createOrderAcknowlegementFeed();
        }


        public static void createOrderAcknowlegementFeed() {
                TransactionClient tcl=null;
                List<AmazonOrdersToAcknowledge> amazonOrdersToAcknowledge=null;
                try {
                        tcl = new TransactionClient();
                        amazonOrdersToAcknowledge = tcl.getClient().getAmazonOrdersToAcknowledge(OrderSource.AMAZON);
                } catch (TTransportException e2) {
                        // TODO Auto-generated catch block
                        e2.printStackTrace();
                } catch (TException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                if(amazonOrdersToAcknowledge!=null && amazonOrdersToAcknowledge.size() > 0){
                        File file = new File(AMAZON_ORDER_ACKNOWLEDGEMENT_XML);
                        AmazonEnvelope amazonenvelope = new AmazonEnvelope();
                        Header header = new Header();
                        header.setDocumentVersion("1.0");
                        header.setMerchantIdentifier("AF6E3O0VE0X4D");
                        header.setOverrideReleaseId(null);
                        amazonenvelope.setHeader(header);
                        amazonenvelope.setMessageType("OrderAcknowledgement");
                        amazonenvelope.setMarketplaceName(null);
                        List<Message> messages = amazonenvelope.getMessage();
                        Map<String,Long> amazonOrdertxnMap = new HashMap<String,Long>();
                        Map<String,List<String>> amazonOrderIdOrderItemMap = new HashMap<String,List<String>>();
                        Map<String,Integer> amazonOrderItemSuccessMap = new HashMap<String,Integer>();
                        Map<String,Integer> amazonOrderItemFailureMap = new HashMap<String,Integer>();
                        for(AmazonOrdersToAcknowledge amazonOrderToAcknowledge:amazonOrdersToAcknowledge ){
                                if(!amazonOrdertxnMap.containsKey(amazonOrderToAcknowledge.getAmazonOrderId())){
                                        amazonOrdertxnMap.put(amazonOrderToAcknowledge.getAmazonOrderId(),amazonOrderToAcknowledge.getTransaction_id());
                                }
                                if(!amazonOrderIdOrderItemMap.containsKey(amazonOrderToAcknowledge.getAmazonOrderId())){
                                        List<String> orderItemsList = new ArrayList<String>();
                                        orderItemsList.add(amazonOrderToAcknowledge.getAmazonOrderItemId());
                                        amazonOrderIdOrderItemMap.put(amazonOrderToAcknowledge.getAmazonOrderId(),orderItemsList);
                                }
                                else{
                                        if(!amazonOrderIdOrderItemMap.get(amazonOrderToAcknowledge.getAmazonOrderId()).contains(amazonOrderToAcknowledge.getAmazonOrderItemId()))
                                                amazonOrderIdOrderItemMap.get(amazonOrderToAcknowledge.getAmazonOrderId()).add(amazonOrderToAcknowledge.getAmazonOrderItemId());
                                }
                                if(amazonOrderToAcknowledge.getStatus().equals("Order-Payment-Success")){
                                        amazonOrderItemSuccessMap.put(amazonOrderToAcknowledge.getAmazonOrderId()+amazonOrderToAcknowledge.getAmazonOrderItemId(),amazonOrderToAcknowledge.getCount());
                                }
                                if(amazonOrderToAcknowledge.getStatus().equals("Order-Payment-Failure")){
                                        amazonOrderItemFailureMap.put(amazonOrderToAcknowledge.getAmazonOrderId()+amazonOrderToAcknowledge.getAmazonOrderItemId(),amazonOrderToAcknowledge.getCount());
                                }       
                        }
                        JAXBContext context;
                        Marshaller m=null;
                        try {
                                context = JAXBContext.newInstance(AmazonEnvelope.class);
                                m = context.createMarshaller();
                        } catch (JAXBException e1) {
                                // TODO Auto-generated catch block
                                e1.printStackTrace();
                        }

                        for (Map.Entry<String,List<String>> entry : amazonOrderIdOrderItemMap.entrySet()){
                                OrderAcknowledgement orderAcknowLedgement = new OrderAcknowledgement();
                                List<OrderAcknowledgement.Item> acknowledgementItems = orderAcknowLedgement.getItem();
                                String orderid = entry.getKey();
                                orderAcknowLedgement.setAmazonOrderID(orderid);
                                orderAcknowLedgement.setMerchantOrderID(amazonOrdertxnMap.get(orderid).toString());
                                orderAcknowLedgement.setStatusCode("Failure");
                                for(String orderItemId :entry.getValue()){
                                        OrderAcknowledgement.Item orderAcknowledgementItem = new OrderAcknowledgement.Item();
                                        if(amazonOrderItemSuccessMap.get(orderid+orderItemId)!=null && amazonOrderItemSuccessMap.get(orderid+orderItemId) > 0){
                                                orderAcknowledgementItem.setAmazonOrderItemCode(orderItemId);
                                                orderAcknowLedgement.setStatusCode("Success");
                                        }
                                        else{
                                                orderAcknowledgementItem.setAmazonOrderItemCode(orderItemId);
                                                orderAcknowledgementItem.setCancelReason("ShippingAddressUndeliverable");
                                        }
                                        acknowledgementItems.add(orderAcknowledgementItem);

                                }
                                AmazonEnvelope.Message message = new AmazonEnvelope.Message();
                                Random rand = new Random();
                                message.setMessageID(BigInteger.valueOf(Math.abs(rand.nextInt())));
                                message.setOrderAcknowledgement(orderAcknowLedgement);
                                messages.add(message);
                        }

                        System.out.println("Messages is " + messages);
                        try {
                                m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
                                m.marshal(amazonenvelope, file);
                                m.marshal(amazonenvelope, System.out);

                        } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();

                        }
                                //                      GmailUtils  gm = GmailUtils();
                        //                      gm.sendSSLMessage(arg0, arg1, arg2, arg3, arg4, arg5)
                }


        }

                
        public static String computeContentMD5HeaderValue( FileInputStream fis) {
                try {
                        DigestInputStream dis = new DigestInputStream( fis,
                                        MessageDigest.getInstance( "MD5" ));
                        byte[] buffer = new byte[8192];
                        while( dis.read( buffer ) > 0 );
                        String md5Content = new String(Base64.encodeBase64(dis.getMessageDigest().digest())
                        );
                        // Effectively resets the stream to be beginning of the file via a
                        fis.getChannel().position( 0 );
                        return md5Content;
                } catch (NoSuchAlgorithmException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                return null;

        }

        
        
        
}