Subversion Repositories SmartDukaan

Rev

Rev 7531 | Rev 7534 | 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.");
7473 vikram.rag 198
		} catch (InterruptedException e) {
199
			log.error(e.getMessage(), e);
7531 vikram.rag 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
		}
7531 vikram.rag 229
 
7532 vikram.rag 230
		long time = tcl.getClient().getSourceDetail(3).getlastUpdatedOn();
231
		XMLGregorianCalendar startTime = df.newXMLGregorianCalendar(new GregorianCalendar().setTimeInMillis(time));
7473 vikram.rag 232
		// endTime = now -2. So, startTime = now - 2 - INTERVAL_IN_MINS.
233
		System.out.println("Sync job start time." + startTime.getDay() +"-"+ startTime.getMonth()+"-" + startTime.getHour()+":"+startTime.getMinute());
234
 
7531 vikram.rag 235
		//startTime.add(df.newDurationDayTime(false, 0, 0, INTERVAL_IN_MINS ,	0));
236
		//System.out.println("Sync job start time after add .." + startTime.getDay() +"-"+ startTime.getMonth()+"-" + startTime.getHour()+":"+startTime.getMinute());
7473 vikram.rag 237
		/*
238
		 * This loop keeps running until the stopSynch() method is called.
239
		 * stopSynch() sets keepRunning to false.
240
		 */
241
		System.out.println("Sync job starting.");
242
		log.info("Sync job starting.");
243
		while (keepRunning) {
244
			// Subtract 2 minutes because endTime returned from server = now - 2
245
			// mins.
246
			long timeWaited = System.currentTimeMillis()
247
			- startTime.toGregorianCalendar().getTimeInMillis()
248
			- 120000;
249
 
250
			System.out.println("Time waited : " + timeWaited/60000 + "Minutes");
251
			/*
252
			 * If the timeWaited is greater than 30 times the interval, we exit
253
			 * from the loop as the job is lagging far behind in getting new
254
			 * orders.
255
			 */
256
			//if (timeWaited > 24 * 4 * INTERVAL_IN_MINS * 60L * 1000L) {
257
			if (timeWaited > 100000 * 60L * 1000L) {	
258
				keepRunning = false;
259
				System.out.println("Setting keep running to false");
7531 vikram.rag 260
				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 261
			}
262
			/*
263
			 * If the time lapsed is greater than or equal to 15 mins, we will
264
			 * try to fetchOrderUpdates giving it a startTime.
265
			 */
266
			else if (timeWaited >= INTERVAL_IN_MINS * 60L * 1000L) {
267
				log.info("Time to fetch new order updates.");
268
 
269
				XMLGregorianCalendar endTime = fetchOrderUpdatesSince(startTime);
270
				//System.out.println("End Time is : " + endTime.getDay() +"-"+ endTime.getMonth()+"-" + endTime.getHour()+":"+endTime.getMinute());
7512 vikram.rag 271
				//createandsubmitOrderAcknowlegementFeed();
7473 vikram.rag 272
				if (endTime != null) {
273
					startTime = endTime;
7531 vikram.rag 274
					// TODO store end time in the database
7473 vikram.rag 275
				} else {
276
					log.info("endTime returned is null. Sleeping for "
277
							+ INTERVAL_IN_MINS + " minutes.");
278
					try {
279
						Thread.sleep(INTERVAL_IN_MINS * 60L * 1000L);
280
					} catch (InterruptedException e) {
281
						log.error(e.getMessage(), e);
282
						stopSynch();
283
						break;
284
					}
285
				}
286
			} else {
287
				try {
288
					long timeToSleepInMilliseconds = INTERVAL_IN_MINS * 60000L
289
					- timeWaited;
290
					log.info("Thread sleeping for "
291
							+ Math.round(timeToSleepInMilliseconds / 60000)
292
							+ " minutes.");
293
					// Sleep in 1 minute intervals for timeToSleepInMilliseconds
294
					// or until keepRunning is set to false.
295
					for (long i = timeToSleepInMilliseconds; i > 0
296
					&& keepRunning; i = i - 60000L) {
297
						if (i < 60000L) {
298
							Thread.sleep(i);
299
						} else {
300
							Thread.sleep(60000L);
301
						}
302
					}
303
 
304
				} catch (InterruptedException e) {
305
					log.error(e.getMessage(), e);
306
					stopSynch();
307
					break;
308
				}
309
			}
310
		}
311
		log.info("Sync job ending.");
312
	}
313
 
314
	/**
315
	 * Call this method to stop execution of this job. The job will stop after
316
	 * it has finished processing the current call (if it is in the middle of
317
	 * processing any). For example if a listOrders call has been invoked, then
318
	 * it will terminate the job only after the call returns with valid results.
319
	 * If this method is called while the thread is sleeping, because a request
320
	 * was throttled, the job will terminate after it wakes up.
321
	 */
322
	public void stopSynch() {
7531 vikram.rag 323
		//keepRunning = false;
7473 vikram.rag 324
	}
325
 
326
	/**
327
	 * Gets all orders updated between the given startTime and the calculated
328
	 * endTime. The endTime is calculated by the service as server's system
329
	 * clock time minus 2 mins. The method returns this endTime.
330
	 * 
331
	 */
