Subversion Repositories SmartDukaan

Rev

Rev 7578 | Rev 8021 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7473 vikram.rag 1
package com.amazonservices.mws.orders.samples;
2
 
3
import in.shop2020.feeds.products.AmazonEnvelope;
4
import in.shop2020.feeds.products.AmazonEnvelope.Message;
5
import in.shop2020.feeds.products.OrderAcknowledgement;
6
import in.shop2020.feeds.products.Header;
7
import in.shop2020.logistics.LogisticsServiceException;
8
import in.shop2020.logistics.PickUpType;
9
import in.shop2020.model.v1.inventory.AmazonInventorySnapshot;
10
import in.shop2020.model.v1.order.AmazonOrdersToAcknowledge;
11
import in.shop2020.model.v1.order.OrderSource;
12
import in.shop2020.model.v1.order.OrderType;
13
import in.shop2020.model.v1.order.SourceDetail;
14
import in.shop2020.model.v1.order.TransactionServiceException;
15
import in.shop2020.model.v1.order.TransactionStatus;
16
import in.shop2020.model.v1.user.User;
17
import in.shop2020.model.v1.user.UserContextException;
18
import in.shop2020.payments.PaymentException;
19
import in.shop2020.payments.PaymentStatus;
20
import in.shop2020.thrift.clients.InventoryClient;
21
import in.shop2020.thrift.clients.PaymentClient;
22
import in.shop2020.thrift.clients.TransactionClient;
23
import in.shop2020.thrift.clients.UserClient;
24
import in.shop2020.utils.GmailUtils;
25
 
26
import java.io.File;
27
import java.io.FileInputStream;
28
import java.io.FileNotFoundException;
29
import java.io.IOException;
30
import java.math.BigInteger;
31
import java.security.DigestInputStream;
32
import java.security.MessageDigest;
33
import java.security.NoSuchAlgorithmException;
34
import java.util.ArrayList;
35
import java.util.Arrays;
36
import java.util.GregorianCalendar;
37
import java.util.HashMap;
38
import java.util.List;
39
import java.util.Map;
40
import java.util.Random;
41
 
42
import com.amazonaws.mws.model.SubmitFeedRequest;
43
import javax.xml.bind.JAXBContext;
44
import javax.xml.bind.JAXBException;
45
import javax.xml.bind.Marshaller;
46
import javax.xml.datatype.DatatypeConfigurationException;
47
import javax.xml.datatype.DatatypeFactory;
48
import javax.xml.datatype.XMLGregorianCalendar;
49
import javax.xml.transform.Result;
50
 
51
import org.apache.http.HttpStatus;
52
import org.apache.thrift.TException;
53
import org.apache.thrift.transport.TTransportException;
54
import org.apache.commons.codec.binary.Base64;
55
import org.apache.commons.logging.Log;
56
import org.apache.commons.logging.LogFactory;
57
import com.amazonaws.mws.MarketplaceWebService;
58
import com.amazonaws.mws.MarketplaceWebServiceClient;
59
import com.amazonaws.mws.MarketplaceWebServiceConfig;
60
import com.amazonaws.mws.MarketplaceWebServiceException;
61
import com.amazonaws.mws.model.FeedSubmissionInfo;
62
import com.amazonaws.mws.model.IdList;
63
import com.amazonaws.mws.model.ResponseMetadata;
64
import com.amazonaws.mws.model.SubmitFeedRequest;
65
import com.amazonaws.mws.model.SubmitFeedResponse;
66
import com.amazonaws.mws.model.SubmitFeedResult;
67
import com.amazonservices.mws.orders.MarketplaceWebServiceOrders;
68
import com.amazonservices.mws.orders.MarketplaceWebServiceOrdersClient;
69
import com.amazonservices.mws.orders.MarketplaceWebServiceOrdersException;
70
import com.amazonservices.mws.orders.model.FulfillmentChannelEnum;
71
import com.amazonservices.mws.orders.model.ListOrderItemsByNextTokenRequest;
72
import com.amazonservices.mws.orders.model.ListOrderItemsByNextTokenResponse;
73
import com.amazonservices.mws.orders.model.ListOrderItemsByNextTokenResult;
74
import com.amazonservices.mws.orders.model.ListOrderItemsRequest;
75
import com.amazonservices.mws.orders.model.ListOrderItemsResponse;
76
import com.amazonservices.mws.orders.model.ListOrderItemsResult;
77
import com.amazonservices.mws.orders.model.ListOrdersByNextTokenRequest;
78
import com.amazonservices.mws.orders.model.ListOrdersByNextTokenResponse;
79
import com.amazonservices.mws.orders.model.ListOrdersByNextTokenResult;
80
import com.amazonservices.mws.orders.model.ListOrdersRequest;
81
import com.amazonservices.mws.orders.model.ListOrdersResponse;
82
import com.amazonservices.mws.orders.model.ListOrdersResult;
83
import com.amazonservices.mws.orders.model.MarketplaceIdList;
84
import com.amazonservices.mws.orders.model.Order;
85
import com.amazonservices.mws.orders.model.OrderItem;
86
import com.amazonservices.mws.orders.model.OrderStatusEnum;
87
import com.amazonservices.mws.orders.model.OrderStatusList;
88
 
89
/**
90
 * This sample illustrates continuous order updates retrieval. It contains a
91
 * order updates fetcher job that fetches updates every 15 minutes.
92
 */
93
 
