Subversion Repositories SmartDukaan

Rev

Rev 11686 | Rev 11690 | 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({
11686 amit.gupta 36
	    @InterceptorRef("myDefault"),
37
	    @InterceptorRef("login")
11680 vikram.rag 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
		}
75
	}
76
 
11680 vikram.rag 77
	// GET /index
11682 amit.gupta 78
	public HttpHeaders index() throws Exception{
79
		if(isPrivatedealUser()){
80
			redirectUrl = "/private-deals/1";
81
		} else {
11680 vikram.rag 82
			redirectUrl = "/";
83
		}
11682 amit.gupta 84
		return new DefaultHttpHeaders("redirect");
11680 vikram.rag 85
	}
86
 
87
	// GET /show
88
	@SuppressWarnings("unchecked")
89
	public HttpHeaders show() {
90
		try {
11682 amit.gupta 91
			if(isPrivatedealUser()){
11680 vikram.rag 92
 
93
				EhcacheWrapper<String, Object> showcasePageSnippetsCache = new EhcacheWrapper<String, Object>(
94
						EhcacheWrapper.SHOWCASE_PAGE_SNIPPET_CACHE_NAME, CacheManager.create());
95
				if(sourceId == -1){
96
					this.snippets = (List<String>)showcasePageSnippetsCache.get(SHOWCASE_PRIVATE_DEALS_CACHE_KEY + beginIndex);
97
					this.totalItems = (Long)showcasePageSnippetsCache.get(SHOWCASE_PRIVATE_DEALS_COUNT_CACHE_KEY);
98
					if(this.snippets != null && !this.snippets.isEmpty() && this.totalItems > 0) {
11687 amit.gupta 99
						if(getCurrentPage() > getTotalPages()){
100
							log.info("Redirecting.");
101
							redirectUrl = "/private-deals/1";
102
							return new DefaultHttpHeaders("redirect");
103
						}
11680 vikram.rag 104
						log.info("Using Cache.");
105
						return new DefaultHttpHeaders("show");
106
					}
107
				}
108
				log.info("Getting private deals from snippets.");
109
				in.shop2020.model.v1.catalog.CatalogService.Client client = catalogClientService.getClient();
110
				try {
111
					int count = client.getPrivateDealsCount();
11682 amit.gupta 112
					this.setTotalItems(count);
113
					if(getCurrentPage() > getTotalPages()){
114
						log.info("Redirecting.");
115
						redirectUrl = "/private-deals/1";
116
						return new DefaultHttpHeaders("redirect");
117
					}
11680 vikram.rag 118
					if(sourceId == -1){
119
						showcasePageSnippetsCache.put(SHOWCASE_PRIVATE_DEALS_COUNT_CACHE_KEY, this.totalItems);
120
					}
121
					this.items = client.getPrivateDealsCatalogIds(beginIndex, windowSize);
122
					setSnippets();
123
					if(sourceId == -1){
124
						showcasePageSnippetsCache.put(SHOWCASE_PRIVATE_DEALS_CACHE_KEY + beginIndex, this.snippets);
125
					}
126
				} catch (CatalogServiceException e) {
127
					log.error("Unable to get private deals from inventory service.", e);
128
				} catch (TException e) {
129
					log.error("Unable to get private deals from inventory service.", e);
130
				}
131
				return new DefaultHttpHeaders("show");
11636 vikram.rag 132
			}
11680 vikram.rag 133
			else{
134
				redirectUrl = "/";
135
				return new DefaultHttpHeaders("redirect");
136
			}
137
		} catch (TTransportException e) {
138
			log.error("Exception in User Service .", e);
139
			redirectUrl = "/";
140
			return new DefaultHttpHeaders("redirect");
141
		} catch (CacheException e) {
142
			log.error("Cache Exception .", e);
143
			redirectUrl = "/";
144
			return new DefaultHttpHeaders("redirect");
11636 vikram.rag 145
		} catch (TException e) {
11680 vikram.rag 146
			log.error("Transport Exception in User Service .", e);
147
			redirectUrl = "/";
148
			return new DefaultHttpHeaders("redirect");
11636 vikram.rag 149
		}
11680 vikram.rag 150
	}
151
 
152
	private void setSnippets(){
153
		this.snippets = new ArrayList<String>();
154
		if(items != null){
155
			for(long item: items){
156
				snippets.add(ContentServingService.getSnippet(SnippetType.PRIVATE_DEAL_SNIPPET, item+"", sourceId));
11636 vikram.rag 157
			}
11680 vikram.rag 158
		}
159
	}
160
 
161
	public List<String> getSnippets() {
162
		return snippets;
163
	}
164
 
11636 vikram.rag 165
	public void setId(String id) {
166
		this.id = id;
167
		this.beginIndex = windowSize * (Long.parseLong(id)-1);
168
	}
169
 
170
	public String getId() {
171
		return id;
172
	}
173
 
174
	public long getBeginIndex(){
175
		if(totalItems>0)
176
			return beginIndex+1;
177
		return beginIndex;
178
	}
11680 vikram.rag 179
 
11636 vikram.rag 180
	public void setTotalItems(long totalItems) {
181
		this.totalItems = totalItems;
182
	}
183
 
184
	public long getTotalItems() {
185
		return totalItems;
186
	}
187
 
188
	public long getTotalPages() {
11680 vikram.rag 189
		return 1 + (totalItems-1)/windowSize;
11636 vikram.rag 190
	}
191
 
192
	public long getCurrentPage() {
193
		return Long.parseLong(getId());
194
	}
11680 vikram.rag 195
 
11636 vikram.rag 196
	public String getRedirectUrl(){
197
		return redirectUrl;
11680 vikram.rag 198
	}
199
	public boolean isUserLoggedIn()	{
200
		return userinfo.isLoggedIn();
201
	}
202
	public boolean isPrivatedealUser() throws TTransportException, TException{
11682 amit.gupta 203
		try {
11680 vikram.rag 204
			uc = new UserClient().getClient();
11686 amit.gupta 205
			return uc.isPrivateDealUser(userinfo.getUserId());
11682 amit.gupta 206
		} catch (TTransportException e) {
207
			log.error("Unable to get user service client.", e);	
208
		}
209
		return false;
11680 vikram.rag 210
	}
11636 vikram.rag 211
}