332
	protected XMLGregorianCalendar fetchOrderUpdatesSince(
333
			XMLGregorianCalendar startTime) {
334
		System.out.println("Fetching order updates since " + startTime.toString());
335
		log.info("Fetching order updates since " + startTime.toString());
336
		ListOrdersRequest listOrdersRequest = new ListOrdersRequest();
337
 
338
		listOrdersRequest.setSellerId(sellerId);
339
		if (OrdersConfig.marketplaceIdList != null) {
340
			listOrdersRequest
341
			.setMarketplaceId(OrdersConfig.marketplaceIdList);
342
		}
343
		listOrdersRequest.setLastUpdatedAfter(startTime);
344
		OrderStatusList statusList = new OrderStatusList();
345
		List<OrderStatusEnum> orderstatusList = new ArrayList<OrderStatusEnum>();
346
		orderstatusList.add(OrderStatusEnum.UNSHIPPED);
347
		orderstatusList.add(OrderStatusEnum.PARTIALLY_SHIPPED);
348
		//orderstatusList.add(OrderStatusEnum.CANCELED);
349
 
350
		statusList.setStatus(orderstatusList);
351
		listOrdersRequest.setOrderStatus(statusList);
352
		XMLGregorianCalendar lastUpdatedDate = null;
353
 
354
		try {
355
			ListOrdersResult listOrdersResult = listOrders(listOrdersRequest);
356
			if (listOrdersResult.isSetLastUpdatedBefore()) {
357
				lastUpdatedDate = listOrdersResult.getLastUpdatedBefore();
358
			}
359
 
360
			if (listOrdersResult != null && listOrdersResult.isSetNextToken()) {
361
				ListOrdersByNextTokenRequest listOrdersByNextTokenRequest = new ListOrdersByNextTokenRequest();
362
				listOrdersByNextTokenRequest.setSellerId(sellerId);
363
				String nextToken = listOrdersResult.getNextToken();
364
				ListOrdersByNextTokenResult listOrdersByNextTokenResult = null;
365
				while (nextToken != null && keepRunning) {
366
					listOrdersByNextTokenRequest.setNextToken(nextToken);
367
					listOrdersByNextTokenResult = listOrdersByNextToken(listOrdersByNextTokenRequest);
368
					nextToken = listOrdersByNextTokenResult.getNextToken();
369
				}
370
				if (listOrdersByNextTokenResult.isSetLastUpdatedBefore()) {
371
					lastUpdatedDate = listOrdersByNextTokenResult
372
					.getLastUpdatedBefore();
373
				}
374
			}
375
			return lastUpdatedDate;
376
		} catch (MarketplaceWebServiceOrdersException ex) {
377
			log.error(ex.getMessage(), ex);
378
			System.out.println("Caught Exception: " + ex.getMessage());
379
			System.out.println("Response Status Code: " + ex.getStatusCode());
380
			System.out.println("Error Code: " + ex.getErrorCode());
381
			System.out.println("Error Type: " + ex.getErrorType());
382
			System.out.println("Request ID: " + ex.getRequestId());
383
			System.out.print("XML: " + ex.getXML());
384
			return null;
385
		}
386
	}
387
	//This method will create Order Acknowledgement FEED
