Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
11636 vikram.rag 1
/**
2
 * 
3
 */
4
package in.shop2020.serving.controllers;
5
 
6
import in.shop2020.model.v1.catalog.CatalogServiceException;
11680 vikram.rag 7
import in.shop2020.model.v1.user.UserContextService.Client;
11636 vikram.rag 8
import in.shop2020.serving.cache.EhcacheWrapper;
9
import in.shop2020.serving.services.ContentServingService;
10
import in.shop2020.serving.utils.SnippetType;
11
import in.shop2020.thrift.clients.CatalogClient;
11680 vikram.rag 12
import in.shop2020.thrift.clients.UserClient;
11636 vikram.rag 13
 
14
import java.util.ArrayList;
15
import java.util.List;
16
 
11680 vikram.rag 17
import net.sf.ehcache.CacheException;
11636 vikram.rag 18
import net.sf.ehcache.CacheManager;
19
 
20
import org.apache.log4j.Logger;
11680 vikram.rag 21
import org.apache.struts2.convention.annotation.InterceptorRef;
22
import org.apache.struts2.convention.annotation.InterceptorRefs;
11636 vikram.rag 23
import org.apache.struts2.convention.annotation.Result;
24
import org.apache.struts2.convention.annotation.Results;
25
import org.apache.struts2.rest.DefaultHttpHeaders;
26
import org.apache.struts2.rest.HttpHeaders;
27
import org.apache.thrift.TException;
11680 vikram.rag 28
import org.apache.thrift.transport.TTransportException;
11636 vikram.rag 29
 
30
/**
31
 * get private deals items from the catalog service
32
 * @author rajveer
33
 *	
34
 */
11680 vikram.rag 35
@InterceptorRefs({
36
	@InterceptorRef("defaultStack"),
37
	@InterceptorRef("login")
38
})
11636 vikram.rag 39
@Results({
11680 vikram.rag 40
	@Result(name = "redirect", location = "${redirectUrl}", type = "redirect", params={"statusCode", "301"})
11636 vikram.rag 41
})
42
 