94
public class FetchOrderUpdatesJob {
95
 
96
	/*
97
	 * Add required parameters in OrdersConfig.java before trying out this
98
	 * sample.
99
	 */
100
 
101
	public static final Log log = LogFactory.getLog(OrderFetcherSample.class);
7531 vikram.rag 102
	//private volatile boolean keepRunning = true;
103
	private boolean keepRunning = true;
7473 vikram.rag 104
	/*************************************
105
	 * Throttling Limits in Milliseconds *
106
	 *************************************/
107
	// 1 call per 10 mins
108
	static final long LIST_ORDERS_THROTTLE_LIMIT = 600000L;
109
	// 1 call per 12 secs
110
	static final long LIST_ORDER_ITEMS_THROTTLE_LIMIT = 12000L;
111
 
112
	static long tempId;
113
 
114
	static {
115
		TransactionClient tcl = null;
116
		UserClient ucl = null;
117
		try {
118
			tcl = new TransactionClient();
119
			ucl = new UserClient();
120
			try {
7508 kshitij.so 121
				SourceDetail source = tcl.getClient().getSourceDetail(3);
7473 vikram.rag 122
				User user = ucl.getClient().getUserByEmail(source.getEmail());
123
				tempId = user.getUserId();
124
			} catch (TException e) {
125
				// TODO Auto-generated catch block
126
				e.printStackTrace();
127
			} catch (UserContextException e) {
128
				// TODO Auto-generated catch block
129
				e.printStackTrace();
130
			}
131
		} catch (TTransportException e) {
132
			// TODO Auto-generated catch block
133
			e.printStackTrace();
134
		}
135
 
136
 
137
 
138
	}
139
 
140
	final public static String AMAZON_ORDER_ACKNOWLEDGEMENT_XML = "/home/vikram/OrderAcknowledgeMent.xml";
141
 
7531 vikram.rag 142
	static final int INTERVAL_IN_MINS = 30; // 1-minute update interval
7473 vikram.rag 143
 
144
	//static final int INTERVAL_IN_MINS = 15; // 15-minute update interval
145
 
146
	protected MarketplaceWebServiceOrders service;
147
	protected String sellerId = null;
148
	protected MarketplaceIdList marketplaceIdList = null;
149
	private File file;
150
 
151
	public FetchOrderUpdatesJob(
152
			MarketplaceWebServiceOrders marketplaceWebServiceOrdersClient,
153
			String sellerId, MarketplaceIdList marketplaceIdList) {
154
		if (marketplaceWebServiceOrdersClient == null) {
155
			throw new IllegalArgumentException(
156
			"MarketplaceWebServiceOrders object cannot be null.");
157
		}
158
		this.service = marketplaceWebServiceOrdersClient;
159
		this.sellerId = sellerId;
160
		this.marketplaceIdList = marketplaceIdList;
161
	}
162
 
163
	public static void main(String... args) {
164
		MarketplaceWebServiceOrders client = new MarketplaceWebServiceOrdersClient(
165
				OrdersConfig.accessKeyId,
166
				OrdersConfig.secretAccessKey,
167
				OrdersConfig.applicationName,
168
				OrdersConfig.applicationVersion,
169
				OrdersConfig.config);
170
		final FetchOrderUpdatesJob orderFetcher = new FetchOrderUpdatesJob(
171
				client, OrdersConfig.sellerId,
172
				OrdersConfig.marketplaceIdList);
173
 
7531 vikram.rag 174
		/*	Thread fetchOrderUpdatesJobThread = new Thread(new Runnable() {
7473 vikram.rag 175
			public void run() {
176
				orderFetcher.startPeriodicSynch();
177
			}
178
		});
179
 
7512 vikram.rag 180
		// Start the FetchOrderUpdatesJobandAcknowledge in the second thread.
7473 vikram.rag 181
		fetchOrderUpdatesJobThread.start();
182
 
183
		/*
184
		 * The following code puts this thread to sleep for an hour and then the
185
		 * stopSynch() method is called which stops the job in the second
186
		 * thread.
187
		 */
188
 
189
		/*
7531 vikram.rag 190
		 * 
7473 vikram.rag 191
		 * for some other length of time .
192
		 */
193
		try {
7531 vikram.rag 194
			orderFetcher.startPeriodicSynch();
195
			//log.info("Main thread sleeping.");
196
			//Thread.sleep(3600000L); // = 1 hour
197
			//log.info("Main thread awake.");
7535 kshitij.so 198
		} catch (Exception e) {
7473 vikram.rag 199
			log.error(e.getMessage(), e);
7535 kshitij.so 200
			return;
7473 vikram.rag 201
		}
202
 
7531 vikram.rag 203
		//log.info("Main thread setting keepRunning to false.");
204
		//orderFetcher.stopSynch(); // Stops the FetchOrderUpdatesJobandAcknowledge thread.
7473 vikram.rag 205
 
206
		// Join the two threads and wait for the fetchOrderUpdatesJobThread to
207
		// finish.
7531 vikram.rag 208
 
209
		/*	try {
7473 vikram.rag 210
			fetchOrderUpdatesJobThread.join();
211
		} catch (InterruptedException e) {
212
			log.error(e.getMessage(), e);
213
			return;
7531 vikram.rag 214
		}*/
7473 vikram.rag 215
	}
216
 
217
	/**
218
	 * Call this method to start this job. Note that the job will run until the
219
	 * keepRunning flag is set to false.
220
	 */
221
	public void startPeriodicSynch() {
222
 
223
		DatatypeFactory df = null;
224
		try {
225
			df = DatatypeFactory.newInstance();
226
		} catch (DatatypeConfigurationException e) {
227
			log.error(e.getMessage(), e);
228
		}
7535 kshitij.so 229
		TransactionClient tcl=null;
230
		long time=0;
7538 vikram.rag 231
		try {
232
			tcl = new TransactionClient();
233
			time = tcl.getClient().getSourceDetail(3).getLastUpdatedOn();
234
		} catch (TException e) {
235
			// TODO Auto-generated catch block
236
			e.printStackTrace();
237
		}
7535 kshitij.so 238
 
7538 vikram.rag 239
 
7535 kshitij.so 240
		GregorianCalendar Time = new GregorianCalendar();
241
		Time.setTimeInMillis(time);
242
		XMLGregorianCalendar startTime = df.newXMLGregorianCalendar(Time);
7473 vikram.rag 243
		// endTime = now -2. So, startTime = now - 2 - INTERVAL_IN_MINS.
244
		System.out.println("Sync job start time." + startTime.getDay() +"-"+ startTime.getMonth()+"-" + startTime.getHour()+":"+startTime.getMinute());
245
 
7535 kshitij.so 246
 
7531 vikram.rag 247
		//startTime.add(df.newDurationDayTime(false, 0, 0, INTERVAL_IN_MINS ,	0));
248
		//System.out.println("Sync job start time after add .." + startTime.getDay() +"-"+ startTime.getMonth()+"-" + startTime.getHour()+":"+startTime.getMinute());
7473 vikram.rag 249
		/*
250
		 * This loop keeps running until the stopSynch() method is called.
251
		 * stopSynch() sets keepRunning to false.
252
		 */
253
		System.out.println("Sync job starting.");
254
		log.info("Sync job starting.");
255
		while (keepRunning) {
256
			// Subtract 2 minutes because endTime returned from server = now - 2
257
			// mins.
258
			long timeWaited = System.currentTimeMillis()
259
			- startTime.toGregorianCalendar().getTimeInMillis()
260
			- 120000;
261
 
262
			System.out.println("Time waited : " + timeWaited/60000 + "Minutes");
263
			/*
264
			 * If the timeWaited is greater than 30 times the interval, we exit
265
			 * from the loop as the job is lagging far behind in getting new
266
			 * orders.
267
			 */
268
			//if (timeWaited > 24 * 4 * INTERVAL_IN_MINS * 60L * 1000L) {
269
			if (timeWaited > 100000 * 60L * 1000L) {	
270
				keepRunning = false;
271
				System.out.println("Setting keep running to false");
7531 vikram.rag 272
				log.info("timeWaited is greater than 30 times the interval. This a too large a time interval for which to fetch orders.");
7473 vikram.rag 273
			}
274
			/*
275
			 * If the time lapsed is greater than or equal to 15 mins, we will
276
			 * try to fetchOrderUpdates giving it a startTime.
277
			 */
278
			else if (timeWaited >= INTERVAL_IN_MINS * 60L * 1000L) {
279
				log.info("Time to fetch new order updates.");
7538 vikram.rag 280
 
7473 vikram.rag 281
				XMLGregorianCalendar endTime = fetchOrderUpdatesSince(startTime);
282
				//System.out.println("End Time is : " + endTime.getDay() +"-"+ endTime.getMonth()+"-" + endTime.getHour()+":"+endTime.getMinute());
7512 vikram.rag 283
				//createandsubmitOrderAcknowlegementFeed();
7473 vikram.rag 284
				if (endTime != null) {
285
					startTime = endTime;
7538 vikram.rag 286
 
7535 kshitij.so 287
					try {
7538 vikram.rag 288
						tcl.getClient().updateSourceDetailTimestamp(3,endTime.toGregorianCalendar().getTimeInMillis());
7535 kshitij.so 289
					} catch (TException e) {
290
						// TODO Auto-generated catch block
291
						e.printStackTrace();
292
					}
7538 vikram.rag 293
				} else {
7473 vikram.rag 294
					log.info("endTime returned is null. Sleeping for "
295
							+ INTERVAL_IN_MINS + " minutes.");
296
					try {
297
						Thread.sleep(INTERVAL_IN_MINS * 60L * 1000L);
298
					} catch (InterruptedException e) {
299
						log.error(e.getMessage(), e);
300
						stopSynch();
301
						break;
302
					}
303
				}
304
			} else {
305
				try {
306
					long timeToSleepInMilliseconds = INTERVAL_IN_MINS * 60000L
307
					- timeWaited;
308
					log.info("Thread sleeping for "
309
							+ Math.round(timeToSleepInMilliseconds / 60000)
310
							+ " minutes.");
311
					// Sleep in 1 minute intervals for timeToSleepInMilliseconds
312
					// or until keepRunning is set to false.
313
					for (long i = timeToSleepInMilliseconds; i > 0
314
					&& keepRunning; i = i - 60000L) {
315
						if (i < 60000L) {
316
							Thread.sleep(i);
317
						} else {
318
							Thread.sleep(60000L);
319
						}
320
					}
321
 
322
				} catch (InterruptedException e) {
323
					log.error(e.getMessage(), e);
324
					stopSynch();
325
					break;
326
				}
327
			}
328
		}
329
		log.info("Sync job ending.");
330
	}
331
 
332
	/**
333
	 * Call this method to stop execution of this job. The job will stop after
334
	 * it has finished processing the current call (if it is in the middle of
335
	 * processing any). For example if a listOrders call has been invoked, then
336
	 * it will terminate the job only after the call returns with valid results.
337
	 * If this method is called while the thread is sleeping, because a request
338
	 * was throttled, the job will terminate after it wakes up.
339
	 */
340
	public void stopSynch() {
7531 vikram.rag 341
		//keepRunning = false;
7473 vikram.rag 342
	}
343
 
344
	/**
345
	 * Gets all orders updated between the given startTime and the calculated
346
	 * endTime. The endTime is calculated by the service as server's system
347
	 * clock time minus 2 mins. The method returns this endTime.
348
	 * 
349
	 */
350
	protected XMLGregorianCalendar fetchOrderUpdatesSince(
351
			XMLGregorianCalendar startTime) {
352
		System.out.println("Fetching order updates since " + startTime.toString());
353
		log.info("Fetching order updates since " + startTime.toString());
354
		ListOrdersRequest listOrdersRequest = new ListOrdersRequest();
355
 
356
		listOrdersRequest.setSellerId(sellerId);
357
		if (OrdersConfig.marketplaceIdList != null) {
358
			listOrdersRequest
359
			.setMarketplaceId(OrdersConfig.marketplaceIdList);
360
		}
361
		listOrdersRequest.setLastUpdatedAfter(startTime);
362
		OrderStatusList statusList = new OrderStatusList();
363
		List<OrderStatusEnum> orderstatusList = new ArrayList<OrderStatusEnum>();
364
		orderstatusList.add(OrderStatusEnum.UNSHIPPED);
365
		orderstatusList.add(OrderStatusEnum.PARTIALLY_SHIPPED);
366
		//orderstatusList.add(OrderStatusEnum.CANCELED);
367
 
368
		statusList.setStatus(orderstatusList);
369
		listOrdersRequest.setOrderStatus(statusList);
370
		XMLGregorianCalendar lastUpdatedDate = null;
371
 
372
		try {
373
			ListOrdersResult listOrdersResult = listOrders(listOrdersRequest);
374
			if (listOrdersResult.isSetLastUpdatedBefore()) {
375
				lastUpdatedDate = listOrdersResult.getLastUpdatedBefore();
376
			}
377
 
378
			if (listOrdersResult != null && listOrdersResult.isSetNextToken()) {
379
				ListOrdersByNextTokenRequest listOrdersByNextTokenRequest = new ListOrdersByNextTokenRequest();
380
				listOrdersByNextTokenRequest.setSellerId(sellerId);
381
				String nextToken = listOrdersResult.getNextToken();
382
				ListOrdersByNextTokenResult listOrdersByNextTokenResult = null;
383
				while (nextToken != null && keepRunning) {
384
					listOrdersByNextTokenRequest.setNextToken(nextToken);
385
					listOrdersByNextTokenResult = listOrdersByNextToken(listOrdersByNextTokenRequest);
386
					nextToken = listOrdersByNextTokenResult.getNextToken();
387
				}
388
				if (listOrdersByNextTokenResult.isSetLastUpdatedBefore()) {
389
					lastUpdatedDate = listOrdersByNextTokenResult
390
					.getLastUpdatedBefore();
391
				}
392
			}
393
			return lastUpdatedDate;
394
		} catch (MarketplaceWebServiceOrdersException ex) {
395
			log.error(ex.getMessage(), ex);
396
			System.out.println("Caught Exception: " + ex.getMessage());
397
			System.out.println("Response Status Code: " + ex.getStatusCode());
398
			System.out.println("Error Code: " + ex.getErrorCode());
399
			System.out.println("Error Type: " + ex.getErrorType());
400
			System.out.println("Request ID: " + ex.getRequestId());
401
			System.out.print("XML: " + ex.getXML());
402
			return null;
403
		}
404
	}
405
	//This method will create Order Acknowledgement FEED
406
	public void createandsubmitOrderAcknowlegementFeed() {
407
		TransactionClient tcl=null;
408
		List<AmazonOrdersToAcknowledge> amazonOrdersToAcknowledge=null;
409
		try {
410
			tcl = new TransactionClient();
411
			amazonOrdersToAcknowledge = tcl.getClient().getAmazonOrdersToAcknowledge();
412
		} catch (TTransportException e2) {
413
			// TODO Auto-generated catch block
414
			e2.printStackTrace();
415
		} catch (TException e) {
416
			// TODO Auto-generated catch block
417
			e.printStackTrace();
418
		}
419
		if(amazonOrdersToAcknowledge!=null && amazonOrdersToAcknowledge.size() > 0){
420
			file = new File(AMAZON_ORDER_ACKNOWLEDGEMENT_XML);
421
			AmazonEnvelope amazonenvelope = new AmazonEnvelope();
422
			Header header = new Header();
423
			header.setDocumentVersion("1.0");
424
			header.setMerchantIdentifier("AF6E3O0VE0X4D");
425
			header.setOverrideReleaseId(null);
426
			amazonenvelope.setHeader(header);
427
			amazonenvelope.setMessageType("OrderAcknowledgement");
428
			amazonenvelope.setMarketplaceName(null);
429
			List<Message> messages = amazonenvelope.getMessage();
430
			Map<String,Long> amazonOrdertxnMap = new HashMap<String,Long>();
431
			Map<String,List<String>> amazonOrderIdOrderItemMap = new HashMap<String,List<String>>();
432
			Map<String,Integer> amazonOrderItemSuccessMap = new HashMap<String,Integer>();
433
			Map<String,Integer> amazonOrderItemFailureMap = new HashMap<String,Integer>();
434
			for(AmazonOrdersToAcknowledge amazonOrderToAcknowledge:amazonOrdersToAcknowledge ){
435
				if(!amazonOrdertxnMap.containsKey(amazonOrderToAcknowledge.getAmazonOrderId())){
436
					amazonOrdertxnMap.put(amazonOrderToAcknowledge.getAmazonOrderId(),amazonOrderToAcknowledge.getTransaction_id());
437
				}
438
				if(!amazonOrderIdOrderItemMap.containsKey(amazonOrderToAcknowledge.getAmazonOrderId())){
439
					List<String> orderItemsList = new ArrayList<String>();
440
					orderItemsList.add(amazonOrderToAcknowledge.getAmazonOrderItemId());
441
					amazonOrderIdOrderItemMap.put(amazonOrderToAcknowledge.getAmazonOrderId(),orderItemsList);
442
				}
443
				else{
444
					if(!amazonOrderIdOrderItemMap.get(amazonOrderToAcknowledge.getAmazonOrderId()).contains(amazonOrderToAcknowledge.getAmazonOrderItemId()))
445
						amazonOrderIdOrderItemMap.get(amazonOrderToAcknowledge.getAmazonOrderId()).add(amazonOrderToAcknowledge.getAmazonOrderItemId());
446
				}
447
				if(amazonOrderToAcknowledge.getStatus().equals("Order-Payment-Success")){
448
					amazonOrderItemSuccessMap.put(amazonOrderToAcknowledge.getAmazonOrderId()+amazonOrderToAcknowledge.getAmazonOrderItemId(),amazonOrderToAcknowledge.getCount());
449
				}
450
				if(amazonOrderToAcknowledge.getStatus().equals("Order-Payment-Failure")){
451
					amazonOrderItemFailureMap.put(amazonOrderToAcknowledge.getAmazonOrderId()+amazonOrderToAcknowledge.getAmazonOrderItemId(),amazonOrderToAcknowledge.getCount());
452
				}	
453
			}
454
			JAXBContext context;
455
			Marshaller m=null;
456
			try {
457
				context = JAXBContext.newInstance(AmazonEnvelope.class);
458
				m = context.createMarshaller();
459
			} catch (JAXBException e1) {
460
				// TODO Auto-generated catch block
461
				e1.printStackTrace();
462
			}
463
 
464
			for (Map.Entry<String,List<String>> entry : amazonOrderIdOrderItemMap.entrySet()){
465
				OrderAcknowledgement orderAcknowLedgement = new OrderAcknowledgement();
466
				List<OrderAcknowledgement.Item> acknowledgementItems = orderAcknowLedgement.getItem();
467
				String orderid = entry.getKey();
468
				orderAcknowLedgement.setAmazonOrderID(orderid);
469
				orderAcknowLedgement.setMerchantOrderID(amazonOrdertxnMap.get(orderid).toString());
470
				orderAcknowLedgement.setStatusCode("Failure");
471
				for(String orderItemId :entry.getValue()){
472
					OrderAcknowledgement.Item orderAcknowledgementItem = new OrderAcknowledgement.Item();
473
					if(amazonOrderItemSuccessMap.get(orderid+orderItemId)!=null && amazonOrderItemSuccessMap.get(orderid+orderItemId) > 0){
474
						orderAcknowledgementItem.setAmazonOrderItemCode(orderItemId);
475
						orderAcknowLedgement.setStatusCode("Success");
476
					}
477
					else{
478
						orderAcknowledgementItem.setAmazonOrderItemCode(orderItemId);
479
						orderAcknowledgementItem.setCancelReason("ShippingAddressUndeliverable");
480
					}
481
					acknowledgementItems.add(orderAcknowledgementItem);
482
 
483
				}
484
				AmazonEnvelope.Message message = new AmazonEnvelope.Message();
485
				Random rand = new Random();
486
				message.setMessageID(BigInteger.valueOf(Math.abs(rand.nextInt())));
487
				message.setOrderAcknowledgement(orderAcknowLedgement);
488
				messages.add(message);
489
			}
490
 
491
			System.out.println("Messages is " + messages);
492
			try {
493
				m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
494
				m.marshal(amazonenvelope, file);
495
				m.marshal(amazonenvelope, System.out);
496
 
497
			} catch (Exception e) {
498
				// TODO Auto-generated catch block
499
				e.printStackTrace();
500
 
501
			}
502
			if(submitAcknowledgementFeed()==0);
503
			//if(true)
504
			{
505
				for (Map.Entry<String,Long> entry : amazonOrdertxnMap.entrySet()){
506
					try {
507
						tcl.getClient().changeAmazonOrderStatus(entry.getKey(),"Acknowledgement-Sent");
508
					} catch (TException e) {
509
						// TODO Auto-generated catch block
510
						e.printStackTrace();
511
					}
512
 
513
				}
514
			}
515
//			GmailUtils  gm = GmailUtils();
516
//			gm.sendSSLMessage(arg0, arg1, arg2, arg3, arg4, arg5)
517
		}
518
 
519
 
520
	}
521
 
522
	/*
523
	 * listOrders call. If a request is throttled, this method calls the
524
	 * throttling handler and sets the retry flag to true.
525
	 */
526
	protected ListOrdersResult listOrders(ListOrdersRequest request)
527
	throws MarketplaceWebServiceOrdersException {
528
		boolean retry;
529
		ListOrdersResponse listOrdersResponse = null;
530
		ListOrdersResult listOrdersResult = null;
531
		do {
532
			retry = false;
533
			try {
534
				System.out.println("Calling ListOrders.");
535
				log.info("Calling ListOrders.");
536
				listOrdersResponse = service.listOrders(request);
537
			} catch (MarketplaceWebServiceOrdersException ex) {
538
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
539
						&& "RequestThrottled".equals(ex.getErrorCode())) {
540
					retry = true;
541
					requestThrottledExceptionHandler(LIST_ORDERS_THROTTLE_LIMIT);
542
				} else {
543
					throw ex;
544
				}
545
			}
546
			if (listOrdersResponse != null
547
					&& listOrdersResponse.isSetListOrdersResult()) {
548
				listOrdersResult = listOrdersResponse.getListOrdersResult();
549
				if (listOrdersResult.isSetOrders()
550
						&& listOrdersResult.getOrders().isSetOrder()) {
551
					processOrderUpdates(listOrdersResult.getOrders().getOrder());
552
				}
553
			}
554
		} while (retry && keepRunning);
555
		return listOrdersResult;
556
	}
