/* 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.
*/
package org.activiti.explorer.ui.mainlayout;
import java.util.HashMap;
import java.util.Map;
import org.activiti.explorer.Environments;
import org.activiti.explorer.ExplorerApp;
import org.activiti.explorer.I18nManager;
import org.activiti.explorer.Messages;
import org.activiti.explorer.ViewManager;
import org.activiti.explorer.identity.LoggedInUser;
import org.activiti.explorer.ui.Images;
import org.activiti.explorer.ui.profile.ChangePasswordPopupWindow;
import com.vaadin.terminal.Resource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.MenuBar;
import com.vaadin.ui.MenuBar.Command;
import com.vaadin.ui.MenuBar.MenuItem;
import com.vaadin.ui.themes.Reindeer;
/**
* @author Joram Barrez
* @author Frederik Heremans
*/
@SuppressWarnings("serial")
public class MainMenuBar extends HorizontalLayout {
private static final long serialVersionUID = 1L;
protected ViewManager viewManager;
protected I18nManager i18nManager;
protected Map<String, Button> menuItemButtons;
protected String currentMainNavigation;
public MainMenuBar() {
this.viewManager = ExplorerApp.get().getViewManager();
this.i18nManager = ExplorerApp.get().getI18nManager();
menuItemButtons = new HashMap<String, Button>();
init();
}
/**
* Highlights the given main navigation in the menubar.
*/
public synchronized void setMainNavigation(String navigation) {
if(currentMainNavigation != null) {
menuItemButtons.get(currentMainNavigation).removeStyleName(ExplorerLayout.STYLE_ACTIVE);
}
currentMainNavigation = navigation;
Button current = menuItemButtons.get(navigation);
if(current != null) {
current.addStyleName(ExplorerLayout.STYLE_ACTIVE);
}
}
protected void init() {
setHeight(54, UNITS_PIXELS);
setWidth(100, UNITS_PERCENTAGE);
setMargin(false, true, false, false);
initTitle();
initButtons();
initProfileButton();
}
protected void initButtons() {
// TODO: fixed widths based on i18n strings?
Button taskButton = addMenuButton(ViewManager.MAIN_NAVIGATION_TASK, i18nManager.getMessage(Messages.MAIN_MENU_TASKS), Images.MAIN_MENU_TASKS, false, 80);
taskButton.addListener(new ShowTasksClickListener());
menuItemButtons.put(ViewManager.MAIN_NAVIGATION_TASK, taskButton);
Button processButton = addMenuButton(ViewManager.MAIN_NAVIGATION_PROCESS, i18nManager.getMessage(Messages.MAIN_MENU_PROCESS), Images.MAIN_MENU_PROCESS, false, 80);
processButton.addListener(new ShowProcessDefinitionsClickListener());
menuItemButtons.put(ViewManager.MAIN_NAVIGATION_PROCESS, processButton);
if (ExplorerApp.get().getLoggedInUser().isAdmin()) {
Button manageButton = addMenuButton(ViewManager.MAIN_NAVIGATION_MANAGE, i18nManager.getMessage(Messages.MAIN_MENU_MANAGEMENT), Images.MAIN_MENU_MANAGE, false, 90);
manageButton.addListener(new ShowManagementClickListener());
menuItemButtons.put(ViewManager.MAIN_NAVIGATION_MANAGE, manageButton);
}
}
protected void initTitle() {
Label title = new Label();
title.addStyleName(Reindeer.LABEL_H1);
if (ExplorerApp.get().getEnvironment().equals(Environments.ALFRESCO)) {
title.addStyleName(ExplorerLayout.STYLE_WORKFLOW_CONSOLE_LOGO);
} else {
title.addStyleName(ExplorerLayout.STYLE_APPLICATION_LOGO);
}
addComponent(title);
setExpandRatio(title, 1.0f);
}
protected Button addMenuButton(String type, String label, Resource icon, boolean active, float width) {
Button button = new Button(label);
button.addStyleName(type);
button.addStyleName(ExplorerLayout.STYLE_MAIN_MENU_BUTTON);
button.addStyleName(Reindeer.BUTTON_LINK);
button.setHeight(54, UNITS_PIXELS);
button.setIcon(icon);
button.setWidth(width, UNITS_PIXELS);
addComponent(button);
setComponentAlignment(button, Alignment.TOP_CENTER);
return button;
}
protected void initProfileButton() {
final LoggedInUser user = ExplorerApp.get().getLoggedInUser();
// User name + link to profile
MenuBar profileMenu = new MenuBar();
profileMenu.addStyleName(ExplorerLayout.STYLE_HEADER_PROFILE_BOX);
MenuItem rootItem = profileMenu.addItem(user.getFirstName() + " " + user.getLastName(), null);
rootItem.setStyleName(ExplorerLayout.STYLE_HEADER_PROFILE_MENU);
if(useProfile()) {
// Show profile
rootItem.addItem(i18nManager.getMessage(Messages.PROFILE_SHOW), new Command() {
public void menuSelected(MenuItem selectedItem) {
ExplorerApp.get().getViewManager().showProfilePopup(user.getId());
}
});
// Edit profile
rootItem.addItem(i18nManager.getMessage(Messages.PROFILE_EDIT), new Command() {
public void menuSelected(MenuItem selectedItem) {
// TODO: Show in edit-mode
ExplorerApp.get().getViewManager().showProfilePopup(user.getId());
}
});
// Change password
rootItem.addItem(i18nManager.getMessage(Messages.PASSWORD_CHANGE), new Command() {
public void menuSelected(MenuItem selectedItem) {
ExplorerApp.get().getViewManager().showPopupWindow(new ChangePasswordPopupWindow());
}
});
rootItem.addSeparator();
}
// Logout
rootItem.addItem(i18nManager.getMessage(Messages.HEADER_LOGOUT), new Command() {
public void menuSelected(MenuItem selectedItem) {
ExplorerApp.get().close();
}
});
addComponent(profileMenu);
setComponentAlignment(profileMenu, Alignment.TOP_RIGHT);
setExpandRatio(profileMenu, 1.0f);
}
protected boolean useProfile() {
return true;
}
// Listener classes
private class ShowTasksClickListener implements ClickListener {
public void buttonClick(ClickEvent event) {
ExplorerApp.get().getViewManager().showInboxPage();
}
}
private class ShowProcessDefinitionsClickListener implements ClickListener {
public void buttonClick(ClickEvent event) {
ExplorerApp.get().getViewManager().showDeployedProcessDefinitionPage();
}
}
private class ShowManagementClickListener implements ClickListener {
public void buttonClick(ClickEvent event) {
ExplorerApp.get().getViewManager().showDatabasePage();
}
}
}