43
public class PrivateDealsController extends BaseController {
11680 vikram.rag 44
 
11636 vikram.rag 45
	private static final long serialVersionUID = -6862524269260661024L;
11680 vikram.rag 46
 
11636 vikram.rag 47
	private static Logger log = Logger.getLogger(Class.class);
48
	private static final int windowSize = 20;
49
 
11680 vikram.rag 50
	private static final String SHOWCASE_PRIVATE_DEALS_CACHE_KEY = "SHOWCASE_PRIVATE_DEALS";
51
	private static final String SHOWCASE_PRIVATE_DEALS_COUNT_CACHE_KEY = "SHOWCASE_PRIVATE_DEALS_COUNT";
52
 
11636 vikram.rag 53
	private long beginIndex = 0;
11680 vikram.rag 54
 
11636 vikram.rag 55
	private Long totalItems = 0l;
11680 vikram.rag 56
 
11636 vikram.rag 57
	private String id;
58
 
59
	private String redirectUrl;
11680 vikram.rag 60
 
11636 vikram.rag 61
	List<Long> items = null;
11680 vikram.rag 62
 
11636 vikram.rag 63
	private List<String> snippets = null;
11680 vikram.rag 64
 
11636 vikram.rag 65
	CatalogClient catalogClientService = null;
11680 vikram.rag 66
	Client uc = null;
67
 
11636 vikram.rag 68
	public PrivateDealsController() {
69
		super();
70
		try {
71
			catalogClientService = new CatalogClient();
72
		} catch (Exception e) {
73
			log.error("Unable to get catalog service client.", e);
74
		}
11680 vikram.rag 75
		try {
76
			uc = new UserClient().getClient();
77
		} catch (TTransportException e) {
78
			log.error("Unable to get user service client.", e);	
79
		}
11636 vikram.rag 80
	}
81
 
11680 vikram.rag 82
	// GET /index
83
	public HttpHeaders index() throws Exception {
84
		if(isUserLoggedIn() && isPrivatedealUser()){
85
			in.shop2020.model.v1.catalog.CatalogService.Client client = catalogClientService.getClient();
11636 vikram.rag 86
			this.items = client.getPrivateDealsCatalogIds(beginIndex, windowSize);
87
			setSnippets();
11680 vikram.rag 88
			return new DefaultHttpHeaders("index");
89
		}
90
		else{
91
			redirectUrl = "/";
92
			return new DefaultHttpHeaders("redirect");
93
		}
94
	}
95
 
96
	// GET /show
97
	@SuppressWarnings("unchecked")
98
	public HttpHeaders show() {
99
		try {
100
			if(isUserLoggedIn() && isPrivatedealUser()){
101
 
102
				if(getCurrentPage() > 1){
103
					log.info("Redirecting.");
104
					redirectUrl = "/private-deals/1";
105
					return new DefaultHttpHeaders("redirect");
106
				}
107
				EhcacheWrapper<String, Object> showcasePageSnippetsCache = new EhcacheWrapper<String, Object>(
108
						EhcacheWrapper.SHOWCASE_PAGE_SNIPPET_CACHE_NAME, CacheManager.create());
109
				if(sourceId == -1){
110
					this.snippets = (List<String>)showcasePageSnippetsCache.get(SHOWCASE_PRIVATE_DEALS_CACHE_KEY + beginIndex);
111
					this.totalItems = (Long)showcasePageSnippetsCache.get(SHOWCASE_PRIVATE_DEALS_COUNT_CACHE_KEY);
112
					if(this.snippets != null && !this.snippets.isEmpty() && this.totalItems > 0) {
113
						log.info("Using Cache.");
114
						return new DefaultHttpHeaders("show");
115
					}
116
				}
117
				log.info("Getting private deals from snippets.");
118
				in.shop2020.model.v1.catalog.CatalogService.Client client = catalogClientService.getClient();
119
				try {
120
					int count = client.getPrivateDealsCount();
121
					this.setTotalItems(count > 20 ? 20 : count);
122
					if(sourceId == -1){
123
						showcasePageSnippetsCache.put(SHOWCASE_PRIVATE_DEALS_COUNT_CACHE_KEY, this.totalItems);
124
					}
125
					this.items = client.getPrivateDealsCatalogIds(beginIndex, windowSize);
126
					setSnippets();
127
					if(sourceId == -1){
128
						showcasePageSnippetsCache.put(SHOWCASE_PRIVATE_DEALS_CACHE_KEY + beginIndex, this.snippets);
129
					}
130
				} catch (CatalogServiceException e) {
131
					log.error("Unable to get private deals from inventory service.", e);
132
				} catch (TException e) {
133
					log.error("Unable to get private deals from inventory service.", e);
134
				}
135
				return new DefaultHttpHeaders("show");
11636 vikram.rag 136
			}
11680 vikram.rag 137
			else{
138
				redirectUrl = "/";
139
				return new DefaultHttpHeaders("redirect");
140
			}
141
		} catch (TTransportException e) {
142
			log.error("Exception in User Service .", e);
143
			redirectUrl = "/";
144
			return new DefaultHttpHeaders("redirect");
145
		} catch (CacheException e) {
146
			log.error("Cache Exception .", e);
147
			redirectUrl = "/";
148
			return new DefaultHttpHeaders("redirect");
11636 vikram.rag 149
		} catch (TException e) {
11680 vikram.rag 150
			log.error("Transport Exception in User Service .", e);
151
			redirectUrl = "/";
152
			return new DefaultHttpHeaders("redirect");
11636 vikram.rag 153
		}
11680 vikram.rag 154
	}
155
 
156
	private void setSnippets(){
157
		this.snippets = new ArrayList<String>();
158
		if(items != null){
159
			for(long item: items){
160
				snippets.add(ContentServingService.getSnippet(SnippetType.PRIVATE_DEAL_SNIPPET, item+"", sourceId));
11636 vikram.rag 161
			}
11680 vikram.rag 162
		}
163
	}
164
 
165
	public List<String> getSnippets() {
166
		return snippets;
167
	}
168
 
11636 vikram.rag 169
	public void setId(String id) {
170
		this.id = id;
171
		this.beginIndex = windowSize * (Long.parseLong(id)-1);
172
	}
173
 
174
	public String getId() {
175
		return id;
176
	}
177
 
178
	public long getBeginIndex(){
179
		if(totalItems>0)
180
			return beginIndex+1;
181
		return beginIndex;
182
	}
11680 vikram.rag 183
 
11636 vikram.rag 184
	public void setTotalItems(long totalItems) {
185
		this.totalItems = totalItems;
186
	}
187
 
188
	public long getTotalItems() {
189
		return totalItems;
190
	}
191
 
192
	public long getTotalPages() {
11680 vikram.rag 193
		return 1 + (totalItems-1)/windowSize;
11636 vikram.rag 194
	}
195
 
196
	public long getCurrentPage() {
197
		return Long.parseLong(getId());
198
	}
11680 vikram.rag 199
 
11636 vikram.rag 200
	public String getRedirectUrl(){
201
		return redirectUrl;
11680 vikram.rag 202
	}
203
	public boolean isUserLoggedIn()	{
204
		return userinfo.isLoggedIn();
205
	}
206
	public boolean isPrivatedealUser() throws TTransportException, TException{
207
		if(!uc.isAlive())
208
			uc = new UserClient().getClient();
209
		return uc.isPrivateDealUser(super.getUserInfo().getUserId());
210
	}
11636 vikram.rag 211
}