557
 
558
	/*
559
	 * listOrdersByNextToken call. If a request is throttled, this method calls
560
	 * the throttling handler and sets the retry flag to true.
561
	 */
562
	protected ListOrdersByNextTokenResult listOrdersByNextToken(
563
			ListOrdersByNextTokenRequest listOrdersByNextTokenRequest)
564
	throws MarketplaceWebServiceOrdersException {
565
		boolean retry;
566
		ListOrdersByNextTokenResponse listOrdersByNextTokenResponse = null;
567
		ListOrdersByNextTokenResult listOrdersByNextTokenResult = null;
568
		do {
569
			retry = false;
570
			try {
571
				log.info("Calling ListOrdersByNextToken.");
572
				listOrdersByNextTokenResponse = service
573
				.listOrdersByNextToken(listOrdersByNextTokenRequest);
574
			} catch (MarketplaceWebServiceOrdersException ex) {
575
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
576
						&& "RequestThrottled".equals(ex.getErrorCode())) {
577
					retry = true;
578
					requestThrottledExceptionHandler(LIST_ORDERS_THROTTLE_LIMIT);
579
				} else {
580
					throw ex;
581
				}
582
			}
583
			if (listOrdersByNextTokenResponse != null
584
					&& listOrdersByNextTokenResponse
585
					.isSetListOrdersByNextTokenResult()) {
586
				listOrdersByNextTokenResult = listOrdersByNextTokenResponse
587
				.getListOrdersByNextTokenResult();
588
				if (listOrdersByNextTokenResult.isSetOrders()
589
						&& listOrdersByNextTokenResult.getOrders().isSetOrder()) {
590
					processOrderUpdates(listOrdersByNextTokenResult.getOrders()
591
							.getOrder());
592
				}
593
			}
594
		} while (retry && keepRunning);