388
	public void createandsubmitOrderAcknowlegementFeed() {
389
		TransactionClient tcl=null;
390
		List<AmazonOrdersToAcknowledge> amazonOrdersToAcknowledge=null;
391
		try {
392
			tcl = new TransactionClient();
393
			amazonOrdersToAcknowledge = tcl.getClient().getAmazonOrdersToAcknowledge();
394
		} catch (TTransportException e2) {
395
			// TODO Auto-generated catch block
396
			e2.printStackTrace();
397
		} catch (TException e) {
398
			// TODO Auto-generated catch block
399
			e.printStackTrace();
400
		}
401
		if(amazonOrdersToAcknowledge!=null && amazonOrdersToAcknowledge.size() > 0){
402
			file = new File(AMAZON_ORDER_ACKNOWLEDGEMENT_XML);
403
			AmazonEnvelope amazonenvelope = new AmazonEnvelope();
404
			Header header = new Header();
405
			header.setDocumentVersion("1.0");
406
			header.setMerchantIdentifier("AF6E3O0VE0X4D");
407
			header.setOverrideReleaseId(null);
408
			amazonenvelope.setHeader(header);
409
			amazonenvelope.setMessageType("OrderAcknowledgement");
410
			amazonenvelope.setMarketplaceName(null);
411
			List<Message> messages = amazonenvelope.getMessage();
412
			Map<String,Long> amazonOrdertxnMap = new HashMap<String,Long>();
413
			Map<String,List<String>> amazonOrderIdOrderItemMap = new HashMap<String,List<String>>();
414
			Map<String,Integer> amazonOrderItemSuccessMap = new HashMap<String,Integer>();
415
			Map<String,Integer> amazonOrderItemFailureMap = new HashMap<String,Integer>();
416
			for(AmazonOrdersToAcknowledge amazonOrderToAcknowledge:amazonOrdersToAcknowledge ){
417
				if(!amazonOrdertxnMap.containsKey(amazonOrderToAcknowledge.getAmazonOrderId())){
418
					amazonOrdertxnMap.put(amazonOrderToAcknowledge.getAmazonOrderId(),amazonOrderToAcknowledge.getTransaction_id());
419
				}
420
				if(!amazonOrderIdOrderItemMap.containsKey(amazonOrderToAcknowledge.getAmazonOrderId())){
421
					List<String> orderItemsList = new ArrayList<String>();
422
					orderItemsList.add(amazonOrderToAcknowledge.getAmazonOrderItemId());
423
					amazonOrderIdOrderItemMap.put(amazonOrderToAcknowledge.getAmazonOrderId(),orderItemsList);
424
				}
425
				else{
426
					if(!amazonOrderIdOrderItemMap.get(amazonOrderToAcknowledge.getAmazonOrderId()).contains(amazonOrderToAcknowledge.getAmazonOrderItemId()))
427
						amazonOrderIdOrderItemMap.get(amazonOrderToAcknowledge.getAmazonOrderId()).add(amazonOrderToAcknowledge.getAmazonOrderItemId());
428
				}
429
				if(amazonOrderToAcknowledge.getStatus().equals("Order-Payment-Success")){
430
					amazonOrderItemSuccessMap.put(amazonOrderToAcknowledge.getAmazonOrderId()+amazonOrderToAcknowledge.getAmazonOrderItemId(),amazonOrderToAcknowledge.getCount());
431
				}
432
				if(amazonOrderToAcknowledge.getStatus().equals("Order-Payment-Failure")){
433
					amazonOrderItemFailureMap.put(amazonOrderToAcknowledge.getAmazonOrderId()+amazonOrderToAcknowledge.getAmazonOrderItemId(),amazonOrderToAcknowledge.getCount());
434
				}	
435
			}
436
			JAXBContext context;
437
			Marshaller m=null;
438
			try {
439
				context = JAXBContext.newInstance(AmazonEnvelope.class);
440
				m = context.createMarshaller();
441
			} catch (JAXBException e1) {
442
				// TODO Auto-generated catch block
443
				e1.printStackTrace();
444
			}
445
 
446
			for (Map.Entry<String,List<String>> entry : amazonOrderIdOrderItemMap.entrySet()){
447
				OrderAcknowledgement orderAcknowLedgement = new OrderAcknowledgement();
448
				List<OrderAcknowledgement.Item> acknowledgementItems = orderAcknowLedgement.getItem();
449
				String orderid = entry.getKey();
450
				orderAcknowLedgement.setAmazonOrderID(orderid);
451
				orderAcknowLedgement.setMerchantOrderID(amazonOrdertxnMap.get(orderid).toString());
452
				orderAcknowLedgement.setStatusCode("Failure");
453
				for(String orderItemId :entry.getValue()){
454
					OrderAcknowledgement.Item orderAcknowledgementItem = new OrderAcknowledgement.Item();
455
					if(amazonOrderItemSuccessMap.get(orderid+orderItemId)!=null && amazonOrderItemSuccessMap.get(orderid+orderItemId) > 0){
456
						orderAcknowledgementItem.setAmazonOrderItemCode(orderItemId);
457
						orderAcknowLedgement.setStatusCode("Success");
458
					}
459
					else{
460
						orderAcknowledgementItem.setAmazonOrderItemCode(orderItemId);
461
						orderAcknowledgementItem.setCancelReason("ShippingAddressUndeliverable");
462
					}
463
					acknowledgementItems.add(orderAcknowledgementItem);
464
 
465
				}
466
				AmazonEnvelope.Message message = new AmazonEnvelope.Message();
467
				Random rand = new Random();
468
				message.setMessageID(BigInteger.valueOf(Math.abs(rand.nextInt())));
469
				message.setOrderAcknowledgement(orderAcknowLedgement);
470
				messages.add(message);
471
			}
472
 
473
			System.out.println("Messages is " + messages);
474
			try {
475
				m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
476
				m.marshal(amazonenvelope, file);
477
				m.marshal(amazonenvelope, System.out);
478
 
479
			} catch (Exception e) {
480
				// TODO Auto-generated catch block
481
				e.printStackTrace();
482
 
483
			}
484
			if(submitAcknowledgementFeed()==0);
485
			//if(true)
486
			{
487
				for (Map.Entry<String,Long> entry : amazonOrdertxnMap.entrySet()){
488
					try {
489
						tcl.getClient().changeAmazonOrderStatus(entry.getKey(),"Acknowledgement-Sent");
490
					} catch (TException e) {
491
						// TODO Auto-generated catch block
492
						e.printStackTrace();
493
					}
494
 
495
				}
496
			}
497
//			GmailUtils  gm = GmailUtils();
498
//			gm.sendSSLMessage(arg0, arg1, arg2, arg3, arg4, arg5)
499
		}
500
 
501
 
502
	}
503
 
504
	/*
505
	 * listOrders call. If a request is throttled, this method calls the
506
	 * throttling handler and sets the retry flag to true.
507
	 */
508
	protected ListOrdersResult listOrders(ListOrdersRequest request)
