Subversion Repositories SmartDukaan

Rev

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