595
		return listOrdersByNextTokenResult;
596
	}
597
 
598
	/**
599
	 * This method is called to process updates on each of the orders that are
600
	 * returned by the ListOrders and ListOrdersByNextToken calls.
601
	 */
602
	protected void processOrderUpdates(List<Order> orders)
603
	throws MarketplaceWebServiceOrdersException {
604
		ListOrderItemsResult listOrderItemsResult;
605
		log.info("Processing order updates.");
606
		for (Order order : orders) {
607
			if (shouldFetchOrderItems(order)) {
608
				log.info("Order being processed: " + order.getAmazonOrderId());
609
				listOrderItemsResult = listOrderItems(order);
610
				if (listOrderItemsResult != null
611
						&& listOrderItemsResult.isSetNextToken()) {
612
					ListOrderItemsByNextTokenRequest listOrderItemsByNextTokenRequest = new ListOrderItemsByNextTokenRequest();
613
					listOrderItemsByNextTokenRequest
614
					.setSellerId(OrdersConfig.sellerId);
615
					String nextToken = listOrderItemsResult.getNextToken();
616
 
617
					ListOrderItemsByNextTokenResult listOrderItemsByNextTokenResult = null;
618
 
619
					while (nextToken != null && keepRunning) {
620
						listOrderItemsByNextTokenRequest
621
						.setNextToken(nextToken);
622
						listOrderItemsByNextTokenResult = listOrderItemsByNextToken(
623
								listOrderItemsByNextTokenRequest, order);
624
						nextToken = listOrderItemsByNextTokenResult
625
						.getNextToken();
626
					}
627
				}
628
			}
629
		}
630
	}