509
	throws MarketplaceWebServiceOrdersException {
510
		boolean retry;
511
		ListOrdersResponse listOrdersResponse = null;
512
		ListOrdersResult listOrdersResult = null;
513
		do {
514
			retry = false;
515
			try {
516
				System.out.println("Calling ListOrders.");
517
				log.info("Calling ListOrders.");
518
				listOrdersResponse = service.listOrders(request);
519
			} catch (MarketplaceWebServiceOrdersException ex) {
520
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
521
						&& "RequestThrottled".equals(ex.getErrorCode())) {
522
					retry = true;
523
					requestThrottledExceptionHandler(LIST_ORDERS_THROTTLE_LIMIT);
524
				} else {
525
					throw ex;
526
				}
527
			}
528
			if (listOrdersResponse != null
529
					&& listOrdersResponse.isSetListOrdersResult()) {
530
				listOrdersResult = listOrdersResponse.getListOrdersResult();
531
				if (listOrdersResult.isSetOrders()
532
						&& listOrdersResult.getOrders().isSetOrder()) {
533
					processOrderUpdates(listOrdersResult.getOrders().getOrder());
534
				}
535
			}
536
		} while (retry && keepRunning);
537
		return listOrdersResult;
538
	}
539
 
540
	/*
541
	 * listOrdersByNextToken call. If a request is throttled, this method calls
542
	 * the throttling handler and sets the retry flag to true.
543
	 */
544
	protected ListOrdersByNextTokenResult listOrdersByNextToken(
545
			ListOrdersByNextTokenRequest listOrdersByNextTokenRequest)
546
	throws MarketplaceWebServiceOrdersException {
547
		boolean retry;
548
		ListOrdersByNextTokenResponse listOrdersByNextTokenResponse = null;
549
		ListOrdersByNextTokenResult listOrdersByNextTokenResult = null;
550
		do {
551
			retry = false;
552
			try {
553
				log.info("Calling ListOrdersByNextToken.");
554
				listOrdersByNextTokenResponse = service
555
				.listOrdersByNextToken(listOrdersByNextTokenRequest);
556
			} catch (MarketplaceWebServiceOrdersException ex) {
557
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
558
						&& "RequestThrottled".equals(ex.getErrorCode())) {
559
					retry = true;
560
					requestThrottledExceptionHandler(LIST_ORDERS_THROTTLE_LIMIT);
561
				} else {
562
					throw ex;
563
				}
564
			}
565
			if (listOrdersByNextTokenResponse != null
566
					&& listOrdersByNextTokenResponse
567
					.isSetListOrdersByNextTokenResult()) {
568
				listOrdersByNextTokenResult = listOrdersByNextTokenResponse
569
				.getListOrdersByNextTokenResult();
570
				if (listOrdersByNextTokenResult.isSetOrders()
571
						&& listOrdersByNextTokenResult.getOrders().isSetOrder()) {
572
					processOrderUpdates(listOrdersByNextTokenResult.getOrders()
573
							.getOrder());
574
				}
575
			}
576
		} while (retry && keepRunning);
577
		return listOrdersByNextTokenResult;
578
	}
579
 
580
	/**
581
	 * This method is called to process updates on each of the orders that are
582
	 * returned by the ListOrders and ListOrdersByNextToken calls.
583
	 */
584
	protected void processOrderUpdates(List<Order> orders)
585
	throws MarketplaceWebServiceOrdersException {
586
		ListOrderItemsResult listOrderItemsResult;
587
		log.info("Processing order updates.");
588
		for (Order order : orders) {
589
			if (shouldFetchOrderItems(order)) {
590
				log.info("Order being processed: " + order.getAmazonOrderId());
591
				listOrderItemsResult = listOrderItems(order);
592
				if (listOrderItemsResult != null
593
						&& listOrderItemsResult.isSetNextToken()) {
594
					ListOrderItemsByNextTokenRequest listOrderItemsByNextTokenRequest = new ListOrderItemsByNextTokenRequest();
595
					listOrderItemsByNextTokenRequest
596
					.setSellerId(OrdersConfig.sellerId);
597
					String nextToken = listOrderItemsResult.getNextToken();
598
 
599
					ListOrderItemsByNextTokenResult listOrderItemsByNextTokenResult = null;
600
 
601
					while (nextToken != null && keepRunning) {
602
						listOrderItemsByNextTokenRequest
603
						.setNextToken(nextToken);
604
						listOrderItemsByNextTokenResult = listOrderItemsByNextToken(
605
								listOrderItemsByNextTokenRequest, order);
606
						nextToken = listOrderItemsByNextTokenResult
607
						.getNextToken();
608
					}
609
				}
610
			}
611
		}
612
	}
613
 
614
	/*
615
	 * listOrderItems call. If a request is throttled, this method calls the
616
	 * throttling handler and sets the retry flag to true.
617
	 */
618
	protected ListOrderItemsResult listOrderItems(Order order)
