modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java | 79 +---- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java | 6 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java | 58 +--- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java | 9 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java | 136 ++++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleDistributionFileUploadForm.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/TextFileRetrieverForm.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java | 3 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTitleBar.java | 7 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java | 7 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java | 20 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/FavoritesMenu.java | 43 +-- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/favorites/SavedSearchManager.java | 8 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java | 8 modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html | 5 18 files changed, 251 insertions(+), 154 deletions(-)
New commits: commit ab9648bda9d733820cfc8037cc011e957e10fcfb Author: Joseph Marques joseph@redhat.com Date: Sun Sep 26 00:13:14 2010 -0400
enhance login and user session management experience:
* create formal notion of client-side loggedIn state * add logic for synchronization between client/server loggedIn state * "loading..." image is now dismissed upon app load, not upon login action * LoginView is recentered upon browser resizing * "recent alerts" no longer causes GWT service exceptions in the logs
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java index 00a27f0..b59edba 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java @@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client;
import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Element; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.http.client.Request; @@ -30,10 +31,8 @@ import com.google.gwt.http.client.Response; import com.google.gwt.http.client.URL; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.History; -import com.google.gwt.user.client.Timer; import com.google.gwt.user.client.Window.Location; import com.google.gwt.user.client.rpc.AsyncCallback; -import com.google.gwt.user.client.ui.RootPanel; import com.smartgwt.client.core.KeyIdentifier; import com.smartgwt.client.types.Overflow; import com.smartgwt.client.util.KeyCallback; @@ -60,7 +59,6 @@ import org.rhq.enterprise.gui.coregui.client.report.tag.TaggedView; import org.rhq.enterprise.gui.coregui.client.util.ErrorHandler; import org.rhq.enterprise.gui.coregui.client.util.WidgetUtility; import org.rhq.enterprise.gui.coregui.client.util.message.MessageCenter; -import org.rhq.enterprise.gui.coregui.client.util.preferences.UserPreferences; import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/** @@ -71,18 +69,6 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
public static final String CONTENT_CANVAS_ID = "BaseContent";
- private static Subject sessionSubject; - - private static Timer sessionTimer = new Timer() { - @Override - public void run() { - System.out.println("Session Timer Expired"); - new LoginView(true).showLoginDialog(); // log user out, show login dialog - } - }; - - private static UserPreferences userPreferences; - private static ErrorHandler errorHandler = new ErrorHandler();
private static BreadcrumbTrailPane breadCrumbTrailPane; @@ -140,9 +126,18 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { messages = GWT.create(Messages.class);
checkLoginStatus(); + + // removing loading image, which can be seen if LoginView doesn't completely cover it + Element loadingPanel = DOM.getElementById("Loading-Panel"); + loadingPanel.removeFromParent(); }
public static void checkLoginStatus() { + if (!UserSessionManager.isLoggedIn()) { + new LoginView().showLoginDialog(); + return; + } + // String sessionIdString = com.google.gwt.user.client.Cookies.getCookie("RHQ_Sesssion"); // if (sessionIdString == null) {
@@ -181,11 +176,17 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { }
public void onSuccess(PageList<Subject> result) { - Subject subject = result.get(0); subject.setSessionId(sessionId); - setSessionSubject(subject); - //System.out.println("Portal-War logged in"); + + // TODO this breaks because of reattach rules, bizarrely even in queries. + // gonna switch out to non-subject include apis + // + // Create a minimized session object for validation on requests + // Subject s = new Subject(subject.getName(),subject.getFactive(), subject.getFsystem()); + // s.setSessionId(subject.getSessionId()); + UserSessionManager.setSessionSubject(subject); + loadProductInfo(); } }); } else { @@ -208,16 +209,6 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { } }
- public static void refreshSessionTimer() { - System.out.println("Refreshing Session Timer"); - sessionTimer.schedule(29 * 60 * 1000); // 29 minutes from now, timeout before the http session timeout - } - - public static void destroySessionTimer() { - System.out.println("Destroying Session Timer"); - sessionTimer.cancel(); - } - private void buildCoreUI() { // If the core gui is already built (eg. from previous login, just refire event) if (this.rootCanvas == null) { @@ -243,8 +234,6 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { breadCrumbTrailPane = new BreadcrumbTrailPane(); rootCanvas.addMember(breadCrumbTrailPane);
- DOM.setInnerHTML(RootPanel.get("Loading-Panel").getElement(), ""); - Canvas canvas = new Canvas(CONTENT_CANVAS_ID); canvas.setWidth100(); canvas.setHeight100(); @@ -296,7 +285,8 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { } else if (breadcrumbName.equals("Bundles")) { canvas = new BundleTopView("Bundle"); } else if (breadcrumbName.equals("LogOut")) { - canvas = new LoginView(true); + canvas = new LoginView(); + UserSessionManager.logout(); } else if (breadcrumbName.equals("Tag")) { canvas = new TaggedView("Tag"); } else if (breadcrumbName.equals("Subsystems")) { @@ -319,32 +309,10 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { return errorHandler; }
- public static Subject getSessionSubject() { - return sessionSubject; - } - - public static UserPreferences getUserPreferences() { - return userPreferences; - } - public static void printWidgetTree() { WidgetUtility.printWidgetTree(coreGUI.rootCanvas); }
- public static void setSessionSubject(Subject subject) { - // TODO this breaks because of reattach rules, bizarrely even in queries. gonna switch out to non-subject include apis - // Create a minimized session object for validation on requests - // Subject s = new Subject(subject.getName(),subject.getFactive(), subject.getFsystem()); - // s.setSessionId(subject.getSessionId()); - CoreGUI.sessionSubject = subject; - CoreGUI.userPreferences = new UserPreferences(subject); - loadProductInfo(); - // After a user initiated logout start back at the default view - if ("LogOut".equals(CoreGUI.currentPath)) { - History.newItem(getDefaultView()); - } - } - private static String getDefaultView() { // TODO: should this be Dashboard or a User Preference? return ""; @@ -403,6 +371,11 @@ public class CoreGUI implements EntryPoint, ValueChangeHandler<String> { public void onSuccess(ProductInfo result) { productInfo = result; coreGUI.buildCoreUI(); + + // After a user initiated logout start back at the default view + if ("LogOut".equals(CoreGUI.currentPath)) { + History.newItem(getDefaultView()); + } } }); } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java index 66b94dc..00050ad 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java @@ -56,7 +56,7 @@ public class Footer extends LocatableToolStrip { protected void onDraw() { super.onDraw();
- Label loggedInAs = new Label("Logged in as " + CoreGUI.getSessionSubject().getName()); + Label loggedInAs = new Label("Logged in as " + UserSessionManager.getSessionSubject().getName()); loggedInAs.setWrap(false); loggedInAs.setMargin(5); loggedInAs.setValign(VerticalAlignment.CENTER); @@ -111,6 +111,9 @@ public class Footer extends LocatableToolStrip { }
public void refresh() { + if (!UserSessionManager.isLoggedIn()) { + return; + }
AlertCriteria alertCriteria = new AlertCriteria(); alertCriteria.setPaging(1, 1); @@ -127,6 +130,7 @@ public class Footer extends LocatableToolStrip { drawAlerts(result); } }); + }
public void drawAlerts(PageList<Alert> alerts) { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java index a19fcec..0f660c3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java @@ -27,7 +27,6 @@ import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.Response; -import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.FormErrorOrientation; import com.smartgwt.client.widgets.Canvas; @@ -45,10 +44,9 @@ import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.events.KeyPressEvent; import com.smartgwt.client.widgets.form.fields.events.KeyPressHandler;
-import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; - /** * @author Greg Hinkle + * @author Joseph Marques */ public class LoginView extends Canvas {
@@ -60,34 +58,12 @@ public class LoginView extends Canvas { private SubmitItem loginButton;
public LoginView() { - this(false); - } - - public LoginView(boolean logout) { - if (logout) { - CoreGUI.destroySessionTimer(); - if (CoreGUI.getSessionSubject() != null) { - GWTServiceLookup.getSubjectService().logout(CoreGUI.getSessionSubject(), new AsyncCallback<Void>() { - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to logout", caught); - CoreGUI.checkLoginStatus(); - } - - public void onSuccess(Void result) { - CoreGUI.checkLoginStatus(); - } - }); - } - } else { - CoreGUI.refreshSessionTimer(); - } - }
public void showLoginDialog() { - if (!loginShowing) { loginShowing = true; + UserSessionManager.logout();
form = new DynamicForm(); form.setMargin(25); @@ -143,8 +119,7 @@ public class LoginView extends Canvas { window.setCanDragReposition(false); window.setShowCloseButton(false); window.setShowMinimizeButton(false); - - window.centerInPage(); + window.setAutoCenter(true);
window.addItem(form); window.show(); @@ -157,11 +132,9 @@ public class LoginView extends Canvas { } }); } - }
private void login(String user, String password) { - if (CoreGUI.detectIe6()) { CoreGUI.forceIe6Hacks(); } @@ -177,6 +150,7 @@ public class LoginView extends Canvas { if (statusCode == 200) { window.destroy(); loginShowing = false; + UserSessionManager.refresh(); CoreGUI.checkLoginStatus(); } else { handleError(statusCode); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java index f4c52d7..3ec02b3 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/SearchGUI.java @@ -39,7 +39,6 @@ import org.rhq.enterprise.gui.coregui.client.search.SearchBar; public class SearchGUI implements EntryPoint {
public static SearchGUI singleton = new SearchGUI(); - private static Subject sessionSubject; private SearchBar searchBar;
private SearchGUI() { @@ -101,12 +100,10 @@ public class SearchGUI implements EntryPoint { }
public void onSuccess(PageList<Subject> result) { - Subject subject = result.get(0); subject.setSessionId(sessionId); - SearchGUI.sessionSubject = subject; + UserSessionManager.setSessionSubject(subject); singleton.buildSearchGUI(); - } }); } else { @@ -130,10 +127,6 @@ public class SearchGUI implements EntryPoint {
}
- public static Subject getSessionSubject() { - return sessionSubject; - } - public SearchBar getSearchBar() { return searchBar; } diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java new file mode 100644 index 0000000..9bede31 --- /dev/null +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java @@ -0,0 +1,136 @@ +/* + * RHQ Management Platform + * Copyright (C) 2005-2010 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * 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 and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser 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. + */ +package org.rhq.enterprise.gui.coregui.client; + +import com.google.gwt.user.client.Timer; +import com.google.gwt.user.client.rpc.AsyncCallback; + +import org.rhq.core.domain.auth.Subject; +import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.util.preferences.UserPreferences; + +/** + * First time this class is loaded, local loggedIn bit will be false, which implies user is not logged in. + * + * If login successful, CoreGUI/SearchGUI will call setSessionSubject, which sets local loggedIn bit to true. + * If user clicks logout explicitly, LoginView will be shown, which sets local loggedIn bit to false. + * If count down timer expires, LoginView will be shown, which sets local loggedIn bit to false. + * + * If error during GWT RPC Service, check local loggedIn status + * If loggedIn bit false, display LoginView + * Else check server-side logged in state + * If logged out on server-side, LoginView will be shown, which sets local loggedIn bit to false. + * + * @author Joseph Marques + */ +public class UserSessionManager { + + private static int SESSION_TIMEOUT = 29 * 60 * 1000; // 29 mins, just shorter than the 30-min web session timeout + private static int LOGOUT_DELAY = 30 * 1000; // 30 seconds + + private static Subject sessionSubject; + private static UserPreferences userPreferences; + + private UserSessionManager() { + // static access only + } + + private static boolean loggedIn = false; + private static Timer sessionTimer = new Timer() { + @Override + public void run() { + System.out.println("Session Timer Expired"); + new LoginView().showLoginDialog(); // log user out, show login dialog + } + }; + private static Timer logoutTimer = new Timer() { + @Override + public void run() { + logoutServerSide(); + } + }; + + public static void refresh() { + // if quickly logging back in, first cancel the logout timer so that we + // don't have race conditions to the server where the login request beats + // the logout request, which would appear to the user for the login to + // have failed since it will boot them back to the login screen. + logoutTimer.cancel(); + + // now continue with the rest of the login logic + loggedIn = true; + System.out.println("Refreshing Session Timer"); + sessionTimer.schedule(SESSION_TIMEOUT); + } + + public static void logout() { + if (!loggedIn) { + return; // nothing to do, already called + } + + loggedIn = false; + System.out.println("Destroying Session Timer"); + sessionTimer.cancel(); + + // log out the web session on the server-side in a delayed fashion, + // allowing enough time to pass to let in-flight requests complete + logoutTimer.schedule(LOGOUT_DELAY); + } + + private static void logoutServerSide() { + try { + if (getSessionSubject() != null) { + GWTServiceLookup.getSubjectService().logout(UserSessionManager.getSessionSubject(), + new AsyncCallback<Void>() { + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to logout", caught); + } + + public void onSuccess(Void result) { + } + }); + } + } catch (Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to logout", caught); + } + } + + public static boolean isLoggedIn() { + System.out.println("isLoggedIn = " + loggedIn); + return loggedIn; + } + + public static Subject getSessionSubject() { + return sessionSubject; + } + + public static void setSessionSubject(Subject subject) { + sessionSubject = subject; + userPreferences = new UserPreferences(sessionSubject); + refresh(); + } + + public static UserPreferences getUserPreferences() { + return userPreferences; + } +} diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleDistributionFileUploadForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleDistributionFileUploadForm.java index 65f2cc3..0d90b8a 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleDistributionFileUploadForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleDistributionFileUploadForm.java @@ -31,6 +31,7 @@ import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
@@ -138,7 +139,7 @@ public class BundleDistributionFileUploadForm extends DynamicCallbackForm { super.onDraw();
HiddenItem sessionIdField = new HiddenItem("sessionid"); - sessionIdField.setValue(CoreGUI.getSessionSubject().getSessionId().intValue()); + sessionIdField.setValue(UserSessionManager.getSessionSubject().getSessionId().intValue());
setNumCols(4);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java index cded781..3647913 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/BundleFileUploadForm.java @@ -32,6 +32,7 @@ import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import org.rhq.core.domain.bundle.BundleVersion; import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
@@ -154,7 +155,7 @@ public class BundleFileUploadForm extends DynamicCallbackForm { super.onDraw();
HiddenItem sessionIdField = new HiddenItem("sessionid"); - sessionIdField.setValue(CoreGUI.getSessionSubject().getSessionId().intValue()); + sessionIdField.setValue(UserSessionManager.getSessionSubject().getSessionId().intValue());
HiddenItem bundleVersionIdField = new HiddenItem("bundleVersionId"); bundleVersionIdField.setValue(this.bundleVersion.getId()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/TextFileRetrieverForm.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/TextFileRetrieverForm.java index be0f0a9..31a8a23 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/TextFileRetrieverForm.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/upload/TextFileRetrieverForm.java @@ -30,6 +30,7 @@ import com.smartgwt.client.widgets.form.fields.events.ClickEvent; import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.util.message.Message; import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
@@ -56,7 +57,7 @@ public class TextFileRetrieverForm extends DynamicCallbackForm { retrieveField.setValue(true);
HiddenItem sessionIdField = new HiddenItem("sessionid"); - sessionIdField.setValue(CoreGUI.getSessionSubject().getSessionId().intValue()); + sessionIdField.setValue(UserSessionManager.getSessionSubject().getSessionId().intValue());
setNumCols(4);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java index 72cf55e..13a35c0 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java @@ -33,7 +33,7 @@ import com.smartgwt.client.widgets.grid.events.FieldStateChangedHandler;
import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.core.domain.dashboard.DashboardPortlet; -import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.dashboard.Portlet; import org.rhq.enterprise.gui.coregui.client.dashboard.PortletViewFactory; import org.rhq.enterprise.gui.coregui.client.dashboard.PortletWindow; @@ -63,7 +63,7 @@ public class FavoriteResourcesPortlet extends ResourceSearchView implements Port protected void configureTable() { super.configureTable();
- Set<Integer> favoriteIds = CoreGUI.getUserPreferences().getFavoriteResources(); + Set<Integer> favoriteIds = UserSessionManager.getUserPreferences().getFavoriteResources();
Integer[] favArray = favoriteIds.toArray(new Integer[favoriteIds.size()]);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java index 4f5374c..5557d50 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/footer/FavoritesButton.java @@ -33,6 +33,7 @@ import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIMenuButton;
@@ -56,7 +57,7 @@ public class FavoritesButton extends LocatableIMenuButton { // favorite Resources successfully. clickEvent.cancel();
- Set<Integer> favorites = CoreGUI.getUserPreferences().getFavoriteResources(); + Set<Integer> favorites = UserSessionManager.getUserPreferences().getFavoriteResources();
if (!favorites.isEmpty()) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTitleBar.java index 431f52d..e78e3b6 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTitleBar.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupTitleBar.java @@ -36,6 +36,7 @@ import org.rhq.core.domain.resource.group.ResourceGroup; import org.rhq.core.domain.tagging.Tag; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.components.tagging.TagEditorView; import org.rhq.enterprise.gui.coregui.client.components.tagging.TagsChangedCallback; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; @@ -82,7 +83,7 @@ public class ResourceGroupTitleBar extends LocatableHLayout { this.favoriteButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { Set<Integer> favorites = toggleFavoriteLocally(); - CoreGUI.getUserPreferences().setFavoriteResources(favorites, new UpdateFavoritesCallback()); + UserSessionManager.getUserPreferences().setFavoriteResources(favorites, new UpdateFavoritesCallback()); } });
@@ -143,7 +144,7 @@ public class ResourceGroupTitleBar extends LocatableHLayout { this.title.setContents("<span class="SectionHeader">" + group.getName() + "</span> <span class="subtitle">" + group.getGroupCategory().name() + "</span>");
- Set<Integer> favorites = CoreGUI.getUserPreferences().getFavoriteResourceGroups(); + Set<Integer> favorites = UserSessionManager.getUserPreferences().getFavoriteResourceGroups(); this.favorite = favorites.contains(group.getId()); updateFavoriteButton();
@@ -167,7 +168,7 @@ public class ResourceGroupTitleBar extends LocatableHLayout {
private Set<Integer> toggleFavoriteLocally() { this.favorite = !this.favorite; - Set<Integer> favorites = CoreGUI.getUserPreferences().getFavoriteResourceGroups(); + Set<Integer> favorites = UserSessionManager.getUserPreferences().getFavoriteResourceGroups(); if (this.favorite) { favorites.add(group.getId()); } else { diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java index dcbcda6..bc1e0b7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceTitleBar.java @@ -36,6 +36,7 @@ import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.tagging.Tag; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.components.tagging.TagEditorView; import org.rhq.enterprise.gui.coregui.client.components.tagging.TagsChangedCallback; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; @@ -82,7 +83,7 @@ public class ResourceTitleBar extends LocatableHLayout { this.favoriteButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { Set<Integer> favorites = toggleFavoriteLocally(); - CoreGUI.getUserPreferences().setFavoriteResources(favorites, new UpdateFavoritesCallback()); + UserSessionManager.getUserPreferences().setFavoriteResources(favorites, new UpdateFavoritesCallback()); } });
@@ -142,7 +143,7 @@ public class ResourceTitleBar extends LocatableHLayout { this.title.setContents("<span class="SectionHeader">" + resource.getName() + "</span> <span class="subtitle">" + resource.getResourceType().getName() + "</span>");
- Set<Integer> favorites = CoreGUI.getUserPreferences().getFavoriteResources(); + Set<Integer> favorites = UserSessionManager.getUserPreferences().getFavoriteResources(); this.favorite = favorites.contains(resource.getId()); updateFavoriteButton();
@@ -168,7 +169,7 @@ public class ResourceTitleBar extends LocatableHLayout {
private Set<Integer> toggleFavoriteLocally() { this.favorite = !this.favorite; - Set<Integer> favorites = CoreGUI.getUserPreferences().getFavoriteResources(); + Set<Integer> favorites = UserSessionManager.getUserPreferences().getFavoriteResources(); int resourceId = this.resource.getId(); if (this.favorite) { favorites.add(resourceId); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/FavoritesMenu.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/FavoritesMenu.java index a13e705..876f8d5 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/FavoritesMenu.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/menu/FavoritesMenu.java @@ -36,9 +36,9 @@ import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.gui.coregui.client.CoreGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
- /** * @author Greg Hinkle */ @@ -56,7 +56,7 @@ public class FavoritesMenu extends MenuItem { }
public void refresh() { - Set<Integer> favorites = CoreGUI.getUserPreferences().getFavoriteResources(); + Set<Integer> favorites = UserSessionManager.getUserPreferences().getFavoriteResources();
if (!favorites.isEmpty()) {
@@ -80,33 +80,30 @@ public class FavoritesMenu extends MenuItem { ResourceCriteria criteria = new ResourceCriteria(); criteria.addFilterIds(resourceIds); GWTServiceLookup.getResourceService().findResourcesByCriteria(criteria, - new AsyncCallback<PageList<Resource>>() { - public void onFailure(Throwable caught) { - CoreGUI.getErrorHandler().handleError("Failed to load favorite Resources.", caught); - } + new AsyncCallback<PageList<Resource>>() { + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to load favorite Resources.", caught); + }
- public void onSuccess(PageList<Resource> resources) { - for (Resource resource : resources) { - MenuItem item = idToMenuItemMap.get(resource.getId()); - // TODO: Ideally, we should use ResourceManagerLocal.disambiguate() here to obtain - // disambiguated Resource names. - item.setTitle(resource.getName()); + public void onSuccess(PageList<Resource> resources) { + for (Resource resource : resources) { + MenuItem item = idToMenuItemMap.get(resource.getId()); + // TODO: Ideally, we should use ResourceManagerLocal.disambiguate() here to obtain + // disambiguated Resource names. + item.setTitle(resource.getName());
- String category = resource.getResourceType().getCategory().getDisplayName(); + String category = resource.getResourceType().getCategory().getDisplayName();
- String avail = (resource.getCurrentAvailability() != null && resource.getCurrentAvailability().getAvailabilityType() != null) - ? (resource.getCurrentAvailability().getAvailabilityType().name().toLowerCase()) : "down"; - item.setIcon("types/" + category + "_" + avail + "_16.png"); - } - submenu.setItems(items); + String avail = (resource.getCurrentAvailability() != null && resource + .getCurrentAvailability().getAvailabilityType() != null) ? (resource + .getCurrentAvailability().getAvailabilityType().name().toLowerCase()) : "down"; + item.setIcon("types/" + category + "_" + avail + "_16.png"); } - }); + submenu.setItems(items); + } + }); }
- }
- } - - diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/favorites/SavedSearchManager.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/favorites/SavedSearchManager.java index 66260e8..ac069cb 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/favorites/SavedSearchManager.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/search/favorites/SavedSearchManager.java @@ -29,7 +29,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.SavedSearchCriteria; import org.rhq.core.domain.search.SavedSearch; -import org.rhq.enterprise.gui.coregui.client.SearchGUI; +import org.rhq.enterprise.gui.coregui.client.UserSessionManager; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; import org.rhq.enterprise.gui.coregui.client.gwt.SearchGWTServiceAsync; import org.rhq.enterprise.gui.coregui.client.search.SearchBar; @@ -74,8 +74,8 @@ public class SavedSearchManager { public synchronized void updatePatternByName(final String name, final String pattern) { SavedSearch savedSearch = savedSearches.get(name); if (savedSearch == null) { // created case - final SavedSearch newSavedSearch = new SavedSearch(searchBar.getSearchSubsystem(), name, pattern, SearchGUI - .getSessionSubject()); + final SavedSearch newSavedSearch = new SavedSearch(searchBar.getSearchSubsystem(), name, pattern, + UserSessionManager.getSessionSubject()); searchService.createSavedSearch(newSavedSearch, new AsyncCallback<Integer>() {
public void onFailure(Throwable caught) { @@ -157,7 +157,7 @@ public class SavedSearchManager { }
private synchronized void load() { - Subject currentUser = SearchGUI.getSessionSubject(); + Subject currentUser = UserSessionManager.getSessionSubject(); SavedSearchCriteria criteria = new SavedSearchCriteria(); criteria.addFilterSubjectId(currentUser.getId()); criteria.addFilterSearchSubsystem(searchBar.getSearchSubsystem()); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java index 4456c1c..9b80112 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/rpc/MonitoringRequestCallback.java @@ -21,7 +21,6 @@ package org.rhq.enterprise.gui.coregui.client.util.rpc; import com.google.gwt.http.client.Request; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.Response; -import com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
@@ -42,11 +41,6 @@ public class MonitoringRequestCallback implements RequestCallback { this.name = name; id = RPCManager.getInstance().register(this); this.callback = callback; - if (callback instanceof RequestCallbackAdapter) { -// ((RequestCallbackAdapter)callback) - - } - }
public void onError(Request request, Throwable exception) { @@ -56,7 +50,6 @@ public class MonitoringRequestCallback implements RequestCallback {
public void onResponseReceived(Request request, Response response) { if (STATUS_CODE_OK == response.getStatusCode()) { - RPCManager.getInstance().succeedCall(this); callback.onResponseReceived(request, response); } else { @@ -67,7 +60,6 @@ public class MonitoringRequestCallback implements RequestCallback { } }
- public String getName() { return name; } diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html index fb46e97..5dd3c64 100644 --- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html +++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.html @@ -23,10 +23,9 @@ <script type="text/javascript" language="javascript" src="org.rhq.enterprise.gui.coregui.CoreGUI/org.rhq.enterprise.gui.coregui.CoreGUI.nocache.js"></script>
-<div id="Loading-Panel" style="width: 214px;height: 90px; margin-top: 300px; margin-left: auto;margin-right: auto;"> - +<div id="Loading-Panel" style="width: 214px; height: 90px; margin-top: 300px; margin-left: auto; margin-right: auto;"> <div style="text-align: center; border: 3px solid lightgray;"> - <img src="images/rhq_logo_animated_100px.gif" alt="loading" style="margin: 5px;"> + <img src="images/rhq_logo_animated_100px.gif" alt="Loading..." style="border: none;"> Loading... </div> </div>
commit 98807bb7626dd9f33fe5e60176f73e711808b973 Author: Joseph Marques joseph@redhat.com Date: Fri Sep 24 16:31:54 2010 -0400
fix login screen - disable drag/resize/move/minimize/close, better alignment
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java index 077b692..a19fcec 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java @@ -39,6 +39,7 @@ import com.smartgwt.client.widgets.form.events.SubmitValuesHandler; import com.smartgwt.client.widgets.form.fields.CanvasItem; import com.smartgwt.client.widgets.form.fields.HeaderItem; import com.smartgwt.client.widgets.form.fields.PasswordItem; +import com.smartgwt.client.widgets.form.fields.RowSpacerItem; import com.smartgwt.client.widgets.form.fields.SubmitItem; import com.smartgwt.client.widgets.form.fields.TextItem; import com.smartgwt.client.widgets.form.fields.events.KeyPressEvent; @@ -89,7 +90,8 @@ public class LoginView extends Canvas { loginShowing = true;
form = new DynamicForm(); - form.setMargin(10); + form.setMargin(25); + form.setAutoFocus(true); form.setShowErrorText(true); form.setErrorOrientation(FormErrorOrientation.BOTTOM);
@@ -98,11 +100,12 @@ public class LoginView extends Canvas { logo.setShowTitle(false);
HeaderItem header = new HeaderItem(); - header.setValue("RHQ Login"); + header.setValue("Please Login");
TextItem user = new TextItem("user", "User"); user.setRequired(true); user.setAttribute("autoComplete", "native"); + final PasswordItem password = new PasswordItem("password", "Password"); password.setRequired(true); password.setAttribute("autoComplete", "native"); @@ -126,21 +129,26 @@ public class LoginView extends Canvas { } });
- form.setFields(logo, header, user, password, loginButton); + form.setFields(logo, header, new RowSpacerItem(), user, password, loginButton);
window = new Window(); - window.setTitle("RHQ Login"); window.setWidth(400); - window.setHeight(250); + window.setHeight(275); + window.setTitle("Welcome"); + + // forced focused, static size, can't close / dismiss window.setIsModal(true); window.setShowModalMask(true); - window.setCanDragResize(true); + window.setCanDragResize(false); + window.setCanDragReposition(false); + window.setShowCloseButton(false); + window.setShowMinimizeButton(false); + window.centerInPage(); + window.addItem(form); window.show();
- form.focusInItem(user); - form.addSubmitValuesHandler(new SubmitValuesHandler() { public void onSubmitValues(SubmitValuesEvent submitValuesEvent) { if (form.validate()) {
commit 2493b2c730de20bd805f460e81f7a4e2ebfd3a97 Author: Joseph Marques joseph@redhat.com Date: Fri Sep 24 14:49:51 2010 -0400
fix error message during login
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java index 6290eb7..077b692 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/LoginView.java @@ -220,7 +220,7 @@ public class LoginView extends Canvas { if (statusCode == 401) { form.setFieldErrors("login", "The username or password provided does not match our records", true); } else { - form.setFieldErrors("login", "The server could data source is unavailable", true); + form.setFieldErrors("login", "The backend data source is unavailable", true); } loginButton.setDisabled(false); }
commit 2fd87a1f7b9ad8e113d2e4448cb14b84d76da58a Author: Joseph Marques joseph@redhat.com Date: Thu Sep 23 23:46:10 2010 -0400
do not wrap cells, the contents could be enormous
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java index d185f40..954bac7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java @@ -90,6 +90,9 @@ public class EventCompositeHistoryView extends TableSection { protected void configureTable() { ListGrid grid = getListGrid();
+ grid.setWrapCells(true); + grid.setFixedRecordHeights(true); + // getListGrid().getField("id").setWidth(60);
grid.getField("timestamp").setWidth(125);
commit 35b45657af8e90730df664c8533c9384e4210002 Author: Joseph Marques joseph@redhat.com Date: Thu Sep 23 23:36:19 2010 -0400
add headerIcon to discovery manager table view
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java index 445d1cb..e1ea25e 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/discovery/ResourceAutodiscoveryView.java @@ -24,8 +24,10 @@ import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.types.SelectionAppearance; +import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.widgets.HTMLFlow; import com.smartgwt.client.widgets.IButton; +import com.smartgwt.client.widgets.Img; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; @@ -36,6 +38,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler; import com.smartgwt.client.widgets.grid.events.SelectionEvent; import com.smartgwt.client.widgets.layout.HLayout; +import com.smartgwt.client.widgets.layout.LayoutSpacer; import com.smartgwt.client.widgets.toolbar.ToolStrip; import com.smartgwt.client.widgets.tree.TreeGrid; import com.smartgwt.client.widgets.tree.TreeGridField; @@ -59,11 +62,13 @@ public class ResourceAutodiscoveryView extends LocatableVLayout { private TreeGrid treeGrid; private ToolStrip footer; private DataSource dataSource = null; + private String headerIcon = "global/Recent_16.png";
private ResourceGWTServiceAsync resourceService = GWTServiceLookup.getResourceService();
public ResourceAutodiscoveryView(String locatorId) { super(locatorId); + setWidth100(); setHeight100(); } @@ -78,8 +83,8 @@ public class ResourceAutodiscoveryView extends LocatableVLayout { super.onInit();
if (!simple) { - - HLayout titleLayout = new HLayout(150); + Img img = new Img(headerIcon, 24, 24); + img.setPadding(4);
HTMLFlow title = new HTMLFlow(); title.setWidth100(); @@ -87,14 +92,12 @@ public class ResourceAutodiscoveryView extends LocatableVLayout { title.setContents("Discovery Manager"); title.setPadding(4); title.setStyleName("HeaderLabel"); - titleLayout.addMember(title);
DynamicForm form = new LocatableDynamicForm(this.extendLocatorId("Status")); final SelectItem statusSelectItem = new SelectItem("status", "Status"); statusSelectItem.setValueMap("New", "Ignored", "New and Ignored"); statusSelectItem.setValue("New"); form.setItems(statusSelectItem); - titleLayout.addMember(form);
statusSelectItem.addChangedHandler(new ChangedHandler() { public void onChanged(ChangedEvent changedEvent) { @@ -102,6 +105,15 @@ public class ResourceAutodiscoveryView extends LocatableVLayout { } });
+ HLayout titleLayout = new HLayout(); + titleLayout.setAutoHeight(); + titleLayout.setAlign(VerticalAlignment.BOTTOM); + + titleLayout.addMember(img); + titleLayout.addMember(title); + titleLayout.addMember(new LayoutSpacer()); + titleLayout.addMember(form); + addMember(titleLayout); }
rhq-commits@lists.fedorahosted.org