631
 
632
	/*
633
	 * listOrderItems call. If a request is throttled, this method calls the
634
	 * throttling handler and sets the retry flag to true.
635
	 */
636
	protected ListOrderItemsResult listOrderItems(Order order)
637
	throws MarketplaceWebServiceOrdersException {
638
		System.out.println("Calling ListOrderItems.");
639
		log.info("Calling ListOrderItems.");
640
		boolean retry;
641
		List<OrderItem> items;
642
		ListOrderItemsRequest listOrderItemsRequest = new ListOrderItemsRequest();
643
		listOrderItemsRequest.setSellerId(sellerId);
644
		listOrderItemsRequest.setAmazonOrderId(order.getAmazonOrderId());
645
		ListOrderItemsResponse listOrderItemsResponse = null;
646
		ListOrderItemsResult listOrderItemsResult = null;
647
 
648
		do {
649
			retry = false;
650
			try {
651
				listOrderItemsResponse = service
652
				.listOrderItems(listOrderItemsRequest);
653
			} catch (MarketplaceWebServiceOrdersException ex) {
654
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
655
						&& "RequestThrottled".equals(ex.getErrorCode())) {
656
					retry = true;
657
					requestThrottledExceptionHandler(LIST_ORDER_ITEMS_THROTTLE_LIMIT);
658
				} else {
659
					throw ex;
660
				}
661
			}
662
			if (listOrderItemsResponse != null
663
					&& listOrderItemsResponse.isSetListOrderItemsResult()) {
664
				listOrderItemsResult = listOrderItemsResponse
665
				.getListOrderItemsResult();
666
				if (listOrderItemsResult.isSetOrderItems()
667
						&& listOrderItemsResult.getOrderItems()
668
						.isSetOrderItem()) {
669
					items = listOrderItemsResponse.getListOrderItemsResult()
670
					.getOrderItems().getOrderItem();
671
					processOrderItems(order, items);
672
				}
673
			}
674
 
675
		} while (retry && keepRunning);
676
 
677
		return listOrderItemsResult;
678
	}
679
 
680
	/*
681
	 * listOrderItemsByNextToken call. If a request is throttled, this method
682
	 * calls the throttling handler and sets the retry flag to true.
683
	 */
