Subversion Repositories SmartDukaan

Rev

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