619
	throws MarketplaceWebServiceOrdersException {
620
		System.out.println("Calling ListOrderItems.");
621
		log.info("Calling ListOrderItems.");
622
		boolean retry;
623
		List<OrderItem> items;
624
		ListOrderItemsRequest listOrderItemsRequest = new ListOrderItemsRequest();
625
		listOrderItemsRequest.setSellerId(sellerId);
626
		listOrderItemsRequest.setAmazonOrderId(order.getAmazonOrderId());
627
		ListOrderItemsResponse listOrderItemsResponse = null;
628
		ListOrderItemsResult listOrderItemsResult = null;
629
 
630
		do {
631
			retry = false;
632
			try {
633
				listOrderItemsResponse = service
634
				.listOrderItems(listOrderItemsRequest);
635
			} catch (MarketplaceWebServiceOrdersException ex) {
636
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
637
						&& "RequestThrottled".equals(ex.getErrorCode())) {
638
					retry = true;
639
					requestThrottledExceptionHandler(LIST_ORDER_ITEMS_THROTTLE_LIMIT);
640
				} else {
641
					throw ex;
642
				}
643
			}
644
			if (listOrderItemsResponse != null
645
					&& listOrderItemsResponse.isSetListOrderItemsResult()) {
646
				listOrderItemsResult = listOrderItemsResponse
647
				.getListOrderItemsResult();
648
				if (listOrderItemsResult.isSetOrderItems()
649
						&& listOrderItemsResult.getOrderItems()
650
						.isSetOrderItem()) {
651
					items = listOrderItemsResponse.getListOrderItemsResult()
652
					.getOrderItems().getOrderItem();
653
					processOrderItems(order, items);
654
				}
655
			}
656
 
657
		} while (retry && keepRunning);
658
 
659
		return listOrderItemsResult;
660
	}
661
 
662
	/*
663
	 * listOrderItemsByNextToken call. If a request is throttled, this method
664
	 * calls the throttling handler and sets the retry flag to true.
665
	 */
666
	protected ListOrderItemsByNextTokenResult listOrderItemsByNextToken(
667
			ListOrderItemsByNextTokenRequest listOrderItemsByNextTokenRequest,
668
			Order order) throws MarketplaceWebServiceOrdersException {
669
		log.info("Calling ListOrderItemsByNextToken.");
670
		boolean retry;
671
		List<OrderItem> items;
672
		ListOrderItemsByNextTokenResponse listOrderItemsByNextTokenResponse = null;
673
		ListOrderItemsByNextTokenResult listOrderItemsByNextTokenResult = null;
674
 
675
		do {
676
			retry = false;
677
			try {
678
				listOrderItemsByNextTokenResponse = service
679
				.listOrderItemsByNextToken(listOrderItemsByNextTokenRequest);
680
			} catch (MarketplaceWebServiceOrdersException ex) {
681
				if (ex.getStatusCode() == HttpStatus.SC_SERVICE_UNAVAILABLE
682
						&& "RequestThrottled".equals(ex.getErrorCode())) {
683
					retry = true;
684
					requestThrottledExceptionHandler(LIST_ORDER_ITEMS_THROTTLE_LIMIT);
685
				} else {
686
					throw ex;
687
				}
688
			}
689
			if (listOrderItemsByNextTokenResponse != null
690
					&& listOrderItemsByNextTokenResponse
691
					.isSetListOrderItemsByNextTokenResult()) {
692
				listOrderItemsByNextTokenResult = listOrderItemsByNextTokenResponse
693
				.getListOrderItemsByNextTokenResult();
694
				if (listOrderItemsByNextTokenResult.isSetOrderItems()
695
						&& listOrderItemsByNextTokenResult.getOrderItems()
696
						.isSetOrderItem()) {
697
					items = listOrderItemsByNextTokenResponse
698
					.getListOrderItemsByNextTokenResult()
699
					.getOrderItems().getOrderItem();
700
					processOrderItems(order, items);
701
				}
702
			}
703
		} while (retry && keepRunning);
704
 
705
		return listOrderItemsByNextTokenResult;
706
	}
707
 
708
	/**
709
	 * TODO: Change the logic to decide when order items need to be fetched.
710
	 * Probably only if this is the first time you are seeing the order.
711
	 */
712
	protected boolean shouldFetchOrderItems(Order order) {
713
		return true;
714
	}
715
 
716
	/**
717
	 * Simply prints out the data to standard out. TODO: Insert logic to process
718
	 * order items here (perhaps store it in your local datastore).
719
	 */