684
	protected ListOrderItemsByNextTokenResult listOrderItemsByNextToken(
685
			ListOrderItemsByNextTokenRequest listOrderItemsByNextTokenRequest,
686
			Order order) throws MarketplaceWebServiceOrdersException {
687
		log.info("Calling ListOrderItemsByNextToken.");
688
		boolean retry;
689
		List<OrderItem> items;
690
		ListOrderItemsByNextTokenResponse listOrderItemsByNextTokenResponse = null;
691
		ListOrderItemsByNextTokenResult listOrderItemsByNextTokenResult = null;
692
 
693
		do {
694
			retry = false;
695
			try {
696
				listOrderItemsByNextTokenResponse = service
697
				.listOrderItemsByNextToken(listOrderItemsByNextTokenRequest);
698
			} catch (MarketplaceWebServiceOrdersException ex) {
699
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
700
						&& "RequestThrottled".equals(ex.getErrorCode())) {
701
					retry = true;
702
					requestThrottledExceptionHandler(LIST_ORDER_ITEMS_THROTTLE_LIMIT);
703
				} else {
704
					throw ex;
705
				}
706
			}
707
			if (listOrderItemsByNextTokenResponse != null
708
					&& listOrderItemsByNextTokenResponse
709
					.isSetListOrderItemsByNextTokenResult()) {
710
				listOrderItemsByNextTokenResult = listOrderItemsByNextTokenResponse
711
				.getListOrderItemsByNextTokenResult();
712
				if (listOrderItemsByNextTokenResult.isSetOrderItems()
713
						&& listOrderItemsByNextTokenResult.getOrderItems()
714
						.isSetOrderItem()) {
715
					items = listOrderItemsByNextTokenResponse
716
					.getListOrderItemsByNextTokenResult()
717
					.getOrderItems().getOrderItem();
718
					processOrderItems(order, items);
719
				}
720
			}
721
		} while (retry && keepRunning);
722
 
723
		return listOrderItemsByNextTokenResult;
724
	}
725
 
726
	/**
7540 vikram.rag 727
	 * Checks if order exists in the system 
728
	 * If not then only processes the order
7473 vikram.rag 729
	 */
730
	protected boolean shouldFetchOrderItems(Order order) {
7540 vikram.rag 731
		TransactionClient tcl=null;
732
		try {
733
			tcl = new TransactionClient();
7545 vikram.rag 734
			List<in.shop2020.model.v1.order.AmazonOrder> amazonOrderItems = tcl.getClient().getAmazonOrderByAmazonOrderId(order.getAmazonOrderId());
7540 vikram.rag 735
			if(amazonOrderItems.size()==0){
736
				return true;
737
			}
738
			else{
739
				return false;
740
			}
741
 
742
		} catch (TException e) {
743
			e.printStackTrace();
744
		}
745
		return false;
7473 vikram.rag 746
	}
747
 
748
	/**
7540 vikram.rag 749
	 * 
750
	 * Processes Order Items
7473 vikram.rag 751
	 */
