View Javadoc
1   /*
2    * Copyright 2014 James Pether Sörling
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *   http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   *
16   *	$Id$
17   *  $HeadURL$
18  */
19  package com.hack23.cia.web.impl.ui.application.views.common.menufactory.impl;
20  
21  import com.hack23.cia.web.impl.ui.application.util.UserContextUtil;
22  import com.hack23.cia.web.impl.ui.application.views.common.pagelinks.api.PageModeMenuCommand;
23  import com.hack23.cia.web.impl.ui.application.views.common.sizing.ContentRatio;
24  import com.hack23.cia.web.impl.ui.application.views.common.viewnames.AdminViews;
25  import com.hack23.cia.web.impl.ui.application.views.common.viewnames.ApplicationPageMode;
26  import com.hack23.cia.web.impl.ui.application.views.common.viewnames.CommonsViews;
27  import com.hack23.cia.web.impl.ui.application.views.common.viewnames.PageMode;
28  import com.hack23.cia.web.impl.ui.application.views.common.viewnames.UserViews;
29  import com.vaadin.server.FontAwesome;
30  import com.vaadin.server.Resource;
31  import com.vaadin.server.Sizeable.Unit;
32  import com.vaadin.ui.Alignment;
33  import com.vaadin.ui.Button;
34  import com.vaadin.ui.Button.ClickListener;
35  import com.vaadin.ui.GridLayout;
36  import com.vaadin.ui.Label;
37  import com.vaadin.ui.MenuBar;
38  import com.vaadin.ui.MenuBar.MenuItem;
39  import com.vaadin.ui.VerticalLayout;
40  
41  /**
42   * The Class AbstractMenuItemFactoryImpl.
43   */
44  public abstract class AbstractMenuItemFactoryImpl {
45  
46  	/** The Constant COMMAND_APPLICATION_EVENTS_CHARTS. */
47  	private static final PageModeMenuCommand COMMAND_APPLICATION_EVENTS_CHARTS = new PageModeMenuCommand(AdminViews.ADMIN_APPLICATIONS_EVENTS_VIEW_NAME, PageMode.CHARTS);
48  
49  	/** The Constant COMMAND_EMAIL. */
50  	private static final PageModeMenuCommand COMMAND_EMAIL = new PageModeMenuCommand(AdminViews.ADMIN_EMAIL_VIEW_NAME,
51  			"");
52  
53  	/** The Constant COMMAND_MAINVIEW_PAGEVISITHISTORY. */
54  	private static final PageModeMenuCommand COMMAND_MAINVIEW_PAGEVISITHISTORY = new PageModeMenuCommand(CommonsViews.MAIN_VIEW_NAME,
55  			PageMode.PAGEVISITHISTORY);
56  
57  	/** The Constant COMMAND_USERACCOUNT. */
58  	private static final PageModeMenuCommand COMMAND_USERACCOUNT = new PageModeMenuCommand(AdminViews.ADMIN_USERACCOUNT_VIEW_NAME,
59  			"");
60  
61  	/** The Constant COMMAND_APPLICATION_EVENTS. */
62  	private static final PageModeMenuCommand COMMAND_APPLICATION_EVENTS = new PageModeMenuCommand(
63  			AdminViews.ADMIN_APPLICATIONS_EVENTS_VIEW_NAME, "");
64  
65  	/** The Constant COMMAND_APPLICATION_SESSION. */
66  	private static final PageModeMenuCommand COMMAND_APPLICATION_SESSION = new PageModeMenuCommand(
67  			AdminViews.ADMIN_APPLICATIONS_SESSION_VIEW_NAME, "");
68  
69  	/** The Constant COMMAND_MONITORING. */
70  	private static final PageModeMenuCommand COMMAND_MONITORING = new PageModeMenuCommand(AdminViews.ADMIN_MONITORING_VIEW_NAME,
71  			"");
72  
73  	/** The Constant COMMAND_DATASUMMARY. */
74  	private static final PageModeMenuCommand COMMAND_DATASUMMARY = new PageModeMenuCommand(
75  			AdminViews.ADMIN_DATA_SUMMARY_VIEW_NAME, "");
76  
77  	/** The Constant COMMAND_AGENT_OPERATION. */
78  	private static final PageModeMenuCommand COMMAND_AGENT_OPERATION = new PageModeMenuCommand(
79  			AdminViews.ADMIN_AGENT_OPERATIONVIEW_NAME, "");
80  
81  	/** The Constant COMMAND_LANGUAGE_CONTENT. */
82  	private static final PageModeMenuCommand COMMAND_LANGUAGE_CONTENT = new PageModeMenuCommand(
83  			AdminViews.ADMIN_LANGUAGE_CONTENT_VIEW_NAME, "");
84  
85  	/** The Constant COMMAND_LANGUAGE. */
86  	private static final PageModeMenuCommand COMMAND_LANGUAGE = new PageModeMenuCommand(AdminViews.ADMIN_LANGUAGE_VIEW_NAME,
87  			"");
88  
89  	/** The Constant COMMAND_COUNTRY. */
90  	private static final PageModeMenuCommand COMMAND_COUNTRY = new PageModeMenuCommand(AdminViews.ADMIN_COUNTRY_VIEW_NAME, "");
91  
92  	/** The Constant COMMAND_PORTAL. */
93  	private static final PageModeMenuCommand COMMAND_PORTAL = new PageModeMenuCommand(AdminViews.ADMIN_PORTAL_VIEW_NAME, "");
94  
95  	/** The Constant COMMAND_AGENCY. */
96  	private static final PageModeMenuCommand COMMAND_AGENCY = new PageModeMenuCommand(AdminViews.ADMIN_AGENCY_VIEW_NAME, "");
97  
98  	/** The Constant COMMAND_APPLICATION_CONFIGURATION. */
99  	private static final PageModeMenuCommand COMMAND_APPLICATION_CONFIGURATION = new PageModeMenuCommand(
100 			AdminViews.ADMIN_APPLICATIONS_CONFIGURATION_VIEW_NAME, "");
101 
102 	/** The Constant COMMAND_REGISTER. */
103 	private static final PageModeMenuCommand COMMAND_REGISTER = new PageModeMenuCommand(CommonsViews.MAIN_VIEW_NAME,
104 			ApplicationPageMode.REGISTER.toString());
105 
106 	/** The Constant COMMAND_LOGIN. */
107 	private static final PageModeMenuCommand COMMAND_LOGIN = new PageModeMenuCommand(CommonsViews.MAIN_VIEW_NAME,
108 			ApplicationPageMode.LOGIN.toString());
109 
110 	/** The Constant COMMAND_LOGOUT. */
111 	private static final PageModeMenuCommand COMMAND_LOGOUT = new PageModeMenuCommand(CommonsViews.MAIN_VIEW_NAME,
112 			ApplicationPageMode.LOGOUT.toString());
113 
114 	/** The Constant COMMAND_USERHOME. */
115 	private static final PageModeMenuCommand COMMAND_USERHOME = new PageModeMenuCommand(UserViews.USERHOME_VIEW_NAME, "");
116 
117 	/** The Constant COMMAND_MAINVIEW_OVERVIEW. */
118 	private static final PageModeMenuCommand COMMAND_MAINVIEW_OVERVIEW = new PageModeMenuCommand(CommonsViews.MAIN_VIEW_NAME,
119 			PageMode.OVERVIEW);
120 
121 	/** The Constant LINK_STYLE_NAME. */
122 	private static final String LINK_STYLE_NAME = "link";
123 
124 	/** The Constant HEADER_STYLE_NAME. */
125 	private static final String HEADER_STYLE_NAME = "Header";
126 
127 	/** The Constant MENU_BAR_WIDTH. */
128 	private static final String MENU_BAR_WIDTH = "80%";
129 
130 	/** The Constant MAIN. */
131 	private static final String MAIN = "Main";
132 
133 	/** The Constant REGISTER. */
134 	private static final String REGISTER = "Register";
135 
136 	/** The Constant LOGIN. */
137 	private static final String LOGIN = "Login";
138 
139 	/** The Constant LOGOUT. */
140 	private static final String LOGOUT = "Logout";
141 
142 	/** The Constant APPLICATION. */
143 	private static final String APPLICATION = "Application";
144 
145 	/** The Constant EMAIL. */
146 	private static final String EMAIL = "Email";
147 
148 	/** The Constant USER_ACTIVITY. */
149 	private static final String USER_ACTIVITY = "User Activity";
150 
151 	/** The Constant MANAGEMENT. */
152 	private static final String MANAGEMENT = "Management";
153 
154 	/** The Constant CONFIGURATION. */
155 	private static final String CONFIGURATION = "Configuration";
156 
157 	/** The Constant ROLE_USER. */
158 	private static final String ROLE_USER = "ROLE_USER";
159 
160 	/** The Constant ROLE_ADMIN. */
161 	private static final String ROLE_ADMIN = "ROLE_ADMIN";
162 
163 	/** The Constant START_TEXT. */
164 	private static final String START_TEXT = "Start";
165 
166 	/** The Constant USERHOME. */
167 	private static final String USERHOME = "Userhome";
168 
169 	/** The Constant LANGUAGE_CONTENT. */
170 	private static final String LANGUAGE_CONTENT = "Language Content";
171 
172 	/** The Constant LANGUAGE. */
173 	private static final String LANGUAGE = "Language";
174 
175 	/** The Constant COUNTRY. */
176 	private static final String COUNTRY = "Country";
177 
178 	/** The Constant USERACCOUNT. */
179 	private static final String USERACCOUNT = "Useraccount";
180 
181 	/** The Constant APPLICATION_EVENT. */
182 	private static final String APPLICATION_EVENT = "Application Event";
183 
184 	/** The Constant APPLICATION_SESSION. */
185 	private static final String APPLICATION_SESSION = "Application Session";
186 
187 	/** The Constant PORTAL. */
188 	private static final String PORTAL = "Portal";
189 
190 	/** The Constant AGENCY. */
191 	private static final String AGENCY = "Agency";
192 
193 	/** The Constant APPLICATION_CONFIGURATION. */
194 	private static final String APPLICATION_CONFIGURATION = "System settings";
195 
196 	/** The Constant SYSTEM_PERFORMANCE. */
197 	private static final String SYSTEM_PERFORMANCE = "System Performance";
198 
199 	/** The Constant DATA_SUMMARY_TEXT. */
200 	private static final String DATA_SUMMARY_TEXT = "Data Summary";
201 
202 	/** The Constant AGENT_OPERATIONS_TEXT. */
203 	private static final String AGENT_OPERATIONS_TEXT = "Agent operations";
204 
205 	/** The Constant ADMIN_TEXT. */
206 	private static final String ADMIN_TEXT = "Admin";
207 
208 	/** The Constant PAGE_VISIT_HISTORY_TEXT. */
209 	private static final String PAGE_VISIT_HISTORY_TEXT = "Page Visit History";
210 
211 	/** The Constant APPLICATION_EVENT_CHARTS. */
212 	private static final String APPLICATION_EVENT_CHARTS = "Application Event charts";
213 
214 
215 
216 
217 	/**
218 	 * Instantiates a new abstract menu item factory impl.
219 	 */
220 	public AbstractMenuItemFactoryImpl() {
221 		super();
222 	}
223 
224 	/**
225 	 * Inits the application menu bar.
226 	 *
227 	 * @param menuBar
228 	 *            the menu bar
229 	 */
230 	protected final void initApplicationMenuBar(final MenuBar menuBar) {
231 		menuBar.removeItems();
232 		menuBar.setWidth(MENU_BAR_WIDTH);
233 		menuBar.setStyleName(HEADER_STYLE_NAME);
234 		final MenuItem mainViewItem = menuBar.addItem(APPLICATION, FontAwesome.SERVER, null);
235 
236 		mainViewItem.addItem(START_TEXT, FontAwesome.STAR, COMMAND_MAINVIEW_OVERVIEW);
237 
238 		final MenuItem mainItem = mainViewItem.addItem(MAIN, FontAwesome.STAR, null);
239 
240 		mainItem.addItem(PAGE_VISIT_HISTORY_TEXT, FontAwesome.AREA_CHART, COMMAND_MAINVIEW_PAGEVISITHISTORY);
241 
242 
243 		if (UserContextUtil.allowRoleInSecurityContext(ROLE_ADMIN) || UserContextUtil.allowRoleInSecurityContext(ROLE_USER)) {
244 			mainViewItem.addItem(USERHOME, FontAwesome.USER,COMMAND_USERHOME);
245 			createAdminMenu(mainViewItem);
246 			mainViewItem.addItem(LOGOUT, FontAwesome.SIGN_OUT, COMMAND_LOGOUT);
247 		} else {
248 			mainViewItem.addItem(LOGIN, FontAwesome.SIGN_IN, COMMAND_LOGIN);
249 			mainViewItem.addItem(REGISTER, FontAwesome.USER_PLUS, COMMAND_REGISTER);
250 		}
251 
252 	}
253 
254 	/**
255 	 * Creates the admin menu.
256 	 *
257 	 * @param mainViewItem
258 	 *            the main view item
259 	 */
260 	private static void createAdminMenu(final MenuItem mainViewItem) {
261 		if (UserContextUtil.allowRoleInSecurityContext(ROLE_ADMIN)) {
262 			final MenuItem adminMenuItem = mainViewItem.addItem(ADMIN_TEXT, FontAwesome.SERVER, null);
263 
264 			final MenuItem configurationMenuItem = adminMenuItem.addItem(CONFIGURATION, FontAwesome.GEARS, null);
265 			configurationMenuItem.addItem(APPLICATION_CONFIGURATION,FontAwesome.GEARS, COMMAND_APPLICATION_CONFIGURATION);
266 
267 			configurationMenuItem.addItem(AGENCY,FontAwesome.SERVER, COMMAND_AGENCY);
268 			configurationMenuItem.addItem(PORTAL, FontAwesome.SITEMAP,COMMAND_PORTAL);
269 			configurationMenuItem.addItem(COUNTRY,FontAwesome.FLAG, COMMAND_COUNTRY);
270 			configurationMenuItem.addItem(LANGUAGE,FontAwesome.LANGUAGE, COMMAND_LANGUAGE);
271 			configurationMenuItem.addItem(LANGUAGE_CONTENT,FontAwesome.FILE_TEXT, COMMAND_LANGUAGE_CONTENT);
272 
273 			final MenuItem managementMenuItem = adminMenuItem.addItem(MANAGEMENT, FontAwesome.SERVER, null);
274 
275 			managementMenuItem.addItem(AGENT_OPERATIONS_TEXT,FontAwesome.USER_SECRET, COMMAND_AGENT_OPERATION);
276 
277 			managementMenuItem.addItem(DATA_SUMMARY_TEXT,FontAwesome.DATABASE, COMMAND_DATASUMMARY);
278 
279 			managementMenuItem.addItem(EMAIL,FontAwesome.MAIL_FORWARD, COMMAND_EMAIL);
280 
281 
282 			managementMenuItem.addItem(SYSTEM_PERFORMANCE,FontAwesome.DASHBOARD, COMMAND_MONITORING);
283 
284 			final MenuItem userActivityMenuItem = adminMenuItem.addItem(USER_ACTIVITY, FontAwesome.DATABASE, null);
285 			userActivityMenuItem.addItem(APPLICATION_SESSION,FontAwesome.LAPTOP, COMMAND_APPLICATION_SESSION);
286 			userActivityMenuItem.addItem(APPLICATION_EVENT,FontAwesome.ARROWS, COMMAND_APPLICATION_EVENTS);
287 			userActivityMenuItem.addItem(APPLICATION_EVENT_CHARTS,FontAwesome.ARROWS, COMMAND_APPLICATION_EVENTS_CHARTS);
288 
289 			userActivityMenuItem.addItem(USERACCOUNT,FontAwesome.GROUP, COMMAND_USERACCOUNT);
290 
291 		}
292 	}
293 
294 	/**
295 	 * Creates the button link.
296 	 *
297 	 * @param panelContent
298 	 *            the panel content
299 	 * @param linkText
300 	 *            the link text
301 	 * @param icon
302 	 *            the icon
303 	 * @param command
304 	 *            the command
305 	 * @param description
306 	 *            the description
307 	 */
308 	protected final void createButtonLink(final GridLayout panelContent,final String linkText,final Resource icon, final ClickListener command, final String description) {
309 		final GridLayout grid = new GridLayout(2, 1);
310 		grid.setWidth(100, Unit.PERCENTAGE);
311 		grid.setHeight(100, Unit.PERCENTAGE);
312 		grid.setColumnExpandRatio(0, 1);
313 		grid.setColumnExpandRatio(1, 2);
314 
315 		final Button b = new Button(linkText);
316 		b.setStyleName(LINK_STYLE_NAME);
317 		b.addClickListener(command);
318 		b.setWidth(100, Unit.PERCENTAGE);
319 
320 		b.setIcon(icon);
321 		b.setWidth(100, Unit.PERCENTAGE);
322 
323 
324 		grid.addComponent(b, 0, 0);
325 		grid.setComponentAlignment(b, Alignment.MIDDLE_LEFT);
326 
327 		final Label descriptionLabel = new Label(description);
328 		descriptionLabel.setWidth(100, Unit.PERCENTAGE);
329 		grid.addComponent(descriptionLabel,1,0);
330 		grid.setComponentAlignment(descriptionLabel, Alignment.MIDDLE_LEFT);
331 
332 
333 		panelContent.addComponent(grid);
334 		panelContent.setComponentAlignment(grid, Alignment.MIDDLE_LEFT);
335 	}
336 
337 	/**
338 	 * Creates the grid layout.
339 	 *
340 	 * @param panelContent
341 	 *            the panel content
342 	 * @return the grid layout
343 	 */
344 	protected final GridLayout createGridLayout(final VerticalLayout panelContent) {
345 		final GridLayout grid = new GridLayout(2, 1);
346 		grid.setWidth(100, Unit.PERCENTAGE);
347 		grid.setHeight(100, Unit.PERCENTAGE);
348 		grid.setColumnExpandRatio(0, 1);
349 		grid.setColumnExpandRatio(1, 1);
350 		grid.setSpacing(true);
351 		panelContent.addComponent(grid);
352 		panelContent.setExpandRatio(grid, ContentRatio.LARGE);
353 		return grid;
354 	}
355 
356 }