Subversion Repositories SmartDukaan

Rev

Rev 4305 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4295 varun.gupt 1
package in.shop2020.support.controllers;
2
 
3
import java.io.IOException;
4
import java.text.DateFormat;
5
import java.text.SimpleDateFormat;
6
import java.util.Calendar;
7
import java.util.Date;
8
import java.util.List;
9
 
10
import in.shop2020.model.v1.catalog.Item;
11
import in.shop2020.model.v1.catalog.ProductNotificationRequest;
12
import in.shop2020.model.v1.catalog.ProductNotificationRequestCount;
13
import in.shop2020.thrift.clients.CatalogClient;
14
import in.shop2020.utils.ModelUtils;
15
 
16
import javax.servlet.ServletOutputStream;
17
import javax.servlet.http.HttpServletRequest;
18
import javax.servlet.http.HttpServletResponse;
19
 
20
import org.apache.struts2.interceptor.ServletRequestAware;
21
import org.apache.struts2.interceptor.ServletResponseAware;
22
import org.apache.struts2.rest.DefaultHttpHeaders;
23
import org.apache.struts2.rest.HttpHeaders;
24
import org.slf4j.Logger;
25
import org.slf4j.LoggerFactory;
26
 
27
/**
28
 * @author Varun Gupta
29
 */
30
 
31
public class ProductNotificationsController implements ServletRequestAware, ServletResponseAware {
32
 
33
	private static Logger logger = LoggerFactory.getLogger(ProductNotificationsController.class);
34
	private final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
35
	private HttpServletRequest request;
36
	private HttpServletResponse response;
37
 
38
	private List<ProductNotificationRequest> notificationRequests;
39
	private List<ProductNotificationRequestCount> notificationRequestCounts;
40
 
41
	public String index()	{
42
		try	{
43
			CatalogClient csc = new CatalogClient();
44
			in.shop2020.model.v1.catalog.InventoryService.Client catalogClient= csc.getClient();
45
			Date startDate;
46
 
47
			if (request.getParameter("sp") != null)	{
48
				startDate = getStartDate(request.getParameter("sp"));
49
			} else	{
50
				startDate = getStartDate("d");
51
			}
52
			System.out.println(startDate);
53
			notificationRequestCounts = catalogClient.getProductNotificationRequestCount(startDate.getTime());
54
			System.out.println(notificationRequestCounts);
55
		} catch (Exception e) {
56
			logger.error(e.toString());
57
		}
58
		return "index";
59
	}
60
 
61
	public HttpHeaders create() {
62
		try	{
63
			CatalogClient csc = new CatalogClient();
64
			in.shop2020.model.v1.catalog.InventoryService.Client catalogClient= csc.getClient();
65
			Date startDate = getStartDate(request.getParameter("np"));
66
			notificationRequests = catalogClient.getProductNotifications(startDate.getTime());
67
 
68
			logger.info(notificationRequests.toString());
69
 
70
			response.setContentType("text/tab-separated-values");
71
			response.setHeader("Content-disposition", "inline; filename=product-notifications-since-" + Long.toString(startDate.getTime()) + ".tsv");
72
 
73
			ServletOutputStream sos;
74
			try {
75
				sos = response.getOutputStream();
76
				sos.write(getNotificationsTSV().getBytes());
77
				sos.flush();
78
			} catch (IOException e) {
79
				logger.error("Error while streaming the hotspot reconciliation report", e);
80
			}
81
		} catch (Exception e) {
82
			e.printStackTrace();
83
		}
84
		return new DefaultHttpHeaders("report");
85
	}
86
 
87
	@Override
88
	public void setServletRequest(HttpServletRequest request) {
89
		this.request = request;
90
	}
91
 
92
	@Override
93
	public void setServletResponse(HttpServletResponse response) {
94
		this.response = response;
95
	}
96
 
97
	private String getNotificationsTSV()	{
98
		StringBuilder builder = new StringBuilder();
99
 
100
		for (ProductNotificationRequest notificationRequest: notificationRequests)	{
101
			Item item = notificationRequest.getItem();
102
			builder.append(ModelUtils.extractProductNameFromItem(item));
103
			builder.append("\t");
104
			builder.append(notificationRequest.getEmail());
105
			builder.append("\t");
106
			builder.append(dateFormat.format(new Date(notificationRequest.getAddedOn())));
107
			builder.append("\n");
108
		}
109
		return builder.toString();
110
	}
111
 
112
	private Date getStartDate(String selectedPeriodOption)	{
113
		System.out.println("Selected Period Option: " + selectedPeriodOption);
114
 
115
		Calendar now = Calendar.getInstance();
116
		System.out.println(now);
117
 
118
		if(selectedPeriodOption.equals("d"))	{
119
			now.add(Calendar.DAY_OF_MONTH, -1);
120
		}
121
		else if (selectedPeriodOption.equals("2d"))	{
122
			now.add(Calendar.DAY_OF_MONTH, -2);
123
		}
124
		else if (selectedPeriodOption.equals("3d"))	{
125
			now.add(Calendar.DAY_OF_MONTH, -3);
126
		}
127
		else if (selectedPeriodOption.equals("w"))	{
128
			now.add(Calendar.WEEK_OF_MONTH, -1);
129
		}
130
		else if (selectedPeriodOption.equals("f"))	{
131
			now.add(Calendar.WEEK_OF_MONTH, -2);
132
		}
133
		else if (selectedPeriodOption.equals("m"))	{
134
			now.add(Calendar.MONTH, -1);
135
		}
136
		else if (selectedPeriodOption.equals("3m"))	{
137
			now.add(Calendar.MONTH, -3);
138
		}
139
		else if (selectedPeriodOption.equals("6m"))	{
140
			now.add(Calendar.MONTH, -6);
141
		}
142
		else	{
143
			return new Date(0);
144
		}
145
		return now.getTime();
146
	}
147
 
148
	public List<ProductNotificationRequestCount> getNotificationRequestCounts()	{
149
		return notificationRequestCounts;
150
	}
151
 
152
	public String getSelectedPeriod()	{
153
		if (request.getParameter("sp") != null)	{
154
			return request.getParameter("sp");
155
		} else	{
156
			return "d";
157
		}
158
	}
159
 
160
	public String getProductNameFromItem(Item item)	{
161
		return ModelUtils.extractProductNameFromItem(item);
162
	}
163
}