752
	public void processOrderItems(Order order, List<OrderItem> orderItems) {
753
		log.info("****************** Order info********************");
754
		log.info(order.toString());
755
		System.out.println("------------------------------------------");
756
		System.out.println("--------Amazon Order Details START--------");
757
		System.out.println("------------------------------------------");
758
		System.out.println("Amazon Order ID                  :  " + order.getAmazonOrderId());
759
		System.out.println("Buyer Email                      :  " + order.getBuyerEmail());
760
		System.out.println("Buyer Name                       :  " + order.getBuyerName());
761
		System.out.println("MarketPlace ID                   :  " + order.getMarketplaceId());
762
		System.out.println("Order Channel                    :  " + order.getOrderChannel());
763
		System.out.println("Sales Channel                    :  " + order.getSalesChannel());
764
		System.out.println("Seller Order ID                  :  " + order.getSellerOrderId());
765
		System.out.println("Shipment Service Level Category  :  " + order.getShipmentServiceLevelCategory());
766
		System.out.println("Shipment Service Level           :  " + order.getShipServiceLevel());
767
		System.out.println("TFM Shipment Status              :  " + order.getTFMShipmentStatus());
768
		System.out.println("Number of Items Shipped          :  " + order.getNumberOfItemsShipped());
769
		System.out.println("Number of Items UnShipped        :  " + order.getNumberOfItemsUnshipped());
770
		System.out.println("Fulfillment Channel              :  " + order.getFulfillmentChannel());
771
		System.out.println("Last Updated Date                :  " + order.getLastUpdateDate());
772
		System.out.println("Order Status                     :  " + order.getOrderStatus());
773
		//System.out.println("Order Currency code              :  " + order.getOrderTotal().getCurrencyCode());
774
		//System.out.println("Order Amount                     :  " + order.getOrderTotal().getAmount());
775
		System.out.println("Payment Method                   :  " + order.getPaymentMethod());
776
		System.out.println("Payment Execution Detail         :  " + order.getPaymentExecutionDetail());
777
		System.out.println("Purchase Date                    :  " + order.getPurchaseDate());
778
		System.out.println("Shipping Address                 :  " + order.getShippingAddress());
779
		System.out.println("------------------------------------------");
780
		System.out.println("-----------Amazon Order Details END-------");
781
		System.out.println("------------------------------------");
782
		Map<String,String> orderItemSkuMap = new HashMap<String,String>();
783
		if (orderItems != null && orderItems.size() > 0) {
784
			log.info("================== Order Items info ====================");
785
			System.out.println("================== Order Items info ====================");
786
			int i = 0;
787
			for (OrderItem item : orderItems) {
788
				log.info(item.toString());
789
				System.out.println("===================================");
790
				System.out.println("Order Item : " + (i+1));
791
				System.out.println("Item ASIN :  " + item.getASIN());
792
				System.out.println("Item Gift Message Text :  " + item.getGiftMessageText());
793
				System.out.println("Item Gift Wrap Level   :  " + item.getGiftWrapLevel());
794
				System.out.println("Order Item ID          :  " + item.getOrderItemId());
795
				System.out.println("Quantity Ordered       :  " + item.getQuantityOrdered());
796
				System.out.println("Saholic Item ID        :  " + item.getSellerSKU());
797
				System.out.println("Item Description       :  " + item.getTitle());
798
				System.out.println("Item Quantity Shipped  :  " + item.getQuantityShipped());
799
				System.out.println("Item Quantity Ordered  :  " + item.getQuantityOrdered());
800
				System.out.println("COD Fees               :  " + item.getCODFee());
801
				System.out.println("COD Fees Discount      :  " + item.getCODFeeDiscount());
802
				System.out.println("Gift Wrap Price        :  " + item.getGiftWrapPrice());
803
				System.out.println("Gift Wrap Text         :  " + item.getGiftWrapTax());
804
				System.out.println("Invoice Data           :  " + item.getInvoiceData());
805
				System.out.println("Item Price             :  " + item.getItemPrice());
806
				System.out.println("Item Tax               :  " + item.getItemTax());
807
				System.out.println("Promotion Discount     :  " + item.getPromotionDiscount());
808
				System.out.println("Promotion IDs          :  " + item.getPromotionIds());
809
				System.out.println("Shipping Discounts     :  " + item.getShippingDiscount());
810
				System.out.println("Shipping Price         :  " + item.getShippingPrice());
811
				System.out.println("Shipping Tax           :  " + item.getShippingTax());
812
				System.out.println("===================================");
813
				orderItemSkuMap.put(item.getSellerSKU(),item.getOrderItemId());
814
				System.out.println("SKU and Order Item Code are  : " + item.getSellerSKU() + " " +item.getOrderItemId() );
815
				i++;
816
			}
817
			//if(order.getFulfillmentChannel().equals(FulfillmentChannelEnum.MFN) && (order.getOrderStatus().equals(OrderStatusEnum.UNSHIPPED) || order.getOrderStatus().equals(OrderStatusEnum.CANCELED))){
818
			//if(order.getFulfillmentChannel().equals(FulfillmentChannelEnum.MFN) && (order.getOrderStatus().equals(OrderStatusEnum.UNSHIPPED) || order.getOrderStatus().equals(OrderStatusEnum.PARTIALLY_SHIPPED))){
819
			if(order.getFulfillmentChannel().equals(FulfillmentChannelEnum.MFN) && order.getOrderStatus().equals(OrderStatusEnum.UNSHIPPED) && order.getSellerOrderId()==null ){
820
				AmazonOrder amazonOrder = new AmazonOrder();
821
				long txnId = amazonOrder.persistTransaction(order,orderItems);
822
				TransactionClient tcl=null;
823
				InventoryClient icl = null;
824
				PaymentClient pcl = null;
825
				Map<Long,Double> saholicItemMap = new HashMap<Long,Double>();
826
				if (txnId != -1){
827
					List<in.shop2020.model.v1.order.AmazonOrder> amazonOrders = new ArrayList<in.shop2020.model.v1.order.AmazonOrder>();
828
					try {
829
 
830
						tcl = new TransactionClient();
831
						icl = new InventoryClient();
832
						pcl = new PaymentClient();;
833
						System.out.println("temp id is" +tempId);
834
						List<in.shop2020.model.v1.order.Order>  saholicOrders =tcl.getClient().getOrdersForTransaction(txnId,tempId);
835
						for(in.shop2020.model.v1.order.Order saholicOrder:saholicOrders)
836
						{
837
							List<in.shop2020.model.v1.order.LineItem> lineitems= saholicOrder.getLineitems();
838
							long itemId=0; 
839
							for(in.shop2020.model.v1.order.LineItem lineitem:lineitems){
840
								itemId = lineitem.getItem_id();
841
								if(saholicItemMap.get(lineitem.getItem_id())!=null)
842
									saholicItemMap.put(lineitem.getItem_id(),saholicItemMap.get(lineitem.getItem_id())+1);
843
								else
844
									saholicItemMap.put(lineitem.getItem_id(),lineitem.getQuantity());	
845
							}
846
							in.shop2020.model.v1.order.AmazonOrder aOrder = new in.shop2020.model.v1.order.AmazonOrder();
847
							aOrder.setAmazonOrderCode(order.getAmazonOrderId());
848
							aOrder.setAmazonOrderItemCode(orderItemSkuMap.get(Long.toString(itemId)));
849
							aOrder.setItem_id(itemId);
850
							aOrder.setOrderId(saholicOrder.getId());
851
							aOrder.setTransactionId(txnId);
852
							aOrder.setStatus("Order-Creation-Success");
853
							tcl.getClient().addAmazonOrder(aOrder);
854
							amazonOrders.add(aOrder);
855
						}
856
						long merchantPaymentId = pcl.getClient().createPayment(tempId, Double.parseDouble(order.getOrderTotal().getAmount()), 15, txnId, false);
857
						pcl.getClient().updatePaymentDetails(merchantPaymentId, "", "", "15", "", "", "", "", "", PaymentStatus.SUCCESS, "", null);
858
						boolean success=tcl.getClient().changeTransactionStatus(txnId, TransactionStatus.AUTHORIZED, "Payment authorized", PickUpType.COURIER.getValue(), OrderType.B2C, OrderSource.AMAZON);
859
						if(success){
860
							for(in.shop2020.model.v1.order.AmazonOrder aorder:amazonOrders){
861
								AmazonInventorySnapshot amazonInventorySnapshot=icl.getClient().getAmazonInventoryForItem(aorder.getItem_id());
862
								long reserved = (amazonInventorySnapshot.getReserved()+1);
863
								amazonInventorySnapshot.setReserved(reserved);
864
								icl.getClient().addOrUpdateAmazonInventoryForItem((amazonInventorySnapshot));
865
								tcl.getClient().updateAmazonOrderStatus(aorder.getOrderId(),"Order-Payment-Success");
866
							}
867
						}
868
					}
869
					catch (TTransportException e) {
7578 vikram.rag 870
						try{
871
							tcl = new TransactionClient();	
872
						}
7579 vikram.rag 873
						catch (TTransportException ex) {
7578 vikram.rag 874
 
875
						}
876
 
7473 vikram.rag 877
						for(in.shop2020.model.v1.order.AmazonOrder aorder:amazonOrders){
878
							try {
879
								tcl.getClient().updateAmazonOrderStatus(aorder.getOrderId(),"Order-Payment-Failure");
880
							} catch (TException e1) {
881
								// TODO Auto-generated catch block
882
								e1.printStackTrace();
883
							}
884
						}
885
 
886
						//e.printStackTrace();
887
					} catch (TException e) {
888
						// TODO Auto-generated catch block
889
						e.printStackTrace();
890
					} catch (PaymentException e) {
891
						// TODO Auto-generated catch block
892
						e.printStackTrace();
893
					} catch (TransactionServiceException e) {
894
						// TODO Auto-generated catch block
895
						e.printStackTrace();
896
					}
897
				}
898
			}
899
 
900
		}
901
	}
902
 
903
 
904
	/*
905
	 * When a request is throttled, this method is called to make the thread
906
	 * sleep for a period of time specified by the throttling limit.
907
	 */
908
	private void requestThrottledExceptionHandler(
909
			long throttlingLimitInMilliseconds) {
910
		try {
911
			log.info("Request throttled. Sleeping for "
912
					+ throttlingLimitInMilliseconds / 1000 + " seconds.");
913
 
914
			// Sleep in 1 minute intervals for throttlingLimitInMillis or until
915
			// keepRunning is set to false.
916
			for (long i = throttlingLimitInMilliseconds; i > 0 && keepRunning; i = i - 60000L) {
917
				if (i < 60000L) {
918
					Thread.sleep(i);
919
				} else {
920
					Thread.sleep(60000L);
921
				}
922
			}
923
		} catch (InterruptedException e) {
924
			log.error(e.getMessage(), e);
925
			return;
926
		}
927
	}
