package org.pentaho.mantle.client;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.pentaho.gwt.widgets.client.menuitem.PentahoMenuItem;
import org.pentaho.mantle.client.commands.AboutCommand;
import org.pentaho.mantle.client.commands.CheckForSoftwareUpdatesCommand;
import org.pentaho.mantle.client.commands.ExecuteGlobalActionsCommand;
import org.pentaho.mantle.client.commands.LogoutCommand;
import org.pentaho.mantle.client.commands.OpenDocCommand;
import org.pentaho.mantle.client.commands.OpenFileCommand;
import org.pentaho.mantle.client.commands.OpenURLCommand;
import org.pentaho.mantle.client.commands.PentahoHomeCommand;
import org.pentaho.mantle.client.commands.PrintCommand;
import org.pentaho.mantle.client.commands.PurgeMondrianSchemaCacheCommand;
import org.pentaho.mantle.client.commands.RefreshMetaDataCommand;
import org.pentaho.mantle.client.commands.RefreshRepositoryCommand;
import org.pentaho.mantle.client.commands.RefreshSystemSettingsCommand;
import org.pentaho.mantle.client.commands.SaveCommand;
import org.pentaho.mantle.client.commands.ShowPreferencesCommand;
import org.pentaho.mantle.client.commands.SwitchLocaleCommand;
import org.pentaho.mantle.client.commands.UrlCommand;
import org.pentaho.mantle.client.messages.Messages;
import org.pentaho.mantle.client.solutionbrowser.PluginOptionsHelper;
import org.pentaho.mantle.client.solutionbrowser.SolutionBrowserListener;
import org.pentaho.mantle.client.solutionbrowser.SolutionBrowserPerspective;
import org.pentaho.mantle.client.solutionbrowser.filelist.FileCommand;
import org.pentaho.mantle.client.solutionbrowser.filelist.FileItem;
import org.pentaho.mantle.client.solutionbrowser.filelist.FileCommand.COMMAND;
import org.pentaho.mantle.client.solutionbrowser.tabs.IFrameTabPanel;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.MenuBar;
import com.google.gwt.user.client.ui.MenuItem;
import com.google.gwt.user.client.ui.MenuItemSeparator;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
public class MantleMainMenuBar extends MenuBar implements IViewMenuCallback, SolutionBrowserListener {
private MantleMenuBar viewMenu = new MantleMenuBar(true);
// menu items (to be enabled/disabled)
private PentahoMenuItem printMenuItem;
private PentahoMenuItem saveMenuItem;
private PentahoMenuItem saveAsMenuItem;
private PentahoMenuItem propertiesMenuItem;
private FileCommand propertiesCommand;
public MantleMainMenuBar() {
super(false);
getElement().setId("main_toolbar");
setAutoOpen(false);
setHeight("26px"); //$NON-NLS-1$
setWidth("100%"); //$NON-NLS-1$
}
@Override
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
switch (DOM.eventGetType(event)) {
case Event.ONMOUSEOVER: {
if (!"DIV".equals(event.getTarget().getNodeName()) && getSelectedItem() != null) { //$NON-NLS-1$
getSelectedItem().addStyleDependentName("selected"); //$NON-NLS-1$
}
break;
}
}
}
@Override
public void onPopupClosed(PopupPanel sender, boolean autoClosed) {
super.onPopupClosed(sender, autoClosed);
this.getSelectedItem().removeStyleDependentName("selected"); //$NON-NLS-1$
}
public void buildMenuBar(final HashMap<String, String> settings, final boolean isAdministrator) {
clearItems();
SolutionBrowserPerspective.getInstance().addSolutionBrowserListener(this);
propertiesCommand = new FileCommand(FileCommand.COMMAND.PROPERTIES, null);
printMenuItem = new PentahoMenuItem(Messages.getString("print"), new PrintCommand()); //$NON-NLS-1$
printMenuItem.getElement().setId("print");
saveMenuItem = new PentahoMenuItem(Messages.getString("save"), new SaveCommand(false)); //$NON-NLS-1$
saveMenuItem.getElement().setId("save");
saveAsMenuItem = new PentahoMenuItem(Messages.getString("saveAsEllipsis"), new SaveCommand(true)); //$NON-NLS-1$
saveAsMenuItem.getElement().setId("saveAs");
propertiesMenuItem = new PentahoMenuItem(Messages.getString("propertiesEllipsis"), propertiesCommand); //$NON-NLS-1$
propertiesMenuItem.getElement().setId("properties");
MenuBar fileMenu = new MantleMenuBar(true);
fileMenu.getElement().setId("file_menu");
MenuBar newMenu = new MantleMenuBar(true);
newMenu.getElement().setId("new_menu");
MenuItem waqrMenuItem = new MenuItem(Messages.getString("newAdhocReport"), PluginOptionsHelper.getNewReportCommand());//$NON-NLS-1$
waqrMenuItem.getElement().setId("waqr_menu_item");
newMenu.addItem(waqrMenuItem);
MenuItem analysisMenuItem = new MenuItem(Messages.getString("newAnalysisViewEllipsis"), PluginOptionsHelper.getNewAnalysisViewCommand());//$NON-NLS-1$
analysisMenuItem.getElement().setId("new_analysis_view_menu_item");
newMenu.addItem(analysisMenuItem); //$NON-NLS-1$
// add additions to the file menu
customizeMenu(newMenu, "file-new", settings); //$NON-NLS-1$
MenuItem newMenuBar = new MenuItem(Messages.getString("_new"), newMenu); //$NON-NLS-1$
newMenuBar.getElement().setId("new_menu_bar");
fileMenu.addItem(newMenuBar);
MenuItem openFileMenuItem = new MenuItem(Messages.getString("openEllipsis"), new OpenFileCommand());//$NON-NLS-1$
openFileMenuItem.getElement().setId("open_file_menu_item");
fileMenu.addItem(openFileMenuItem); //$NON-NLS-1$
if (MantleApplication.showAdvancedFeatures) {
fileMenu.addItem(Messages.getString("openURLEllipsis"), new OpenURLCommand()); //$NON-NLS-1$
}
fileMenu.addSeparator();
fileMenu.addItem(saveMenuItem);
fileMenu.addItem(saveAsMenuItem);
fileMenu.addSeparator();
fileMenu.addItem(printMenuItem);
fileMenu.addSeparator();
if (MantleApplication.showAdvancedFeatures) {
fileMenu.addItem(Messages.getString("userPreferencesEllipsis"), new ShowPreferencesCommand()); //$NON-NLS-1$
fileMenu.addSeparator();
}
MenuBar manageContentMenu = new MantleMenuBar(true);
manageContentMenu.getElement().setId("manage_content_menu");
MenuItem editContent = new MenuItem(Messages.getString("editEllipsis"), new OpenFileCommand(COMMAND.EDIT));//$NON-NLS-1$
MenuItem shareContent = new MenuItem(Messages.getString("shareEllipsis"), new OpenFileCommand(COMMAND.SHARE)); //$NON-NLS-1$
MenuItem scheduleContent = new MenuItem(Messages.getString("scheduleEllipsis"), new OpenFileCommand(COMMAND.SCHEDULE_NEW)); //$NON-NLS-1$
editContent.getElement().setId("edit_content_menu_item");
shareContent.getElement().setId("share_content_menu_item");
scheduleContent.getElement().setId("schedule_content_menu_item");
manageContentMenu.addItem(editContent);
manageContentMenu.addItem(shareContent);
manageContentMenu.addItem(scheduleContent);
customizeMenu(manageContentMenu, "file-manage", settings); //$NON-NLS-1$
MenuItem manageContentMenuBar = new MenuItem(Messages.getString("manage"), manageContentMenu); //$NON-NLS-1$
manageContentMenuBar.getElement().setId("manage_content_menu_bar");
fileMenu.addItem(manageContentMenuBar);
fileMenu.addSeparator();
fileMenu.addItem(propertiesMenuItem);
fileMenu.addSeparator();
MenuItem logoutMenuItem = new MenuItem(Messages.getString("logout"), true, new LogoutCommand()); //$NON-NLS-1$
logoutMenuItem.getElement().setId("logout_menu_item");
fileMenu.addItem(logoutMenuItem);
// add additions to the file menu
customizeMenu(fileMenu, "file", settings); //$NON-NLS-1$
MenuItem fileMenuBar = new MenuItem(Messages.getString("file"), fileMenu);//$NON-NLS-1$
fileMenuBar.getElement().setId("file_menu_bar");
addItem(fileMenuBar);
// add additions to the view menu
viewMenu.getElement().setId("view_menu");
customizeMenu(viewMenu, "view", settings); //$NON-NLS-1$
MenuItem viewMenuBar = new MenuItem(Messages.getString("view"), viewMenu); //$NON-NLS-1$
viewMenuBar.getElement().setId("view_menu_bar");
addItem(viewMenuBar);
MenuBar toolsMenu = new MantleMenuBar(true);
if (isAdministrator) {
MenuBar adminMenu = new MantleMenuBar(true);
adminMenu.getElement().setId("admin_menu");
MenuItem refreshRepositoryMenuItem = new MenuItem(Messages.getString("refreshRepository"), new RefreshRepositoryCommand()); //$NON-NLS-1$
MenuItem refreshSystemSettingsMenuItem = new MenuItem(Messages.getString("refreshSystemSettings"), new RefreshSystemSettingsCommand()); //$NON-NLS-1$
MenuItem refreshMetadataMenuItem = new MenuItem(Messages.getString("refreshReportingMetadata"), new RefreshMetaDataCommand()); //$NON-NLS-1$
MenuItem executeGlobalActionsMenuItem = new MenuItem(Messages.getString("executeGlobalActions"), new ExecuteGlobalActionsCommand()); //$NON-NLS-1$
MenuItem purgeMondrianSchemaCacheMenuItem = new MenuItem(Messages.getString("purgeMondrianSchemaCache"), new PurgeMondrianSchemaCacheCommand()); //$NON-NLS-1$
refreshRepositoryMenuItem.getElement().setId("refresh_repository_menu_item");
refreshSystemSettingsMenuItem.getElement().setId("refresh_system_settings_menu_item");
refreshMetadataMenuItem.getElement().setId("refresh_metadata_menu_item");
executeGlobalActionsMenuItem.getElement().setId("execute_global_actions_menu_item");
purgeMondrianSchemaCacheMenuItem.getElement().setId("purge_mondrian_schema_cache_menu_item");
adminMenu.addItem(refreshRepositoryMenuItem);
adminMenu.addItem(refreshSystemSettingsMenuItem);
adminMenu.addItem(refreshMetadataMenuItem);
adminMenu.addItem(executeGlobalActionsMenuItem);
adminMenu.addItem(purgeMondrianSchemaCacheMenuItem);
// add additions to the admin menu
MenuItem adminMenuBar = new MenuItem(Messages.getString("refresh"), adminMenu);//$NON-NLS-1$
adminMenuBar.getElement().setId("admin_menu_bar");
toolsMenu.addItem(adminMenuBar);
toolsMenu.addSeparator();
Map<String, String> supportedLanguages = Messages.getResourceBundle().getSupportedLanguages();
if (supportedLanguages != null && supportedLanguages.keySet() != null && !supportedLanguages.isEmpty()) {
MenuBar langMenu = new MantleMenuBar(true);
langMenu.getElement().setId("languages_menu");
for (String lang : supportedLanguages.keySet()) {
MenuItem langMenuItem = new MenuItem(supportedLanguages.get(lang), new SwitchLocaleCommand(lang)); //$NON-NLS-1$
langMenuItem.getElement().setId(supportedLanguages.get(lang) + "_menu_item");
langMenu.addItem(langMenuItem);
}
MenuItem langMenuBar = new MenuItem(Messages.getString("languages"), langMenu);//$NON-NLS-1$
langMenuBar.getElement().setId("languages_menu_bar");
toolsMenu.addItem(langMenuBar);
toolsMenu.addSeparator();
}
MenuItem softwareUpdatesMenuItem = new MenuItem(Messages.getString("softwareUpdates"), new CheckForSoftwareUpdatesCommand()); //$NON-NLS-1$
softwareUpdatesMenuItem.getElement().setId("software_updates_menu_item");
toolsMenu.addItem(softwareUpdatesMenuItem);
MenuItem toolsMenuBar = new MenuItem(Messages.getString("tools"), toolsMenu);//$NON-NLS-1$
toolsMenuBar.getElement().setId("tools_menu_bar");
addItem(toolsMenuBar);
// add additions to the admin menu
customizeMenu(toolsMenu, "tools", settings); //$NON-NLS-1$
customizeMenu(adminMenu, "tools-refresh", settings); //$NON-NLS-1$
}
MenuBar helpMenu = new MenuBar(true);
helpMenu.getElement().setId("help_menu");
MenuItem docMenuItem = new MenuItem(Messages.getString("documentation"), new OpenDocCommand(settings.get("documentation-url"))); //$NON-NLS-1$ //$NON-NLS-2$
docMenuItem.getElement().setId("doc_menu_item"); //$NON-NLS-1$
helpMenu.addItem(docMenuItem);
helpMenu.addSeparator();
MenuItem pentahoHomeMenuItem = new MenuItem(Messages.getString("pentahoHomePageName"), new PentahoHomeCommand());//$NON-NLS-1$
pentahoHomeMenuItem.getElement().setId("pentaho_home_menu_item"); //$NON-NLS-1$
helpMenu.addItem(pentahoHomeMenuItem);
helpMenu.addSeparator();
MenuItem aboutMenuItem = new MenuItem(Messages.getString("about"), new AboutCommand()); //$NON-NLS-1$
aboutMenuItem.getElement().setId("about_menu_item"); //$NON-NLS-1$
helpMenu.addItem(aboutMenuItem);
// add additions to the help menu
customizeMenu(helpMenu, "help", settings); //$NON-NLS-1$
MenuItem helpMenuBar = new MenuItem(Messages.getString("help"), helpMenu); //$NON-NLS-1$
helpMenuBar.getElement().setId("help_menu_bar");
addItem(helpMenuBar);
}
private void customizeMenu(final MenuBar menu, final String menuId, final HashMap<String, String> settings) {
// see if we have any plugins to add
if (settings.get(menuId + "MenuTitle0") != null) { //$NON-NLS-1$
// we have at least one so we add a separator first
// menu.addSeparator();
// we're going to loop until we don't find any more
int idx = 0;
String title = settings.get(menuId + "MenuTitle" + idx); //$NON-NLS-1$
String command = settings.get(menuId + "MenuCommand" + idx); //$NON-NLS-1$
while (title != null) {
// create a generic UrlCommand for this
if (!GWT.isScript() && command.indexOf("content") > -1) {
int index = command.indexOf("?");
if (index >= 0) {
command = "/MantleService?passthru=" + command.substring(command.indexOf("content"), index) + "&" + command.substring(index + 1)
+ "&userid=joe&password=password";
} else {
command = "/MantleService?passthru=" + command.substring(command.indexOf("content")) + "&userid=joe&password=password";
}
}
UrlCommand menuCommand = new UrlCommand(command, title);
MenuItem item = new MenuItem(title, menuCommand);
// item.getElement().setId(title);
// add it to the menu
menu.addItem(item);
idx++;
// try to get the next one
title = settings.get(menuId + "MenuTitle" + idx); //$NON-NLS-1$
command = settings.get(menuId + "MenuCommand" + idx); //$NON-NLS-1$
}
}
}
// Cache menu additions for removal later.
private ArrayList<UIObject> viewMenuAdditions = new ArrayList<UIObject>();
public void installViewMenu(ArrayList<UIObject> viewMenuItems) {
// clear existing items
if (viewMenuAdditions != null) {
for (UIObject widget : viewMenuAdditions) {
if (widget instanceof MenuItem) {
viewMenu.removeItem((MenuItem) widget);
} else if (widget instanceof MenuItemSeparator) {
viewMenu.removeSeparator((MenuItemSeparator) widget);
} else if (widget instanceof MenuBar) {
((MenuBar) widget).removeFromParent();
}
}
}
// add new items
for (UIObject widget : viewMenuItems) {
if (widget instanceof MenuItem) {
MenuItem menuItem = (MenuItem) widget;
viewMenu.addItem(menuItem);
} else if (widget instanceof MenuItemSeparator) {
viewMenu.addSeparator((MenuItemSeparator) widget);
} else if (widget instanceof MenuBar) {
MenuBar menuBar = (MenuBar) widget;
viewMenu.addItem(menuBar.getTitle(), menuBar);
}
}
viewMenuAdditions = viewMenuItems;
}
public void solutionBrowserEvent(SolutionBrowserListener.EventType type, Widget panel, FileItem selectedFileItem) {
String selectedTabURL = null;
boolean saveEnabled = false;
if (panel != null && panel instanceof IFrameTabPanel) {
selectedTabURL = ((IFrameTabPanel) panel).getUrl();
saveEnabled = ((IFrameTabPanel) panel).isSaveEnabled();
}
final boolean isEnabled = (selectedTabURL != null && !"".equals(selectedTabURL)); //$NON-NLS-1$
printMenuItem.setEnabled(isEnabled);
propertiesMenuItem.setEnabled(isEnabled);
// Properties menu item should have a command associated with it ONLY when it is enabled.
if (isEnabled) {
propertiesMenuItem.setCommand(propertiesCommand);
} else {
propertiesMenuItem.setCommand(null);
}
saveMenuItem.setEnabled(saveEnabled && isEnabled);
saveAsMenuItem.setEnabled(saveEnabled && isEnabled);
}
}