720
	public void processOrderItems(Order order, List<OrderItem> orderItems) {
721
		log.info("****************** Order info********************");
722
		log.info(order.toString());
723
		System.out.println("------------------------------------------");
724
		System.out.println("--------Amazon Order Details START--------");
725
		System.out.println("------------------------------------------");
726
		System.out.println("Amazon Order ID                  :  " + order.getAmazonOrderId());
727
		System.out.println("Buyer Email                      :  " + order.getBuyerEmail());
728
		System.out.println("Buyer Name                       :  " + order.getBuyerName());
729
		System.out.println("MarketPlace ID                   :  " + order.getMarketplaceId());
730
		System.out.println("Order Channel                    :  " + order.getOrderChannel());
731
		System.out.println("Sales Channel                    :  " + order.getSalesChannel());
732
		System.out.println("Seller Order ID                  :  " + order.getSellerOrderId());
733
		System.out.println("Shipment Service Level Category  :  " + order.getShipmentServiceLevelCategory());
734
		System.out.println("Shipment Service Level           :  " + order.getShipServiceLevel());
735
		System.out.println("TFM Shipment Status              :  " + order.getTFMShipmentStatus());
736
		System.out.println("Number of Items Shipped          :  " + order.getNumberOfItemsShipped());
737
		System.out.println("Number of Items UnShipped        :  " + order.getNumberOfItemsUnshipped());
738
		System.out.println("Fulfillment Channel              :  " + order.getFulfillmentChannel());
739
		System.out.println("Last Updated Date                :  " + order.getLastUpdateDate());
740
		System.out.println("Order Status                     :  " + order.getOrderStatus());
741
		//System.out.println("Order Currency code              :  " + order.getOrderTotal().getCurrencyCode());
742
		//System.out.println("Order Amount                     :  " + order.getOrderTotal().getAmount());
743
		System.out.println("Payment Method                   :  " + order.getPaymentMethod());
744
		System.out.println("Payment Execution Detail         :  " + order.getPaymentExecutionDetail());
745
		System.out.println("Purchase Date                    :  " + order.getPurchaseDate());
746
		System.out.println("Shipping Address                 :  " + order.getShippingAddress());
747
		System.out.println("------------------------------------------");
748
		System.out.println("-----------Amazon Order Details END-------");
749
		System.out.println("------------------------------------");
750
		Map<String,String> orderItemSkuMap = new HashMap<String,String>();
751
		if (orderItems != null && orderItems.size() > 0) {
752
			log.info("================== Order Items info ====================");
753
			System.out.println("================== Order Items info ====================");
754
			int i = 0;
755
			for (OrderItem item : orderItems) {
756
				log.info(item.toString());
757
				System.out.println("===================================");
758
				System.out.println("Order Item : " + (i+1));
759
				System.out.println("Item ASIN :  " + item.getASIN());
760
				System.out.println("Item Gift Message Text :  " + item.getGiftMessageText());
761
				System.out.println("Item Gift Wrap Level   :  " + item.getGiftWrapLevel());
762
				System.out.println("Order Item ID          :  " + item.getOrderItemId());
763
				System.out.println("Quantity Ordered       :  " + item.getQuantityOrdered());
764
				System.out.println("Saholic Item ID        :  " + item.getSellerSKU());
765
				System.out.println("Item Description       :  " + item.getTitle());
766
				System.out.println("Item Quantity Shipped  :  " + item.getQuantityShipped());
767
				System.out.println("Item Quantity Ordered  :  " + item.getQuantityOrdered());
768
				System.out.println("COD Fees               :  " + item.getCODFee());
769
				System.out.println("COD Fees Discount      :  " + item.getCODFeeDiscount());
770
				System.out.println("Gift Wrap Price        :  " + item.getGiftWrapPrice());
771
				System.out.println("Gift Wrap Text         :  " + item.getGiftWrapTax());
772
				System.out.println("Invoice Data           :  " + item.getInvoiceData());
773
				System.out.println("Item Price             :  " + item.getItemPrice());
774
				System.out.println("Item Tax               :  " + item.getItemTax());
775
				System.out.println("Promotion Discount     :  " + item.getPromotionDiscount());
776
				System.out.println("Promotion IDs          :  " + item.getPromotionIds());
777
				System.out.println("Shipping Discounts     :  " + item.getShippingDiscount());
778
				System.out.println("Shipping Price         :  " + item.getShippingPrice());
779
				System.out.println("Shipping Tax           :  " + item.getShippingTax());
780
				System.out.println("===================================");
781
				orderItemSkuMap.put(item.getSellerSKU(),item.getOrderItemId());
782
				System.out.println("SKU and Order Item Code are  : " + item.getSellerSKU() + " " +item.getOrderItemId() );
783
				i++;
784
			}
785
			//if(order.getFulfillmentChannel().equals(FulfillmentChannelEnum.MFN) && (order.getOrderStatus().equals(OrderStatusEnum.UNSHIPPED) || order.getOrderStatus().equals(OrderStatusEnum.CANCELED))){
786
			//if(order.getFulfillmentChannel().equals(FulfillmentChannelEnum.MFN) && (order.getOrderStatus().equals(OrderStatusEnum.UNSHIPPED) || order.getOrderStatus().equals(OrderStatusEnum.PARTIALLY_SHIPPED))){
787
			if(order.getFulfillmentChannel().equals(FulfillmentChannelEnum.MFN) && order.getOrderStatus().equals(OrderStatusEnum.UNSHIPPED) && order.getSellerOrderId()==null ){
788
				AmazonOrder amazonOrder = new AmazonOrder();
789
				long txnId = amazonOrder.persistTransaction(order,orderItems);
790
				TransactionClient tcl=null;
791
				InventoryClient icl = null;
792
				PaymentClient pcl = null;
793
				Map<Long,Double> saholicItemMap = new HashMap<Long,Double>();
794
				if (txnId != -1){
795
					List<in.shop2020.model.v1.order.AmazonOrder> amazonOrders = new ArrayList<in.shop2020.model.v1.order.AmazonOrder>();
796
					try {
797
 
798
						tcl = new TransactionClient();
799
						icl = new InventoryClient();
800
						pcl = new PaymentClient();;
801
						System.out.println("temp id is" +tempId);
802
						List<in.shop2020.model.v1.order.Order>  saholicOrders =tcl.getClient().getOrdersForTransaction(txnId,tempId);
803
						for(in.shop2020.model.v1.order.Order saholicOrder:saholicOrders)
804
						{
805
							List<in.shop2020.model.v1.order.LineItem> lineitems= saholicOrder.getLineitems();
806
							long itemId=0; 
807
							for(in.shop2020.model.v1.order.LineItem lineitem:lineitems){
808
								itemId = lineitem.getItem_id();
809
								if(saholicItemMap.get(lineitem.getItem_id())!=null)
810
									saholicItemMap.put(lineitem.getItem_id(),saholicItemMap.get(lineitem.getItem_id())+1);
811
								else
812
									saholicItemMap.put(lineitem.getItem_id(),lineitem.getQuantity());	
813
							}
814
							in.shop2020.model.v1.order.AmazonOrder aOrder = new in.shop2020.model.v1.order.AmazonOrder();
815
							aOrder.setAmazonOrderCode(order.getAmazonOrderId());
816
							aOrder.setAmazonOrderItemCode(orderItemSkuMap.get(Long.toString(itemId)));
817
							aOrder.setItem_id(itemId);
818
							aOrder.setOrderId(saholicOrder.getId());
819
							aOrder.setTransactionId(txnId);
820
							aOrder.setStatus("Order-Creation-Success");
821
							tcl.getClient().addAmazonOrder(aOrder);
822
							amazonOrders.add(aOrder);
823
						}
824
						long merchantPaymentId = pcl.getClient().createPayment(tempId, Double.parseDouble(order.getOrderTotal().getAmount()), 15, txnId, false);
825
						pcl.getClient().updatePaymentDetails(merchantPaymentId, "", "", "15", "", "", "", "", "", PaymentStatus.SUCCESS, "", null);
826
						boolean success=tcl.getClient().changeTransactionStatus(txnId, TransactionStatus.AUTHORIZED, "Payment authorized", PickUpType.COURIER.getValue(), OrderType.B2C, OrderSource.AMAZON);
827
						if(success){
828
							for(in.shop2020.model.v1.order.AmazonOrder aorder:amazonOrders){
829
								AmazonInventorySnapshot amazonInventorySnapshot=icl.getClient().getAmazonInventoryForItem(aorder.getItem_id());
830
								long reserved = (amazonInventorySnapshot.getReserved()+1);
831
								amazonInventorySnapshot.setReserved(reserved);
832
								icl.getClient().addOrUpdateAmazonInventoryForItem((amazonInventorySnapshot));
833
								tcl.getClient().updateAmazonOrderStatus(aorder.getOrderId(),"Order-Payment-Success");
834
							}
835
						}
836
					}
837
					catch (TTransportException e) {
838
						// TODO Auto-generated catch block
839
						for(in.shop2020.model.v1.order.AmazonOrder aorder:amazonOrders){
840
							try {
841
								tcl.getClient().updateAmazonOrderStatus(aorder.getOrderId(),"Order-Payment-Failure");
842
							} catch (TException e1) {
843
								// TODO Auto-generated catch block
844
								e1.printStackTrace();
845
							}
846
						}
847
 
848
						//e.printStackTrace();
849
					} catch (TException e) {
850
						// TODO Auto-generated catch block
851
						e.printStackTrace();
852
					} catch (PaymentException e) {
853
						// TODO Auto-generated catch block
854
						e.printStackTrace();
855
					} catch (TransactionServiceException e) {
856
						// TODO Auto-generated catch block
857
						e.printStackTrace();
858
					}
859
				}
860
			}
861
 
862
		}
863
	}