928
 
929
	public static String computeContentMD5HeaderValue( FileInputStream fis) {
930
		try {
931
			DigestInputStream dis = new DigestInputStream( fis,
932
					MessageDigest.getInstance( "MD5" ));
933
			byte[] buffer = new byte[8192];
934
			while( dis.read( buffer ) > 0 );
935
			String md5Content = new String(Base64.encodeBase64(dis.getMessageDigest().digest())
936
			);
937
			// Effectively resets the stream to be beginning of the file via a
938
			fis.getChannel().position( 0 );
939
			return md5Content;
940
		} catch (NoSuchAlgorithmException e) {
941
			// TODO Auto-generated catch block
942
			e.printStackTrace();
943
		} catch (IOException e) {
944
			// TODO Auto-generated catch block
945
			e.printStackTrace();
946
		}
947
		return null;
948
 
949
	}
950
 
951
	public int submitAcknowledgementFeed(){
952
 
7512 vikram.rag 953
		SubmitFeedRequest request= new SubmitFeedRequest();
7473 vikram.rag 954
		final String merchantId = "AF6E3O0VE0X4D";	
955
		// marketplaces to which this feed will be submitted; look at the
956
		// API reference document on the MWS website to see which marketplaces are
957
		// included if you do not specify the list yourself
958
		final IdList marketplaces = new IdList(Arrays.asList(
959
		"A21TJRUUN4KGV"));
960
		request.setMerchant(merchantId);
961
		FileInputStream fis=null;
962
		try {
963
			fis = new FileInputStream(AMAZON_ORDER_ACKNOWLEDGEMENT_XML);
964
		} catch (FileNotFoundException e1) {
965
			// TODO Auto-generated catch block
966
			e1.printStackTrace();
967
			return -1;
968
		}
969
		final String accessKeyId = "AKIAII3SGRXBJDPCHSGQ";
970
		final String secretAccessKey = "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";
971
 
972
		final String appName = "Test";
973
		final String appVersion = "1.0";
974
 
975
		MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
976
 
977
		// India
978
		config.setServiceURL("https://mws.amazonservices.in");
979
 
980
		request.setContentMD5(computeContentMD5HeaderValue(fis));
981
		request.setFeedContent(fis);
982
		request.setMarketplaceIdList(marketplaces);
983
		request.setFeedType("_POST_ORDER_ACKNOWLEDGEMENT_DATA_");
984
		MarketplaceWebService s_service = new MarketplaceWebServiceClient(
985
				accessKeyId, secretAccessKey, appName, appVersion, config);
986
 
987
		try {
988
 
989
			SubmitFeedResponse response = s_service.submitFeed(request);
990
 
991
			System.out.println("SubmitFeed Action Response");
992
			System.out
993
			.println("=============================================================================");
994
			System.out.println();
995
 
996
			System.out.print("    SubmitFeedResponse");
997
			System.out.println();
998
			if (response.isSetSubmitFeedResult()) {
999
				System.out.print("        SubmitFeedResult");
1000
				//	System.out.println();
1001
				SubmitFeedResult submitFeedResult = response
1002
				.getSubmitFeedResult();
1003
				if (submitFeedResult.isSetFeedSubmissionInfo()) {
1004
					//	System.out.print("            FeedSubmissionInfo");
1005
					//	System.out.println();
1006
					FeedSubmissionInfo feedSubmissionInfo = submitFeedResult
1007
					.getFeedSubmissionInfo();
1008
					if (feedSubmissionInfo.isSetFeedSubmissionId()) {
1009
						System.out.print("                FeedSubmissionId");
1010
						System.out.println();
1011
						System.out.print("                    "
1012
								+ feedSubmissionInfo.getFeedSubmissionId());
1013
 
1014
						System.out.println();
1015
					}
1016
					if (feedSubmissionInfo.isSetFeedType()) {
1017
						System.out.print("                FeedType");
1018
						System.out.println();
1019
						System.out.print("                    "
1020
								+ feedSubmissionInfo.getFeedType());
1021
						System.out.println();
1022
					}
1023
					if (feedSubmissionInfo.isSetSubmittedDate()) {
1024
						System.out.print("                SubmittedDate");
1025
						System.out.println();
1026
						System.out.print("                    "
1027
								+ feedSubmissionInfo.getSubmittedDate());
1028
						System.out.println();
1029
					}
1030
					if (feedSubmissionInfo.isSetFeedProcessingStatus()) {
1031
						System.out
1032
						.print("                FeedProcessingStatus");
1033
						System.out.println();
1034
						System.out.print("                    "
1035
								+ feedSubmissionInfo.getFeedProcessingStatus());
1036
						System.out.println();
1037
					}
1038
					if (feedSubmissionInfo.isSetStartedProcessingDate()) {
1039
						System.out
1040
						.print("                StartedProcessingDate");
1041
						System.out.println();
1042
						System.out
1043
						.print("                    "
1044
								+ feedSubmissionInfo
1045
								.getStartedProcessingDate());
1046
						System.out.println();
1047
					}
1048
					if (feedSubmissionInfo.isSetCompletedProcessingDate()) {
1049
						System.out
1050
						.print("                CompletedProcessingDate");
1051
						System.out.println();
1052
						System.out.print("                    "
1053
								+ feedSubmissionInfo
1054
								.getCompletedProcessingDate());
1055
						System.out.println();
1056
					}
1057
				}
1058
			}
1059
			if (response.isSetResponseMetadata()) {
1060
				System.out.print("        ResponseMetadata");
1061
				System.out.println();
1062
				ResponseMetadata responseMetadata = response
1063
				.getResponseMetadata();
1064
				if (responseMetadata.isSetRequestId()) {
1065
					System.out.print("            RequestId");
1066
					System.out.println();
1067
					System.out.print("                "
1068
							+ responseMetadata.getRequestId());
1069
					System.out.println();
1070
				}
1071
			}
1072
			System.out.println(response.getResponseHeaderMetadata());
1073
			System.out.println();
1074
			System.out.println();
1075
			return 0;
1076
 
1077
		} catch (MarketplaceWebServiceException ex) {
1078
 
1079
			System.out.println("Caught Exception: " + ex.getMessage());
1080
			System.out.println("Response Status Code: " + ex.getStatusCode());
1081
			System.out.println("Error Code: " + ex.getErrorCode());
1082
			System.out.println("Error Type: " + ex.getErrorType());
1083
			System.out.println("Request ID: " + ex.getRequestId());
1084
			System.out.print("XML: " + ex.getXML());
1085
			System.out.println("ResponseHeaderMetadata: " + ex.getResponseHeaderMetadata());
1086
			return -1;
1087
		}
7512 vikram.rag 1088
 
7473 vikram.rag 1089
	}
1090
 
1091
}