Subversion Repositories SmartDukaan

Rev

Rev 11808 | 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{
11808 amit.gupta 79
		if(userinfo.isPrivateDealUser()){
11682 amit.gupta 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 {
11808 amit.gupta 91
			if(userinfo.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();
11690 amit.gupta 112
					log.info("Count: " + count);
11682 amit.gupta 113
					this.setTotalItems(count);
114
					if(getCurrentPage() > getTotalPages()){
115
						log.info("Redirecting.");
116
						redirectUrl = "/private-deals/1";
117
						return new DefaultHttpHeaders("redirect");
118
					}
11680 vikram.rag 119
					if(sourceId == -1){
120
						showcasePageSnippetsCache.put(SHOWCASE_PRIVATE_DEALS_COUNT_CACHE_KEY, this.totalItems);
121
					}
122
					this.items = client.getPrivateDealsCatalogIds(beginIndex, windowSize);
123
					setSnippets();
124
					if(sourceId == -1){
125
						showcasePageSnippetsCache.put(SHOWCASE_PRIVATE_DEALS_CACHE_KEY + beginIndex, this.snippets);
126
					}
127
				} catch (CatalogServiceException e) {
128
					log.error("Unable to get private deals from inventory service.", e);
129
				} catch (TException e) {
130
					log.error("Unable to get private deals from inventory service.", e);
131
				}
132
				return new DefaultHttpHeaders("show");
11636 vikram.rag 133
			}
11680 vikram.rag 134
			else{
135
				redirectUrl = "/";
136
				return new DefaultHttpHeaders("redirect");
137
			}
138
		} catch (CacheException e) {
139
			log.error("Cache Exception .", e);
140
			redirectUrl = "/";
141
			return new DefaultHttpHeaders("redirect");
11636 vikram.rag 142
		}
11680 vikram.rag 143
	}
144
 
145
	private void setSnippets(){
146
		this.snippets = new ArrayList<String>();
147
		if(items != null){
148
			for(long item: items){
149
				snippets.add(ContentServingService.getSnippet(SnippetType.PRIVATE_DEAL_SNIPPET, item+"", sourceId));
11636 vikram.rag 150
			}
11680 vikram.rag 151
		}
152
	}
153
 
154
	public List<String> getSnippets() {
155
		return snippets;
156
	}
157
 
11636 vikram.rag 158
	public void setId(String id) {
159
		this.id = id;
160
		this.beginIndex = windowSize * (Long.parseLong(id)-1);
161
	}
162
 
163
	public String getId() {
164
		return id;
165
	}
166
 
167
	public long getBeginIndex(){
168
		if(totalItems>0)
169
			return beginIndex+1;
170
		return beginIndex;
171
	}
11680 vikram.rag 172
 
11636 vikram.rag 173
	public void setTotalItems(long totalItems) {
174
		this.totalItems = totalItems;
175
	}
176
 
177
	public long getTotalItems() {
178
		return totalItems;
179
	}
180
 
181
	public long getTotalPages() {
11680 vikram.rag 182
		return 1 + (totalItems-1)/windowSize;
11636 vikram.rag 183
	}
184
 
185
	public long getCurrentPage() {
186
		return Long.parseLong(getId());
187
	}
11680 vikram.rag 188
 
11636 vikram.rag 189
	public String getRedirectUrl(){
190
		return redirectUrl;
11680 vikram.rag 191
	}
192
	public boolean isUserLoggedIn()	{
193
		return userinfo.isLoggedIn();
194
	}
11810 amit.gupta 195
 
196
	public String getUserEmail(){
197
		return userinfo.getEmail().split("@")[0];
198
	}
11636 vikram.rag 199
}