864
 
865
 
866
	/*
867
	 * When a request is throttled, this method is called to make the thread
868
	 * sleep for a period of time specified by the throttling limit.
869
	 */
870
	private void requestThrottledExceptionHandler(
871
			long throttlingLimitInMilliseconds) {
872
		try {
873
			log.info("Request throttled. Sleeping for "
874
					+ throttlingLimitInMilliseconds / 1000 + " seconds.");
875
 
876
			// Sleep in 1 minute intervals for throttlingLimitInMillis or until
877
			// keepRunning is set to false.
878
			for (long i = throttlingLimitInMilliseconds; i > 0 && keepRunning; i = i - 60000L) {
879
				if (i < 60000L) {
880
					Thread.sleep(i);
881
				} else {
882
					Thread.sleep(60000L);
883
				}
884
			}
885
		} catch (InterruptedException e) {
886
			log.error(e.getMessage(), e);
887
			return;
888
		}
889
	}
890
 
891
	public static String computeContentMD5HeaderValue( FileInputStream fis) {
892
		try {
893
			DigestInputStream dis = new DigestInputStream( fis,
894
					MessageDigest.getInstance( "MD5" ));
895
			byte[] buffer = new byte[8192];
896
			while( dis.read( buffer ) > 0 );
897
			String md5Content = new String(Base64.encodeBase64(dis.getMessageDigest().digest())
898
			);
899
			// Effectively resets the stream to be beginning of the file via a
900
			fis.getChannel().position( 0 );
901
			return md5Content;
902
		} catch (NoSuchAlgorithmException e) {
903
			// TODO Auto-generated catch block
904
			e.printStackTrace();
905
		} catch (IOException e) {
906
			// TODO Auto-generated catch block
907
			e.printStackTrace();
908
		}
909
		return null;
910
 
911
	}
912
 
