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.web.viewfactory.impl.user;
6   
7   import java.util.List;
8   
9   import thinwire.ui.Component;
10  import thinwire.ui.Menu;
11  
12  import com.hack23.cia.model.application.dto.common.UserSessionDTO;
13  import com.hack23.cia.model.application.impl.admin.MonitorActionEvent;
14  import com.hack23.cia.model.application.impl.common.Agency;
15  import com.hack23.cia.model.application.impl.common.User;
16  import com.hack23.cia.model.application.impl.common.UserSession;
17  import com.hack23.cia.model.application.impl.user.AbstractTopListActionEvent;
18  import com.hack23.cia.model.application.impl.user.UserAccountActionEvent;
19  import com.hack23.cia.model.application.impl.user.UserActionEvent;
20  import com.hack23.cia.model.sweden.impl.PoliticalParty;
21  import com.hack23.cia.web.action.admin.ConfigureAgencyAction;
22  import com.hack23.cia.web.action.admin.MonitorAdminAction;
23  import com.hack23.cia.web.action.admin.TaskAction;
24  import com.hack23.cia.web.action.user.CommitteeReportsAction;
25  import com.hack23.cia.web.action.user.PartyAction;
26  import com.hack23.cia.web.action.user.TopListAction;
27  import com.hack23.cia.web.action.user.UserAccountAction;
28  import com.hack23.cia.web.action.user.UserAction;
29  import com.hack23.cia.web.common.BeanLocator;
30  
31  /***
32   * The Class MenuFactoryImpl.
33   */
34  public class MenuFactoryImpl implements MenuFactory {
35  
36  	/*
37  	 * (non-Javadoc)
38  	 * 
39  	 * @see
40  	 * com.hack23.cia.web.controller.viewFactory.MenuFactory#createApplicationMenu
41  	 * (com.hack23.cia.model.application.User, int)
42  	 */
43  	@Override
44  	public final Menu createApplicationMenu(
45  			final UserSessionDTO userSessionDTO,
46  			final List<PoliticalParty> politicalParties, final int topNumber) {
47  		final UserSession userSession = userSessionDTO.getUserSession();
48  		final User user = userSession.getUser();
49  		final String portalName = userSession.getPortal().getName();
50  		final Menu menu = new Menu();
51  
52  		final Menu.Item appItem = new Menu.Item(portalName);
53  		menu.getRootItem().getChildren().add(appItem);
54  
55  		if (user.getUserRole().equals(User.UserRole.ANYNOMOUS)) {
56  			final Menu.Item loginItem = new Menu.Item(userSessionDTO
57  					.getLanguageResource(Agency.LanguageContentKey.LOGIN));
58  			loginItem.setUserObject(new UserAccountAction(
59  					UserAccountActionEvent.Operation.Login));
60  			appItem.getChildren().add(loginItem);
61  		} else if (user.getUserRole().equals(User.UserRole.USER)
62  				|| user.getUserRole().equals(User.UserRole.ADMIN)
63  				|| user.getUserRole().equals(User.UserRole.VIP)) {
64  			final Menu.Item logoutItem = new Menu.Item(userSessionDTO
65  					.getLanguageResource(Agency.LanguageContentKey.LOGOUT));
66  			logoutItem.setUserObject(new UserAccountAction(
67  					UserAccountActionEvent.Operation.Logout));
68  			appItem.getChildren().add(logoutItem);
69  		}
70  
71  		if (user.getUserRole().equals(User.UserRole.ADMIN)) {
72  			final Menu.Item adminMenuItem = new Menu.Item(userSessionDTO
73  					.getLanguageResource(Agency.LanguageContentKey.ADMIN_MENU));
74  			menu.getRootItem().getChildren().add(adminMenuItem);
75  
76  			final Menu.Item startUpdateJobItem = new Menu.Item(
77  					userSessionDTO
78  							.getLanguageResource(Agency.LanguageContentKey.START_UPDATE_JOB));
79  			startUpdateJobItem.setUserObject(new TaskAction());
80  			adminMenuItem.getChildren().add(startUpdateJobItem);
81  
82  			final Menu.Item showResponseTimeItem = new Menu.Item(
83  					userSessionDTO
84  							.getLanguageResource(Agency.LanguageContentKey.SHOW_RESPONSE_TIME));
85  			showResponseTimeItem.setUserObject(new MonitorAdminAction(
86  					MonitorActionEvent.Operation.ResponseTime));
87  			adminMenuItem.getChildren().add(showResponseTimeItem);
88  
89  			final Menu.Item showRecentActionsItem = new Menu.Item(
90  					userSessionDTO
91  							.getLanguageResource(Agency.LanguageContentKey.SHOW_RECENT_ACTIONS));
92  			showRecentActionsItem.setUserObject(new MonitorAdminAction(
93  					MonitorActionEvent.Operation.RecentActions));
94  			adminMenuItem.getChildren().add(showRecentActionsItem);
95  
96  			final Menu.Item showTreeViewItem = new Menu.Item(
97  					userSessionDTO
98  							.getLanguageResource(Agency.LanguageContentKey.COMMITEE_REPORT));
99  			showTreeViewItem.setUserObject(new CommitteeReportsAction());
100 			adminMenuItem.getChildren().add(showTreeViewItem);
101 
102 			final Menu.Item configureAgencyViewItem = new Menu.Item(
103 					userSessionDTO
104 							.getLanguageResource(Agency.LanguageContentKey.CONFIGURE_AGENCY));
105 			configureAgencyViewItem.setUserObject(new ConfigureAgencyAction());
106 			adminMenuItem.getChildren().add(configureAgencyViewItem);
107 		}
108 
109 		// Common
110 		final Menu.Item parliamentMenuItem = new Menu.Item(
111 				userSessionDTO
112 						.getLanguageResource(Agency.LanguageContentKey.SWEDISH_PARLIAMENT_MENU));
113 		menu.getRootItem().getChildren().add(parliamentMenuItem);
114 
115 		if (politicalParties != null) {
116 			createTopListMenuItem(
117 					userSessionDTO,
118 					parliamentMenuItem,
119 					politicalParties,
120 					topNumber,
121 					AbstractTopListActionEvent.Operation.TopRebels,
122 					userSessionDTO
123 					.getLanguageResource(Agency.LanguageContentKey.PARLIAMENT_MEMBERS_REBELS));
124 			createTopListMenuItem(
125 					userSessionDTO,
126 					parliamentMenuItem,
127 					politicalParties,
128 					topNumber,
129 					AbstractTopListActionEvent.Operation.TopLoyals,
130 					userSessionDTO
131 					.getLanguageResource(Agency.LanguageContentKey.PARLIAMENT_MEMBERS_LOYAL));
132 
133 			createTopListMenuItem(
134 					userSessionDTO,
135 					parliamentMenuItem,
136 					politicalParties,
137 					topNumber,
138 					AbstractTopListActionEvent.Operation.TopWinners,
139 					userSessionDTO
140 							.getLanguageResource(Agency.LanguageContentKey.PARLIAMENT_MEMBERS_WINNERS));
141 			createTopListMenuItem(
142 					userSessionDTO,
143 					parliamentMenuItem,
144 					politicalParties,
145 					topNumber,
146 					AbstractTopListActionEvent.Operation.TopLosers,
147 					userSessionDTO
148 							.getLanguageResource(Agency.LanguageContentKey.PARLIAMENT_MEMBERS_LOSERS));
149 
150 			createTopListMenuItem(
151 					userSessionDTO,
152 					parliamentMenuItem,
153 					politicalParties,
154 					topNumber,
155 					AbstractTopListActionEvent.Operation.TopAbsent,
156 					userSessionDTO
157 					.getLanguageResource(Agency.LanguageContentKey.PARLIAMENT_MEMBERS_ABSENCE));
158 			createTopListMenuItem(
159 					userSessionDTO,
160 					parliamentMenuItem,
161 					politicalParties,
162 					topNumber,
163 					AbstractTopListActionEvent.Operation.TopPresent,
164 					userSessionDTO
165 					.getLanguageResource(Agency.LanguageContentKey.PARLIAMENT_MEMBERS_PRESENCE));			
166 		}
167 
168 		final Menu.Item historyMenuItem = new Menu.Item(userSessionDTO
169 				.getLanguageResource(Agency.LanguageContentKey.USER_HISTORY));
170 		menu.getRootItem().getChildren().add(historyMenuItem);
171 
172 		final Menu.Item showUserHistoryItem = new Menu.Item(
173 				userSessionDTO
174 						.getLanguageResource(Agency.LanguageContentKey.SHOW_USER_HISTORY));
175 		showUserHistoryItem.setUserObject(new UserAction(
176 				UserActionEvent.Operation.UserHistory));
177 		historyMenuItem.getChildren().add(showUserHistoryItem);
178 
179 		menu.addActionListener(Component.ACTION_CLICK, BeanLocator
180 				.getApplicationActionListener());
181 		return menu;
182 	}
183 
184 	/***
185 	 * Creates the top list menu item.
186 	 *
187 	 * @param userSessionDTO the user session dto
188 	 * @param parliamentMenuItem the parliament menu item
189 	 * @param politicalParties the political parties
190 	 * @param topNumber the top number
191 	 * @param operation the operation
192 	 * @param menuTitle the menu title
193 	 */
194 	private void createTopListMenuItem(final UserSessionDTO userSessionDTO,
195 			final Menu.Item parliamentMenuItem,
196 			final List<PoliticalParty> politicalParties, final int topNumber,
197 			final AbstractTopListActionEvent.Operation operation,
198 			final String menuTitle) {
199 		final Menu.Item absenceItem = new Menu.Item(menuTitle);
200 		parliamentMenuItem.getChildren().add(absenceItem);
201 
202 		final Menu.Item showTopSlackerItem = new Menu.Item(userSessionDTO
203 				.getLanguageResource(Agency.LanguageContentKey.SHOW_TOP)
204 				+ " " + topNumber); //$NON-NLS-1$
205 		showTopSlackerItem.setUserObject(new TopListAction(operation));
206 		absenceItem.getChildren().add(showTopSlackerItem);
207 
208 		final Menu.Item partyItem = new Menu.Item(
209 				userSessionDTO
210 						.getLanguageResource(Agency.LanguageContentKey.SHOW_TOP)
211 						+ " " //$NON-NLS-1$
212 						+ topNumber
213 						+ " " //$NON-NLS-1$
214 						+ userSessionDTO
215 								.getLanguageResource(Agency.LanguageContentKey.PER_PARTY));
216 		absenceItem.getChildren().add(partyItem);
217 
218 		for (final PoliticalParty politicalParty : politicalParties) {
219 			final Menu.Item partyMenuItem = new Menu.Item(politicalParty.getName());
220 			partyMenuItem.setUserObject(new PartyAction(operation,
221 					politicalParty.getShortCode()));
222 			partyItem.getChildren().add(partyMenuItem);
223 		}
224 	}
225 }