/* * Lokomo OneCMDB - An Open Source Software for Configuration * Management of Datacenter Resources * * Copyright (C) 2006 Lokomo Systems AB * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. * * Lokomo Systems AB can be contacted via e-mail: info@lokomo.com or via * paper mail: Lokomo Systems AB, Sv�rdv�gen 27, SE-182 33 * Danderyd, Sweden. * */ package org.onecmdb.ui.gwt.desktop.client.mvc.contoller; import java.util.Date; import java.util.List; import java.util.Map; import org.onecmdb.ui.gwt.desktop.client.Version; import org.onecmdb.ui.gwt.desktop.client.WindowFactory; import org.onecmdb.ui.gwt.desktop.client.fixes.MyDesktop; import org.onecmdb.ui.gwt.desktop.client.mvc.CMDBEvents; import org.onecmdb.ui.gwt.desktop.client.service.CMDBAsyncCallback; import org.onecmdb.ui.gwt.desktop.client.service.CMDBLoginException; import org.onecmdb.ui.gwt.desktop.client.service.content.ContentData; import org.onecmdb.ui.gwt.desktop.client.service.content.ContentServiceFactory; import org.onecmdb.ui.gwt.desktop.client.service.model.CMDBDesktopConfig; import org.onecmdb.ui.gwt.desktop.client.service.model.CMDBDesktopMenuItem; import org.onecmdb.ui.gwt.desktop.client.service.model.CMDBDesktopWindowItem; import org.onecmdb.ui.gwt.desktop.client.service.model.CMDBSession; import org.onecmdb.ui.gwt.desktop.client.service.model.ModelServiceFactory; import org.onecmdb.ui.gwt.desktop.client.service.model.UserPreference; import org.onecmdb.ui.gwt.desktop.client.utils.DesktopMenuFactory; import org.onecmdb.ui.gwt.desktop.client.widget.ExceptionErrorDialog; import org.onecmdb.ui.gwt.desktop.client.widget.LoginWidget; import org.onecmdb.ui.gwt.desktop.client.window.CMDBWidgetFactory; import org.onecmdb.ui.gwt.desktop.client.window.DesktopWidgetFactory; import org.onecmdb.ui.gwt.desktop.client.window.WidgetDescription; import org.onecmdb.ui.gwt.desktop.client.window.WidgetParameterEntry; import org.onecmdb.ui.gwt.desktop.client.window.misc.CMDBURLFrameWidget; import org.onecmdb.ui.gwt.desktop.client.window.misc.RegistrationWindow; import com.extjs.gxt.desktop.client.StartMenu; import com.extjs.gxt.desktop.client.TaskBar; import com.extjs.gxt.ui.client.Events; import com.extjs.gxt.ui.client.Style.Scroll; import com.extjs.gxt.ui.client.data.BaseModel; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.ComponentEvent; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.event.WindowEvent; import com.extjs.gxt.ui.client.mvc.AppEvent; import com.extjs.gxt.ui.client.mvc.Controller; import com.extjs.gxt.ui.client.mvc.Dispatcher; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.Dialog; import com.extjs.gxt.ui.client.widget.Info; import com.extjs.gxt.ui.client.widget.MessageBox; import com.extjs.gxt.ui.client.widget.Window; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.menu.CheckMenuItem; import com.extjs.gxt.ui.client.widget.menu.Menu; import com.extjs.gxt.ui.client.widget.menu.MenuItem; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Cookies; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.DeferredCommand; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.EventListener; import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; public class DesktopContoller extends Controller { private MyDesktop desktop; private Widget viewport; private Map<String, List<String>> urlMap; protected long lastActivityTime; private Timer activityTimer; public DesktopContoller() { registerEventTypes(CMDBEvents.DESKTOP_LOGIN); registerEventTypes(CMDBEvents.DESKTOP_LOGOUT); registerEventTypes(CMDBEvents.DESKTOP_LOGGED_IN); registerEventTypes(CMDBEvents.DESKTOP_ABOUT); registerEventTypes(CMDBEvents.DESKTOP_MENU_SELECTED); registerEventTypes(CMDBEvents.DESKTOP_CHANGE_ROLE); registerEventTypes(CMDBEvents.DESKTOP_CHECK_SESSION); registerEventTypes(CMDBEvents.DESKTOP_LOCK_TIMEOUT); // Need to start ContentServlet. ContentServiceFactory.get().stat(new ContentData(), new AsyncCallback<ContentData>() { public void onFailure(Throwable caught) { } public void onSuccess(ContentData result) { } }); // Register Desktop Views. DesktopWidgetFactory.get().addWidgetFactory(new CMDBWidgetFactory()); } @Override public void handleEvent(AppEvent<?> event) { switch(event.type) { // Main entry point. case CMDBEvents.DESKTOP_CHECK_SESSION: // Save URL arguments urlMap = com.google.gwt.user.client.Window.Location.getParameterMap(); // Check for autologin. List<String> alids = urlMap.get("alid"); if (alids != null && alids.size() > 0 ) { String alid = alids.get(0); // Need to validate this token. ModelServiceFactory.get().autoLogin(alid, new AsyncCallback<CMDBSession>() { public void onFailure(Throwable arg0) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOGIN); return; } public void onSuccess(CMDBSession arg0) { arg0.setURLValues(urlMap); CMDBSession.get().setSession(arg0); initDesktop(); setupDesktop(arg0.getDesktopConfig()); } }); return; } // Check if we have a cookie set. String token = Cookies.getCookie("auth_token"); if (token != null) { // Need to validate this token. ModelServiceFactory.get().validateToken(token, new AsyncCallback<CMDBSession>() { public void onFailure(Throwable arg0) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOGIN); return; } public void onSuccess(CMDBSession arg0) { arg0.setUsername(Cookies.getCookie("auth_username")); arg0.setURLValues(urlMap); CMDBSession.get().setSession(arg0); initDesktop(); setupDesktop(arg0.getDesktopConfig()); } }); return; } // Normal login. Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOGIN); break; case CMDBEvents.DESKTOP_MENU_SELECTED: CMDBDesktopMenuItem item = (CMDBDesktopMenuItem) event.data; CMDBDesktopWindowItem wItem = item.getWindowItem(); Window window = WindowFactory.showWindow(desktop, wItem); break; case CMDBEvents.DESKTOP_LOCK_TIMEOUT: stopActivityTimer(); LoginWidget.login(true, new AsyncCallback<CMDBSession> () { public void onFailure(Throwable arg0) { if (arg0 instanceof CMDBLoginException) { CMDBLoginException ex = (CMDBLoginException)arg0; MessageBox.alert(ex.getHeader(), ex.getMessage(), new Listener<WindowEvent>() { public void handleEvent(WindowEvent be) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOCK_TIMEOUT); } }); return; } ExceptionErrorDialog.showError("Login Failed!", arg0, new Listener<WindowEvent>() { public void handleEvent(WindowEvent be) { } }); } public void onSuccess(CMDBSession arg0) { Date date = new Date(); long dateLong = date.getTime(); dateLong += (1000*60*60*8);// 8h convert days to ms date.setTime(dateLong); // Set the new date Cookies.setCookie("auth_token", arg0.getToken(), date); Cookies.setCookie("auth_username", arg0.getUsername(), date); arg0.setURLValues(urlMap); CMDBSession.get().setSession(arg0); startActivityTimeout(CMDBSession.get().getConfig().getDesktopLockTimeout()); } }); break; case CMDBEvents.DESKTOP_LOGIN: LoginWidget.login(false, new AsyncCallback<CMDBSession> () { public void onFailure(Throwable arg0) { if (arg0 instanceof CMDBLoginException) { CMDBLoginException ex = (CMDBLoginException)arg0; MessageBox.alert(ex.getHeader(), ex.getMessage(), new Listener<WindowEvent>() { public void handleEvent(WindowEvent be) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOGIN); } }); return; } ExceptionErrorDialog.showError("Login Failed!", arg0, new Listener<WindowEvent>() { public void handleEvent(WindowEvent be) { } }); } public void onSuccess(CMDBSession arg0) { Date date = new Date(); long dateLong = date.getTime(); dateLong += (1000*60*60*8);// 8h convert days to ms date.setTime(dateLong); // Set the new date Cookies.setCookie("auth_token", arg0.getToken(), date); Cookies.setCookie("auth_username", arg0.getUsername(), date); arg0.setURLValues(urlMap); CMDBSession.get().setSession(arg0); initDesktop(); setupDesktop(arg0.getDesktopConfig()); } }); break; case CMDBEvents.DESKTOP_LOGOUT: // close all windows. clearWindow(); // Logout ModelServiceFactory.get().logout(CMDBSession.get().getToken(), new AsyncCallback<Boolean>() { public void onFailure(Throwable caught) { } public void onSuccess(Boolean result) { } }); // Clear session... CMDBSession.setSession(null); // Stop Lock timer stopActivityTimer(); // Clear Cookies. Cookies.removeCookie("auth_token"); Cookies.removeCookie("auth_username"); // Call login. // Reload application.... reloadApplication(); //Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOGIN); break; case CMDBEvents.DESKTOP_ABOUT: CMDBDesktopWindowItem about = new CMDBDesktopWindowItem(); about.setID(CMDBURLFrameWidget.ID); about.getParams().set("url", GWT.getModuleBaseURL() + "/about.html"); about.getParams().set("newWindow", "true"); about.setHeading("About - OneCMDB"); WindowFactory.showWindow(desktop, about); break; case CMDBEvents.DESKTOP_CHANGE_ROLE: final String role = (String) event.data; //desktop.getStartMenu().hide(); final MessageBox info = MessageBox.wait("Progress", "Change Role to " + role, "Wait..."); ModelServiceFactory.get().getDesktopConfig(CMDBSession.get().getUsername(), CMDBSession.get().getToken(), role, new CMDBAsyncCallback<CMDBDesktopConfig>() { @Override public void onFailure(Throwable t) { info.close(); super.onFailure(t); } @Override public void onSuccess(CMDBDesktopConfig arg0) { info.close(); clearWindow(); CMDBSession.get().setDesktopConfig(arg0); CMDBSession.get().setDefaultRole(role); initDesktop(); setupDesktop(arg0); } }); break; } } /** * Check if the url request a single stdalone window. * @param config * @param urlMap * @return */ private boolean useWindowID(CMDBDesktopConfig config) { Map<String, List<String>> map = CMDBSession.get().getURLValues(); List<String> windowIds = map.get("window.id"); if (windowIds == null || windowIds.size() == 0) { return(false); } String windowID = windowIds.get(0); CMDBDesktopWindowItem item = DesktopWidgetFactory.get().createWidgetItem(windowID, map); Widget w = DesktopWidgetFactory.get().createWidget(item); // Don't show any taskbar. desktop.getTaskBar().setVisible(false); if (w == null) { StringBuffer html = new StringBuffer(); html.append("<table>"); html.append("<tr style=\"background:#DFE8F6;\">"); html.append("<td colspan=2>"); html.append("<h1>Window ID <i>" + windowID + "</i> is not supported</h1>"); html.append("<td>"); html.append("</tr>"); html.append("<tr style=\"background:#DFE8F6;\">"); html.append("<td colspan=2>"); html.append("Available widgets are:</br>"); html.append("</td>"); html.append("</tr>"); List<WidgetDescription> descs = DesktopWidgetFactory.get().getWidgetDescriptions(); html.append("<tr style=\"background:#DFE8F6;\"><th>Widget ID</th><th>Description</th></tr>"); for (WidgetDescription desc : descs) { String id = desc.getId(); String info = desc.getDescription(); StringBuffer params = new StringBuffer(); List<WidgetParameterEntry> pEntries = desc.getParameterEntries(); for (WidgetParameterEntry pEntry : pEntries) { String key = pEntry.getKey(); String defaultValue = pEntry.getDefaultValue(); params.append("&"); params.append(key); params.append("="); params.append(defaultValue == null ? "" : defaultValue);; } html.append("<tr style=\"background:#f5f5f5;\">"); String url = "?window.id=" + id + params.toString(); html.append("<td><a href=\""+ url + "\">" + id + "</a></td>"); html.append("<td><i>" + info + "</i></td>"); html.append("</tr>"); } html.append("</table>"); w = new HTML(html.toString()); } // Show maximized window... Window window = new Window(); window.setLayout(new FitLayout()); window.setClosable(false); window.setHeaderVisible(false); window.setMaximizable(true); ContentPanel cp = new ContentPanel(); cp.setHeaderVisible(false); cp.setScrollMode(Scroll.AUTO); cp.setLayout(new FitLayout()); cp.add(w); window.add(cp); window.show(); window.maximize(); window.layout(); //window.setMaximizable(false); return true; } public native void reloadApplication() /*-{ $wnd.location.reload(); }-*/; private void clearWindow() { desktop.logout(); /* for (Window w : desktop.getWindows()) { desktop.removeWindow(w); } //desktop.getStartMenu().removeAll(); //desktop.getTaskBar().removeAll(); // Remove Desktop, need to find the Viewport... int count = RootPanel.get().getWidgetCount(); for (int i = 0; i < count; i++) { Widget widget = RootPanel.get().getWidget(i); if (widget instanceof Viewport) { this.viewport = widget; RootPanel.get().remove(widget); break; } } */ //desktop = null; } protected void initDesktop() { // First time create a new desktop, that adds a viewport. if (desktop == null) { desktop = new MyDesktop(); addActivityTimer(); } // Add check for time out... // TODO: have this specified in the config.... startActivityTimeout(CMDBSession.get().getConfig().getDesktopLockTimeout()); if (desktop.getTaskBar() == null) { desktop.relogin(); } CMDBSession.get().setDesktop(desktop); // Next login we have a viewport just attache it. if (viewport != null) { RootPanel.get().add(viewport); } } protected void addActivityTimer() { if (CMDBSession.get().getConfig().getDesktopLockTimeout() < 0) { return; } lastActivityTime = System.currentTimeMillis(); //add event capture to detect user activity and reset idle timeout DOM.setEventListener(RootPanel.get().getElement(), new EventListener() { public void onBrowserEvent(Event event) { lastActivityTime = System.currentTimeMillis(); } }); DOM.sinkEvents(RootPanel.get().getElement(), Event.ONMOUSEDOWN); } protected void stopActivityTimer() { if (activityTimer == null) { return; } activityTimer.cancel(); activityTimer = null; } /** * Start a timer that will logout user when timeout time has elapsed * and no browser activity has been reached. * * @param timeout */ protected void startActivityTimeout(final int timeout) { if (CMDBSession.get().getConfig().getDesktopLockTimeout() < 0) { return; } // Check every min final int checkIntervall = 60*1000; if (activityTimer != null) { return; } activityTimer = new Timer() { @Override public void run() { long now = System.currentTimeMillis(); if ((lastActivityTime + timeout) < now) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOCK_TIMEOUT); } else { this.schedule(checkIntervall); } } }; activityTimer.schedule(checkIntervall); } private void setupDesktop(CMDBDesktopConfig config) { if (useWindowID(config)) { return; } ModelServiceFactory.get().checkForNewUpdate(CMDBSession.get().getToken(), false, new AsyncCallback<String>() { public void onFailure(Throwable caught) { // TODO Auto-generated method stub } public void onSuccess(String result) { if (result != null) { Info.display("Updates", "New updates are now available"); } } }); // Setup default values. CMDBSession.get().getConfig().set("defaultWindowHeight", config.get("defaultHeight")); CMDBSession.get().getConfig().set("defaultWindowWidth", config.get("defaultWidth")); TaskBar taskBar = desktop.getTaskBar(); /* for (int i = 0; i < menu.getItemCount(); i++) { Item item = menu.getItem(i); if (item != null) { menu.remove(item); } } */ String defaultRole = CMDBSession.get().getDefaultRole(); String info = CMDBSession.get().getUsername(); if (defaultRole != null) { info = defaultRole + "/" + info; } MenuItem logout = new MenuItem("Logout", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOGOUT); } }); logout.setIconStyle("logout"); MenuItem roles = null; if (defaultRole != null) { roles = new MenuItem("Roles"); final Menu roleMenu = new Menu(); for (final String role : CMDBSession.get().getRoles()) { final CheckMenuItem r = new CheckMenuItem("Role " + role); r.addSelectionListener(new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { DeferredCommand.addCommand(new Command() { public void execute() { if (desktop.getTaskBar().getStartMenu().isVisible()) { desktop.getTaskBar().getStartMenu().hide(true); } MessageBox.confirm("Change Role", "Change role to " + role, new Listener<WindowEvent>() { public void handleEvent(WindowEvent be) { //Dialog dialog = (Dialog) ce.component; Button btn = be.buttonClicked; if (btn.getItemId().equals(Dialog.YES)) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_CHANGE_ROLE, role); } } }); } }); } }); r.setGroup("roles"); r.setChecked(role.equals(defaultRole)); roleMenu.add(r); } roles.setSubMenu(roleMenu); } MenuItem about = new MenuItem("About", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_ABOUT); } }); about.setIconStyle("about-icon"); MenuItem feedback = new MenuItem("Feedback"); feedback.setIconStyle("feedback-icon"); Menu feedbackMenu = new Menu(); MenuItem good = new MenuItem("Good", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { CMDBDesktopWindowItem about = new CMDBDesktopWindowItem(); about.setID(CMDBURLFrameWidget.ID); about.getParams().set("url", "http://www.onecmdb.org/feedback/good.html" + "?version=" + Version.getVersionString() + "&action=" + "Menu"); about.setHeading("Good Feedback on OneCMDB"); WindowFactory.showWindow(desktop, about); } }); good.setIconStyle("feedback-good"); MenuItem bad = new MenuItem("Bad", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { CMDBDesktopWindowItem about = new CMDBDesktopWindowItem(); about.setID(CMDBURLFrameWidget.ID); about.getParams().set("url", "http://www.onecmdb.org/feedback/bad.html" + "?version=" + Version.getVersionString() + "&action=" + "Menu"); about.setHeading("Bad Feedback on OneCMDB"); WindowFactory.showWindow(desktop, about); } }); bad.setIconStyle("feedback-bad"); feedbackMenu.add(good); feedbackMenu.add(bad); feedback.setSubMenu(feedbackMenu); MenuItem updates = new MenuItem("Updates", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { final MessageBox info = MessageBox.wait("Progress", "Check onecmdb.org for updates", "Please Wait..."); ModelServiceFactory.get().checkForNewUpdate(CMDBSession.get().getToken(), true, new AsyncCallback<String>() { public void onFailure(Throwable caught) { info.close(); MessageBox.alert("Problem", "Can't contact update server", null); } public void onSuccess(String result) { info.close(); if (result == null) { result = "<html><b>No updates found...</b></html>"; } Dialog simple = new Dialog(); simple.setHeading("OneCMDB Update Info"); simple.setButtons(Dialog.OK); simple.setBodyStyleName("pad-text"); simple.addText(result); simple.setScrollMode(Scroll.AUTO); simple.setHideOnButtonClick(true); simple.setSize(300, 300); simple.show(); } }); } }); updates.setIconStyle("update-icon"); updates.setToolTip("Check if any updates are avaliable"); MenuItem showDesktop = new MenuItem("Desktop", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { for (Window w : desktop.getWindows()) { if (w.isVisible()) { w.minimize(); } } } }); showDesktop.setIconStyle("desktop-icon"); showDesktop.setToolTip("Minimize all windows on the desktop"); MenuItem register = new MenuItem("Register", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { showRegisterWindow(); } }); register.setIconStyle("register-icon"); register.setToolTip("Register your self"); MenuItem lockDesktop = new MenuItem("Lock", new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { Dispatcher.get().dispatch(CMDBEvents.DESKTOP_LOCK_TIMEOUT); } }); lockDesktop.setIconStyle("desktop-lock-icon"); lockDesktop.setToolTip("Lock the desktop with a login window."); MenuItem quickHelpDesktop = new MenuItem("Quick Help"); quickHelpDesktop.setIconStyle("help-icon"); Menu quickHelpMenu = new Menu(); quickHelpDesktop.setSubMenu(quickHelpMenu); final MenuItem enableQuickHelpDesktop = new MenuItem("Enable"); enableQuickHelpDesktop.addSelectionListener(new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { updateQuickHelp(false); } }); final MenuItem disableQuickHelpDesktop = new MenuItem("Disable"); disableQuickHelpDesktop.addSelectionListener(new SelectionListener<ComponentEvent>() { @Override public void componentSelected(ComponentEvent ce) { updateQuickHelp(true); } }); quickHelpMenu.add(enableQuickHelpDesktop); quickHelpMenu.add(disableQuickHelpDesktop); quickHelpMenu.addListener(Events.BeforeShow, new Listener<BaseEvent>() { public void handleEvent(BaseEvent be) { if (CMDBSession.get().getUserPreference().hideQuickHelp()) { enableQuickHelpDesktop.setEnabled(true); disableQuickHelpDesktop.setEnabled(false); } else { enableQuickHelpDesktop.setEnabled(false); disableQuickHelpDesktop.setEnabled(true); } } }); lockDesktop.setIconStyle("desktop-lock-icon"); lockDesktop.setToolTip("Lock the desktop with a login window."); StartMenu menu = taskBar.getStartMenu(); // Setup layout of tools menu.setHeading(info); menu.setIconStyle("user"); menu.addTool(logout); if (roles != null) { menu.addTool(roles); } menu.addTool(showDesktop); menu.addTool(lockDesktop); menu.addToolSeperator(); menu.addTool(quickHelpDesktop); menu.addToolSeperator(); menu.addTool(feedback); menu.addTool(updates); menu.addTool(register); menu.addToolSeperator(); menu.addTool(about); List<CMDBDesktopMenuItem> menus = config.getMenuItems(); for (final CMDBDesktopMenuItem item : menus) { // Setup menu menu.add(DesktopMenuFactory.getMenuItem(item)); // Setup shortcuts. DesktopMenuFactory.updateShortcuts(desktop, item); } // Open registration window... if (CMDBSession.get().showRegistration()) { showRegisterWindow(); } } protected void updateQuickHelp(boolean b) { UserPreference pref = CMDBSession.get().getUserPreference(); pref.setHideQuickHelp(b); ModelServiceFactory.get().saveUserPreferences(CMDBSession.get().getToken(), CMDBSession.get().getUsername(), pref, new AsyncCallback<Void>() { public void onFailure(Throwable caught) { Info.display("User Preferences", "Save failed!!!"); } public void onSuccess(Void result) { Info.display("User Preferences", "Saved"); } }); } protected void showRegisterWindow() { CMDBDesktopMenuItem regItem = new CMDBDesktopMenuItem(); CMDBDesktopWindowItem wItem = new CMDBDesktopWindowItem(); wItem.setID(CMDBURLFrameWidget.ID); wItem.setHeading("Register to OneCMDB"); wItem.setWidth("600px"); BaseModel params = new BaseModel(); params.set("url", "http://www.onecmdb.org/reg/reg.php?id=" + CMDBSession.get().getInstallId()); wItem.setParams(params); regItem.getWindowItem(wItem); Dispatcher.get().dispatch(new AppEvent<CMDBDesktopMenuItem>(CMDBEvents.DESKTOP_MENU_SELECTED, regItem )); } }