913
	public int submitAcknowledgementFeed(){
914
 
7512 vikram.rag 915
		SubmitFeedRequest request= new SubmitFeedRequest();
7473 vikram.rag 916
		final String merchantId = "AF6E3O0VE0X4D";	
917
		// marketplaces to which this feed will be submitted; look at the
918
		// API reference document on the MWS website to see which marketplaces are
919
		// included if you do not specify the list yourself
920
		final IdList marketplaces = new IdList(Arrays.asList(
921
		"A21TJRUUN4KGV"));
922
		request.setMerchant(merchantId);
923
		FileInputStream fis=null;
924
		try {
925
			fis = new FileInputStream(AMAZON_ORDER_ACKNOWLEDGEMENT_XML);
926
		} catch (FileNotFoundException e1) {
927
			// TODO Auto-generated catch block
928
			e1.printStackTrace();
929
			return -1;
930
		}
931
		final String accessKeyId = "AKIAII3SGRXBJDPCHSGQ";
932
		final String secretAccessKey = "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";
933
 
934
		final String appName = "Test";
935
		final String appVersion = "1.0";
936
 
937
		MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
938
 
939
		// India
940
		config.setServiceURL("https://mws.amazonservices.in");
941
 
942
		request.setContentMD5(computeContentMD5HeaderValue(fis));
943
		request.setFeedContent(fis);
944
		request.setMarketplaceIdList(marketplaces);
945
		request.setFeedType("_POST_ORDER_ACKNOWLEDGEMENT_DATA_");
946
		MarketplaceWebService s_service = new MarketplaceWebServiceClient(
947
				accessKeyId, secretAccessKey, appName, appVersion, config);
948
 
949
		try {
950
 
951
			SubmitFeedResponse response = s_service.submitFeed(request);
952
 
953
			System.out.println("SubmitFeed Action Response");
954
			System.out
955
			.println("=============================================================================");
956
			System.out.println();
957
 
958
			System.out.print("    SubmitFeedResponse");
959
			System.out.println();
960
			if (response.isSetSubmitFeedResult()) {
961
				System.out.print("        SubmitFeedResult");
962
				//	System.out.println();
963
				SubmitFeedResult submitFeedResult = response
964
				.getSubmitFeedResult();
965
				if (submitFeedResult.isSetFeedSubmissionInfo()) {
966
					//	System.out.print("            FeedSubmissionInfo");
967
					//	System.out.println();
968
					FeedSubmissionInfo feedSubmissionInfo = submitFeedResult
969
					.getFeedSubmissionInfo();
970
					if (feedSubmissionInfo.isSetFeedSubmissionId()) {
971
						System.out.print("                FeedSubmissionId");
972
						System.out.println();
973
						System.out.print("                    "
974
								+ feedSubmissionInfo.getFeedSubmissionId());
975
 
976
						System.out.println();
977
					}
978
					if (feedSubmissionInfo.isSetFeedType()) {
979
						System.out.print("                FeedType");
980
						System.out.println();
981
						System.out.print("                    "
982
								+ feedSubmissionInfo.getFeedType());
983
						System.out.println();
984
					}
985
					if (feedSubmissionInfo.isSetSubmittedDate()) {
986
						System.out.print("                SubmittedDate");
987
						System.out.println();
988
						System.out.print("                    "
989
								+ feedSubmissionInfo.getSubmittedDate());
990
						System.out.println();
991
					}
992
					if (feedSubmissionInfo.isSetFeedProcessingStatus()) {
993
						System.out
994
						.print("                FeedProcessingStatus");
995
						System.out.println();
996
						System.out.print("                    "
997
								+ feedSubmissionInfo.getFeedProcessingStatus());
998
						System.out.println();
999
					}
1000
					if (feedSubmissionInfo.isSetStartedProcessingDate()) {
1001
						System.out
1002
						.print("                StartedProcessingDate");
1003
						System.out.println();
1004
						System.out
1005
						.print("                    "
1006
								+ feedSubmissionInfo
1007
								.getStartedProcessingDate());
1008
						System.out.println();
1009
					}
1010
					if (feedSubmissionInfo.isSetCompletedProcessingDate()) {
1011
						System.out
1012
						.print("                CompletedProcessingDate");
1013
						System.out.println();
1014
						System.out.print("                    "
1015
								+ feedSubmissionInfo
1016
								.getCompletedProcessingDate());
1017
						System.out.println();
1018
					}
1019
				}
1020
			}
1021
			if (response.isSetResponseMetadata()) {
1022
				System.out.print("        ResponseMetadata");
1023
				System.out.println();
1024
				ResponseMetadata responseMetadata = response
1025
				.getResponseMetadata();
1026
				if (responseMetadata.isSetRequestId()) {
1027
					System.out.print("            RequestId");
1028
					System.out.println();
1029
					System.out.print("                "
1030
							+ responseMetadata.getRequestId());
1031
					System.out.println();
1032
				}
1033
			}
1034
			System.out.println(response.getResponseHeaderMetadata());
1035
			System.out.println();
1036
			System.out.println();
1037
			return 0;
1038
 
1039
		} catch (MarketplaceWebServiceException ex) {
1040
 
1041
			System.out.println("Caught Exception: " + ex.getMessage());
1042
			System.out.println("Response Status Code: " + ex.getStatusCode());
1043
			System.out.println("Error Code: " + ex.getErrorCode());
1044
			System.out.println("Error Type: " + ex.getErrorType());
1045
			System.out.println("Request ID: " + ex.getRequestId());
1046
			System.out.print("XML: " + ex.getXML());
1047
			System.out.println("ResponseHeaderMetadata: " + ex.getResponseHeaderMetadata());
1048
			return -1;
1049
		}
7512 vikram.rag 1050
 
7473 vikram.rag 1051
	}
1052
 
1053
}