View Javadoc

1   /*
2   Copyright 2010 James Pether Sörling Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. 
3   	$Id
4   */
5   package com.hack23.cia.service.impl.user;
6   
7   import java.util.ArrayList;
8   import java.util.Date;
9   import java.util.List;
10  
11  import net.sf.ehcache.Cache;
12  import net.sf.ehcache.CacheManager;
13  import net.sf.ehcache.Element;
14  
15  import com.hack23.cia.model.application.dto.common.UserSessionDTO;
16  import com.hack23.cia.model.application.impl.common.ActionEvent;
17  import com.hack23.cia.model.application.impl.common.UserSession;
18  import com.hack23.cia.model.application.impl.user.ParliamentMemberActionEvent;
19  import com.hack23.cia.model.sweden.impl.ParliamentMember;
20  import com.hack23.cia.model.sweden.impl.ParliamentMemberVoteCompareResult;
21  import com.hack23.cia.model.sweden.impl.RegisterInformation;
22  import com.hack23.cia.model.sweden.impl.Vote;
23  import com.hack23.cia.service.api.common.ServiceResponse;
24  import com.hack23.cia.service.api.user.ParliamentMemberRequest;
25  import com.hack23.cia.service.api.user.ParliamentMemberResponse;
26  import com.hack23.cia.service.impl.common.ParliamentService;
27  import com.hack23.cia.service.impl.common.UserSessionService;
28  
29  /***
30   * The Class ParliamentMemberRequestService.
31   */
32  public class ParliamentMemberRequestService extends
33          AbstractParliamentRequestService<ParliamentMemberRequest> {
34  
35      /*** The cache manager. */
36      private final CacheManager cacheManager;
37  	
38  	/*** The cache. */
39  	private Cache cache;
40  
41  	/***
42  	 * Instantiates a new parliament member request service.
43  	 *
44  	 * @param userSessionService the user session service
45  	 * @param parliamentService the parliament service
46  	 * @param cacheManager the cache manager
47  	 */
48      public ParliamentMemberRequestService(
49              final UserSessionService userSessionService,
50              final ParliamentService parliamentService,final CacheManager cacheManager) {
51          super(userSessionService, parliamentService);
52  		this.cacheManager = cacheManager;
53      }
54  
55      /*
56       * (non-Javadoc)
57       * 
58       * @see
59       * com.hack23.cia.service.impl.common.AbstractGenericService#createActionEvent
60       * (com.hack23.cia.service.api.common.AbstractServiceRequest,
61       * com.hack23.cia.model.application.UserSession)
62       */
63      @Override
64      public final ActionEvent createActionEvent(
65              final ParliamentMemberRequest request, final UserSession userSession) {
66          return new ParliamentMemberActionEvent(new Date(), userSession, request
67                  .getParliamentMemberId());
68      }
69  
70      /*
71       * (non-Javadoc)
72       * 
73       * @see com.hack23.cia.service.common.ServiceHandler#getSupportedService()
74       */
75      @SuppressWarnings("unchecked")
76      @Override
77      public final Class getSupportedService() {
78          return ParliamentMemberRequest.class;
79      }
80  
81      /*
82       * (non-Javadoc)
83       * 
84       * @seecom.hack23.cia.service.common.AbstractGenericServiceHandler#
85       * handleServiceRequest(com.hack23.cia.service.api.AbstractServiceRequest)
86       */
87      @Override
88      public final ServiceResponse handleServiceRequest(
89              final ParliamentMemberRequest request, final UserSessionDTO userSession) {
90      	
91      	if (cache == null) {    		
92      		cache = this.cacheManager.getCache("parliamentMemberRequestCache");
93      	}
94      	final Element element = cache.get(request.getParliamentMemberId());
95      	
96      	if (element == null) {
97  	        final ParliamentMember parliamentMember = getParliamentService()
98  	                .getParliamentMember(request.getParliamentMemberId());
99  	        final List<ParliamentMemberVoteCompareResult> friendList = getParliamentService()
100 	                .getParliamentMemberFriends(parliamentMember);
101 	        final List<ParliamentMemberVoteCompareResult> enemyList = getParliamentService()
102 	                .getParliamentMemberEnemies(parliamentMember);
103 	        final List<ParliamentMemberVoteCompareResult> friendPartyList = getParliamentService()
104 	                .getParliamentMemberPartyFriends(parliamentMember);
105 	        final List<ParliamentMemberVoteCompareResult> enemyPartyList = getParliamentService()
106 	                .getParliamentMemberPartyEnemies(parliamentMember);
107 	
108 	        final List<Vote> votes = getParliamentService().findLastVotes(
109 	                parliamentMember.getId());
110 	
111 	        final RegisterInformation registerInformation = getParliamentService()
112 	                .lookupRegisterInformation(parliamentMember);
113         
114 	        final List<Object> cacheObjects = new ArrayList<Object>();    		
115 	        cacheObjects.add(parliamentMember);	        
116 	        cacheObjects.add(friendList);
117 	        cacheObjects.add(enemyList);	        
118     		cacheObjects.add(friendPartyList);
119     		cacheObjects.add(enemyPartyList);
120     		cacheObjects.add(votes);
121     		cacheObjects.add(registerInformation);	        
122 	        
123     		final Element cacheElement = new Element(request.getParliamentMemberId(), cacheObjects);
124     		cache.put(cacheElement);
125     		
126 	        final ParliamentMemberResponse parliamentMemberResponse = new ParliamentMemberResponse(
127 	        		userSession, parliamentMember, friendList, enemyList,
128 	        		friendPartyList, enemyPartyList, votes, registerInformation);
129 	        	        
130 	        return parliamentMemberResponse;
131     	} else {
132     		final List<Object> cacheObjects = (List<Object>) element.getValue();
133     		
134     		final ParliamentMemberResponse parliamentMemberResponse = new ParliamentMemberResponse(
135 	        		userSession,(ParliamentMember) cacheObjects.get(0),(List<ParliamentMemberVoteCompareResult> ) cacheObjects.get(1),(List<ParliamentMemberVoteCompareResult> ) cacheObjects.get(2),
136 	        		(List<ParliamentMemberVoteCompareResult>) cacheObjects.get(3),(List<ParliamentMemberVoteCompareResult> ) cacheObjects.get(4),(List<Vote>) cacheObjects.get(5), (RegisterInformation)cacheObjects.get(6));
137 	        	        
138 	        return parliamentMemberResponse;
139     	}
140     }
141 }