modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/InitializableView.java | 7 + modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java | 45 ++-------- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersView.java | 34 +------ 4 files changed, 24 insertions(+), 66 deletions(-)
New commits: commit 4db65364eba2f3327a0d8f13c7ac079497718388 Author: Lukas Krejci lkrejci@redhat.com Date: Mon Jan 23 17:49:51 2012 +0100
[BZ 767170] - The permissions are already known, don't try to fetch them asynchronously again in the role and user views.
This simplifies the rendering of those views tremendously making them work reliably and without possible race conditions.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java index 53bd86d..7d4810b 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/AdministrationView.java @@ -117,13 +117,13 @@ public class AdministrationView extends AbstractSectionedLeftNavigationView { private NavigationSection buildSecuritySection() { NavigationItem usersItem = new NavigationItem(UsersView.VIEW_ID, "global/User_16.png", new ViewFactory() { public Canvas createView() { - return new UsersView(extendLocatorId("Users")); + return new UsersView(extendLocatorId("Users"), getGlobalPermissions().contains(Permission.MANAGE_SECURITY)); } });
NavigationItem rolesItem = new NavigationItem(RolesView.VIEW_ID, "global/Role_16.png", new ViewFactory() { public Canvas createView() { - return new RolesView(extendLocatorId("Roles")); + return new RolesView(extendLocatorId("Roles"), getGlobalPermissions().contains(Permission.MANAGE_SECURITY)); } });
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java index 3c3e91d..91f2c2f 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java @@ -20,7 +20,6 @@ package org.rhq.enterprise.gui.coregui.client.admin.roles;
import java.util.ArrayList; import java.util.List; -import java.util.Set;
import com.smartgwt.client.types.SelectionStyle; import com.smartgwt.client.widgets.Canvas; @@ -29,10 +28,7 @@ import com.smartgwt.client.widgets.grid.ListGridRecord; import com.smartgwt.client.widgets.grid.events.CellClickEvent; import com.smartgwt.client.widgets.grid.events.CellClickHandler;
-import org.rhq.core.domain.authz.Permission; import org.rhq.enterprise.gui.coregui.client.BookmarkableView; -import org.rhq.enterprise.gui.coregui.client.PermissionsLoadedListener; -import org.rhq.enterprise.gui.coregui.client.PermissionsLoader; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; import org.rhq.enterprise.gui.coregui.client.components.table.EscapedHtmlCellFormatter; import org.rhq.enterprise.gui.coregui.client.components.table.TableAction; @@ -46,7 +42,7 @@ import org.rhq.enterprise.gui.coregui.client.components.view.ViewName; * @author Greg Hinkle * @author Ian Springer */ -public class RolesView extends TableSection<RolesDataSource> implements BookmarkableView { +public class RolesView extends TableSection<RolesDataSource> {
public static final ViewName VIEW_ID = new ViewName("Roles", MSG.common_title_roles()); public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/" @@ -55,22 +51,18 @@ public class RolesView extends TableSection<RolesDataSource> implements Bookmark private static final String HEADER_ICON = "global/Role_24.png";
private boolean hasManageSecurity; - private boolean initialized;
- public RolesView(String locatorId) { + public RolesView(String locatorId, boolean hasManageSecurity) { super(locatorId, MSG.common_title_roles());
final RolesDataSource datasource = RolesDataSource.getInstance(); setDataSource(datasource); setHeaderIcon(HEADER_ICON); setEscapeHtmlInDetailsLinkColumn(true); + + this.hasManageSecurity = hasManageSecurity; } - - @Override - protected void onDraw() { - fetchManageSecurityPermissionAsync(); - } - + @Override protected void configureTable() { updateSelectionStyle(); @@ -156,31 +148,12 @@ public class RolesView extends TableSection<RolesDataSource> implements Bookmark }; }
- private void fetchManageSecurityPermissionAsync() { - new PermissionsLoader().loadExplicitGlobalPermissions(new PermissionsLoadedListener() { - public void onPermissionsLoaded(Set<Permission> permissions) { - if (permissions != null) { - hasManageSecurity = permissions.contains(Permission.MANAGE_SECURITY); - refreshTableInfo(); - } else { - hasManageSecurity = false; - } - if (!initialized) { - RolesView.super.onDraw(); - } - initialized = true; - } - }); - } - private void updateSelectionStyle() { - if (initialized) { - if (!hasManageSecurity) { - getListGrid().deselectAllRecords(); - } - SelectionStyle selectionStyle = hasManageSecurity ? getDefaultSelectionStyle() : SelectionStyle.NONE; - getListGrid().setSelectionType(selectionStyle); + if (!hasManageSecurity) { + getListGrid().deselectAllRecords(); } + SelectionStyle selectionStyle = hasManageSecurity ? getDefaultSelectionStyle() : SelectionStyle.NONE; + getListGrid().setSelectionType(selectionStyle); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersView.java index a8b35fd..18213f1 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersView.java @@ -20,7 +20,6 @@ package org.rhq.enterprise.gui.coregui.client.admin.users;
import java.util.ArrayList; import java.util.List; -import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.SelectionStyle; @@ -32,8 +31,6 @@ import com.smartgwt.client.widgets.grid.events.CellClickHandler;
import org.rhq.core.domain.authz.Permission; import org.rhq.enterprise.gui.coregui.client.CoreGUI; -import org.rhq.enterprise.gui.coregui.client.PermissionsLoadedListener; -import org.rhq.enterprise.gui.coregui.client.PermissionsLoader; import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView; import org.rhq.enterprise.gui.coregui.client.components.table.EscapedHtmlCellFormatter; import org.rhq.enterprise.gui.coregui.client.components.table.TableAction; @@ -61,9 +58,8 @@ public class UsersView extends TableSection<UsersDataSource> { private static final String HEADER_ICON = "global/User_24.png";
private boolean hasManageSecurity; - private boolean initialized;
- public UsersView(String locatorId) { + public UsersView(String locatorId, boolean hasManageSecurity) { super(locatorId, MSG.common_title_users());
final UsersDataSource dataSource = UsersDataSource.getInstance(); @@ -71,8 +67,8 @@ public class UsersView extends TableSection<UsersDataSource> { setDataSource(dataSource); setHeaderIcon(HEADER_ICON); setEscapeHtmlInDetailsLinkColumn(true); - - fetchManageSecurityPermissionAsync(); + + this.hasManageSecurity = hasManageSecurity; }
@Override @@ -101,28 +97,12 @@ public class UsersView extends TableSection<UsersDataSource> { updateSelectionStyle(); }
- private void fetchManageSecurityPermissionAsync() { - new PermissionsLoader().loadExplicitGlobalPermissions(new PermissionsLoadedListener() { - public void onPermissionsLoaded(Set<Permission> permissions) { - if (permissions != null) { - hasManageSecurity = permissions.contains(Permission.MANAGE_SECURITY); - refreshTableInfo(); - } else { - hasManageSecurity = false; - } - initialized = true; - } - }); - } - private void updateSelectionStyle() { - if (initialized) { - if (!hasManageSecurity) { - getListGrid().deselectAllRecords(); - } - SelectionStyle selectionStyle = hasManageSecurity ? getDefaultSelectionStyle() : SelectionStyle.NONE; - getListGrid().setSelectionType(selectionStyle); + if (!hasManageSecurity) { + getListGrid().deselectAllRecords(); } + SelectionStyle selectionStyle = hasManageSecurity ? getDefaultSelectionStyle() : SelectionStyle.NONE; + getListGrid().setSelectionType(selectionStyle); }
private List<ListGridField> createFields() {
commit f585a36371486dd5d2aa2639f6c17be53e33e0a1 Author: Lukas Krejci lkrejci@redhat.com Date: Mon Jan 23 17:45:46 2012 +0100
Added some clarification to the javadocs of InitializableView to lower the expectations one might have about it.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/InitializableView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/InitializableView.java index b5fc3b9..f503d99 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/InitializableView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/InitializableView.java @@ -33,7 +33,12 @@ public interface InitializableView {
/** * Return true if this widget's {@link BaseWidget#init() initialization} has completed, or false otherwise. - * + * <p> + * Don't expect this to work automagically if the result of this method is dependent on some asynchronous call. + * The consumers of this method need in that case loop and check this method periodically. If you cannot guarantee + * all the callers of this method on your instance actually do that, you can't assume that the results of + * the asynchronous call will be taken into account correctly. + * * @return true if this widget's {@link BaseWidget#init() initialization} has completed, or false otherwise */ boolean isInitialized();
rhq-commits@lists.fedorahosted.org