modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTab.java | 13
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java | 273 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTab.java | 16
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java | 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java | 51 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java | 62 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java | 78 +-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java | 2
8 files changed, 290 insertions(+), 219 deletions(-)
New commits:
commit 34952d9da9c662bc241c90011e199e74c4a931cb
Merge: d905826... 9a36c9d...
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Sep 23 10:58:11 2010 -0400
Merge branch 'master' into master-jay
commit d9058264c89ab9c489de7e698fd1af5de9245908
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Sep 23 10:56:56 2010 -0400
Added MANAGE_INVENTORY check for group membership subtab enablement
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
index c11659e..50700f2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
@@ -18,13 +18,17 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.common.detail;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Side;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.layout.Layout;
+import org.rhq.core.domain.authz.Permission;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
@@ -33,6 +37,7 @@ import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTab;
import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTabSelectedEvent;
import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTabSelectedHandler;
import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTabSet;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
/**
@@ -79,9 +84,9 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
protected abstract List<TwoLevelTab> createTabs();
- protected abstract void loadSelectedItem(int itemId, ViewPath viewPath);
+ protected abstract void loadSelectedItem(int itemId, ViewPath viewPath, Set<Permission> globalPermissions);
- protected abstract void updateTabContent(T selectedItem);
+ protected abstract void updateTabContent(T selectedItem, Set<Permission> globalPermissions);
// ---------------------------------------------------------
@@ -136,10 +141,10 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
}
}
- public void renderView(ViewPath viewPath) {
+ public void renderView(final ViewPath viewPath) {
// e.g. #Resource/10010/Summary/Overview
// ^ current path
- int id = Integer.parseInt(viewPath.getCurrent().getPath());
+ final int id = Integer.parseInt(viewPath.getCurrent().getPath());
viewPath.next();
if (!viewPath.isEnd()) {
@@ -160,8 +165,23 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
}
if (getSelectedItemId() == null || getSelectedItemId() != id) {
- // A different Resource or first load - go get data.
- loadSelectedItem(id, viewPath);
+ GWTServiceLookup.getAuthorizationService().getExplicitGlobalPermissions(
+ new AsyncCallback<Set<Permission>>() {
+ @Override
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError(
+ "Could not determine global permissions for user, defaulting to no global permissions.",
+ caught);
+ // A different Resource or first load - go get data.
+ loadSelectedItem(id, viewPath, new HashSet<Permission>());
+ }
+
+ @Override
+ public void onSuccess(Set<Permission> result) {
+ // A different Resource or first load - go get data.
+ loadSelectedItem(id, viewPath, result);
+ }
+ });
} else {
// Same Resource - just switch tabs.
selectTab(this.tabName, this.subTabName, viewPath);
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
index 17d901c..f273c40 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
@@ -178,7 +178,8 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
return tabs;
}
- protected void updateTabContent(ResourceGroupComposite groupComposite) {
+ protected void updateTabContent(ResourceGroupComposite groupComposite, Set<Permission> globalPermissions) {
+ boolean enabled;
boolean visible;
Canvas canvas;
@@ -227,9 +228,10 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
//updateSubTab(this.inventoryTab, this.inventoryConn,
// new GroupPluginConfigurationEditView(this.group.getId(), this.group.getResourceType().getId(), ConfigurationEditor.ConfigType.plugin),
// facets.contains(ResourceTypeFacet.PLUGIN_CONFIGURATION), true);
- // TODO: should require MANAGE_INVENTORY authz
- updateSubTab(this.inventoryTab, this.inventoryMembership, new ResourceGroupMembershipView(this.inventoryTab
- .extendLocatorId("MembershipView"), groupId), true, true);
+ enabled = globalPermissions.contains(Permission.MANAGE_INVENTORY);
+ canvas = (enabled) ? new ResourceGroupMembershipView(this.inventoryTab.extendLocatorId("MembershipView"),
+ groupId) : null;
+ updateSubTab(this.inventoryTab, this.inventoryMembership, canvas, true, enabled);
if (updateTab(this.operationsTab, groupCategory == GroupCategory.COMPATIBLE
&& facets.contains(ResourceTypeFacet.OPERATION), true)) {
@@ -263,7 +265,7 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
markForRedraw();
}
- protected void loadSelectedItem(final int groupId, final ViewPath viewPath) {
+ protected void loadSelectedItem(final int groupId, final ViewPath viewPath, final Set<Permission> globalPermissions) {
this.groupId = groupId;
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
@@ -279,12 +281,13 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
public void onSuccess(PageList<ResourceGroupComposite> result) {
groupComposite = result.get(0);
- loadResourceType(groupComposite, viewPath);
+ loadResourceType(groupComposite, viewPath, globalPermissions);
}
});
}
- private void loadResourceType(final ResourceGroupComposite groupComposite, final ViewPath viewPath) {
+ private void loadResourceType(final ResourceGroupComposite groupComposite, final ViewPath viewPath,
+ final Set<Permission> globalPermissions) {
final ResourceGroup group = this.groupComposite.getResourceGroup();
if (group.getGroupCategory() == GroupCategory.COMPATIBLE) {
@@ -307,14 +310,14 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
public void onSuccess(Set<Permission> result) {
ResourceGroupDetailView.this.permissions = new ResourcePermission(result);
- updateTabContent(groupComposite);
+ updateTabContent(groupComposite, globalPermissions);
selectTab(getTabName(), getSubTabName(), viewPath);
}
});
}
});
} else {
- updateTabContent(groupComposite);
+ updateTabContent(groupComposite, globalPermissions);
selectTab(getTabName(), getSubTabName(), viewPath);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index ba88b87..7236d4b 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -27,6 +27,7 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.tab.Tab;
+import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.criteria.ResourceCriteria;
import org.rhq.core.domain.measurement.DataType;
import org.rhq.core.domain.measurement.MeasurementDefinition;
@@ -189,7 +190,8 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
return new ResourceTitleBar(extendLocatorId("TitleBar"));
}
- protected void updateTabContent(ResourceComposite resourceComposite) {
+ protected void updateTabContent(ResourceComposite resourceComposite, Set<Permission> globalPermissions) {
+ boolean enabled;
boolean visible;
Canvas canvas;
@@ -201,7 +203,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
((TwoLevelTab) top).getLayout().destroyViews();
}
- ResourcePermission permissions = this.resourceComposite.getResourcePermission();
+ ResourcePermission resourcePermissions = this.resourceComposite.getResourcePermission();
Set<ResourceTypeFacet> facets = this.resourceComposite.getResourceFacets().getFacets();
updateSubTab(this.summaryTab, this.summaryOverview, new OverviewView(this.summaryTab
@@ -239,9 +241,10 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
updateSubTab(this.inventoryTab, this.inventoryConn, canvas, visible, true);
updateSubTab(this.inventoryTab, this.inventoryGroups, ResourceGroupListView.getGroupsOf(this.inventoryTab
.extendLocatorId("GroupsView"), resource.getId()), true, true);
- // TODO: authz check for this subtab: MANAGE_INVENTORY
- updateSubTab(this.inventoryTab, this.inventoryGroupMembership, new ResourceResourceGroupsView(this.inventoryTab
- .extendLocatorId("GroupMembershipView"), resourceId), true, true);
+ enabled = globalPermissions.contains(Permission.MANAGE_INVENTORY);
+ canvas = (enabled) ? new ResourceResourceGroupsView(this.inventoryTab.extendLocatorId("GroupMembershipView"),
+ resourceId) : null;
+ updateSubTab(this.inventoryTab, this.inventoryGroupMembership, canvas, true, enabled);
if (updateTab(this.operationsTab, facets.contains(ResourceTypeFacet.OPERATION), true)) {
// comment out GWT-based operation history until...
@@ -268,7 +271,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
updateSubTab(this.alertsTab, this.alertDelete, new FullHTMLPane(
"/rhq/resource/alert/listAlertDefinitions-plain.xhtml?id=" + resource.getId()), true, true);
- if (updateTab(this.configurationTab, facets.contains(ResourceTypeFacet.CONFIGURATION), permissions
+ if (updateTab(this.configurationTab, facets.contains(ResourceTypeFacet.CONFIGURATION), resourcePermissions
.isConfigureRead())) {
updateSubTab(this.configurationTab, this.configCurrent, new ResourceConfigurationEditView(this
.extendLocatorId("ResourceConfigView"), resource), true, true);
@@ -300,7 +303,8 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
return this.resourceId;
}
- protected void loadSelectedItem(final int resourceId, final ViewPath viewPath) {
+ protected void loadSelectedItem(final int resourceId, final ViewPath viewPath,
+ final Set<Permission> globalPermissions) {
this.resourceId = resourceId;
ResourceCriteria criteria = new ResourceCriteria();
@@ -323,13 +327,14 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
onFailure(new Exception("Resource with id [" + resourceId + "] does not exist."));
} else {
final ResourceComposite resourceComposite = result.get(0);
- loadResourceType(resourceComposite, viewPath);
+ loadResourceType(resourceComposite, viewPath, globalPermissions);
}
}
});
}
- private void loadResourceType(final ResourceComposite resourceComposite, final ViewPath viewPath) {
+ private void loadResourceType(final ResourceComposite resourceComposite, final ViewPath viewPath,
+ final Set<Permission> globalPermissions) {
final Resource resource = resourceComposite.getResource();
ResourceTypeRepository.Cache.getInstance().getResourceTypes(
resource.getResourceType().getId(),
@@ -341,7 +346,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
public void onTypesLoaded(ResourceType type) {
resourceComposite.getResource().setResourceType(type);
ResourceDetailView.this.resourceComposite = resourceComposite;
- updateTabContent(resourceComposite);
+ updateTabContent(resourceComposite, globalPermissions);
selectTab(getTabName(), getSubTabName(), viewPath);
}
});
commit 964d6819a63b7a44baacbc015d72e0fc9b4c588b
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Thu Sep 23 09:58:57 2010 -0400
Tab and SubTab work
- Rearranged things a bit to avoid ID conflicts/leaked widgets. Buttons
that were created but not visible (subtabs of detached tabs) were
not being destroyed in a timely manner. So, now create buttons only
when they are going to be visible. To help this I also encapsulated the
Button into the SubTab object itself.
- Added logic to not create views for subtabs that are not visible.
- Work to fix initial subtab selection.
- Work to avoid flash of buttons by hiding the detail view until after the
tabs have been updated the first time.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTab.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTab.java
index 1d6134b..e149772 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTab.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTab.java
@@ -22,6 +22,7 @@ package org.rhq.enterprise.gui.coregui.client.components.tab;
import com.smartgwt.client.widgets.Canvas;
import org.rhq.enterprise.gui.coregui.client.util.selenium.Locatable;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableButton;
/**
* Simple class to provide a SubTab a locatorId.
@@ -32,11 +33,13 @@ public class SubTab implements Locatable {
private String locatorId;
private String title;
private Canvas canvas;
+ private LocatableButton button;
public SubTab(String locatorId, String title, Canvas canvas) {
this.locatorId = locatorId;
this.title = title;
this.canvas = canvas;
+ this.button = null;
}
public String getLocatorId() {
@@ -55,9 +58,17 @@ public class SubTab implements Locatable {
this.canvas = canvas;
}
+ public LocatableButton getButton() {
+ return button;
+ }
+
+ public void setButton(LocatableButton button) {
+ this.button = button;
+ }
+
@Override
public String extendLocatorId(String extension) {
- return this.locatorId + "_" + extension;
+ return this.locatorId + "_" + extension;
}
@Override
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
index 0005436..ff78476 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/SubTabLayout.java
@@ -18,7 +18,10 @@
*/
package org.rhq.enterprise.gui.coregui.client.components.tab;
-import java.util.*;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Set;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.event.shared.HandlerRegistration;
@@ -39,15 +42,14 @@ import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
*/
public class SubTabLayout extends LocatableVLayout {
- /** maps subtab locator IDs to SubTabs */
- private Map<String, SubTab> subtabs = new LinkedHashMap<String, SubTab>();
- /** maps subtab locator IDs to subtab Buttons */
- private Map<String, Button> subTabButtons = new LinkedHashMap<String, Button>();
- /** locator IDs of subtabs that are disabled */
+ /** maps subTab locator IDs to SubTabs */
+ private Map<String, SubTab> subTabs = new LinkedHashMap<String, SubTab>();
+ /** locator IDs of subTabs that are disabled */
private Set<String> disabledSubTabs = new HashSet<String>();
private SubTab currentlyDisplayed;
private String currentlySelected;
+ private ToolStrip buttonBar;
public SubTabLayout(String locatorId) {
super(locatorId);
@@ -63,154 +65,149 @@ public class SubTabLayout extends LocatableVLayout {
setMargin(0);
setPadding(0);
- ToolStrip buttonBar = new ToolStrip();
+ buttonBar = new ToolStrip();
buttonBar.setBackgroundColor("grey");
buttonBar.setWidth100();
buttonBar.setBorder(null);
buttonBar.setMembersMargin(30);
addMember(buttonBar);
-
- int i = 0;
-
- for (final String locatorId : subtabs.keySet()) {
-
- SubTab subTab = subtabs.get(locatorId);
-
- if (currentlySelected == null) {
- currentlySelected = locatorId;
- }
-
- Button button = new LocatableButton(locatorId, subTab.getTitle());
- button.setShowRollOver(false);
- button.setActionType(SelectionType.RADIO);
- button.setRadioGroup("subtabs");
- button.setBorder(null);
- button.setAutoFit(true);
- if (disabledSubTabs.contains(locatorId)) {
- button.disable();
- } else {
- button.enable();
- }
-
- button.setBaseStyle("SubTabButton");
-
- // button.setStyleName("SubTabButton");
- // button.setStylePrimaryName("SubTabButton");
-
- button.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent clickEvent) {
- currentlySelected = locatorId;
- fireSubTabSelection();
- draw();
- }
- });
-
- subTabButtons.put(locatorId, button);
-
- buttonBar.addMember(button);
- }
-
- // Initial settings
- selectSubTabByLocatorId(currentlySelected);
}
@Override
protected void onDraw() {
super.onDraw();
- selectSubTabByLocatorId(currentlySelected);
+ if (null == currentlySelected) {
+ SubTab initial = getDefaultSubTab();
+ if (null != initial) {
+ currentlySelected = initial.getLocatorId();
+ }
+ }
+ if (null != currentlySelected) {
+ selectSubTabByLocatorId(currentlySelected);
+ }
}
- public void enableSubTab(String locatorId) {
- disabledSubTabs.remove(locatorId);
- if (subTabButtons.containsKey(locatorId)) {
- subTabButtons.get(locatorId).enable();
- markForRedraw();
+ /**
+ * Make subTab visible.
+ *
+ * @param subTab not null
+ */
+ public void showSubTab(SubTab subTab) {
+ LocatableButton button = subTab.getButton();
+ if (null == button) {
+ button = createSubTabButton(subTab);
+ buttonBar.addMember(button);
+ subTab.setButton(button);
}
+ button.show();
}
- public void disableSubTab(String locatorId) {
- disabledSubTabs.add(locatorId);
- if (subTabButtons.containsKey(locatorId)) {
- subTabButtons.get(locatorId).disable();
- markForRedraw();
+ /**
+ * Make subTab not visible.
+ *
+ * @param subTab not null
+ */
+ public void hideSubTab(SubTab subTab) {
+ Button button = subTab.getButton();
+ if (null != button) {
+ buttonBar.removeMember(button);
+ button.destroy();
+ subTab.setButton(null);
}
}
- public void updateSubTab(SubTab subTab) {
+ public boolean isSubTabVisible(SubTab subTab) {
+ return (null != subTab && null != subTab.getButton());
+ }
- // Destroy old views so they don't leak
- // TODO: You've already leaked because the subtab has already had its canvas replaced.
-// Canvas oldCanvas = subTab.getCanvas();
-// if (oldCanvas != null) {
-// oldCanvas.destroy();
-// }
+ private LocatableButton createSubTabButton(final SubTab subTab) {
+ LocatableButton button = new LocatableButton(subTab.getLocatorId(), subTab.getTitle());
+ button.setShowRollOver(false);
+ button.setActionType(SelectionType.RADIO);
+ button.setRadioGroup("subTabs");
+ button.setBorder(null);
+ button.setAutoFit(true);
- String locatorId = subTab.getLocatorId();
- this.subtabs.put(locatorId, subTab);
- if (locatorId.equals(this.currentlySelected)) {
- refresh();
+ button.setBaseStyle("SubTabButton");
+
+ // button.setStyleName("SubTabButton");
+ // button.setStylePrimaryName("SubTabButton");
+
+ button.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ SubTabLayout.this.currentlySelected = subTab.getLocatorId();
+ fireSubTabSelection();
+ draw();
+ }
+ });
+
+ return (button);
+ }
+
+ /**
+ * Ignored if not visible. Otherwise, enabled.
+ */
+ public void enableSubTab(SubTab subTab) {
+ if (isSubTabVisible(subTab)) {
+ disabledSubTabs.remove(subTab.getLocatorId());
+ subTab.getButton().enable();
+ subTab.getButton().show();
+ }
+ }
+
+ /**
+ * Ignored if not visible. Otherwise, disabled.
+ */
+ public void disableSubTab(SubTab subTab) {
+ if (isSubTabVisible(subTab)) {
+ disabledSubTabs.add(subTab.getLocatorId());
+ subTab.getButton().disable();
+ subTab.getButton().show();
}
}
- public void unregisterAllSubTabs() {
- destroyViews();
- subtabs.clear();
- markForRedraw();
+ /**
+ * @return true if not visible or disabled
+ */
+ public boolean isSubTabDisabled(SubTab subTab) {
+ return (!isSubTabVisible(subTab) || subTab.getButton().getDisabled());
}
public void registerSubTab(SubTab subTab) {
String locatorId = subTab.getLocatorId();
- if (currentlySelected == null) {
- currentlySelected = locatorId;
- }
- subtabs.put(locatorId, subTab);
- }
-
- public void setVisible(SubTab subTab, boolean visible) {
- Button button = this.subTabButtons.get(subTab.getLocatorId());
- if (visible) {
- if (!button.isVisible()) {
- button.show();
- markForRedraw();
- }
- } else {
- if (button.isVisible()) {
- button.hide();
- markForRedraw();
- }
- }
+ subTabs.put(locatorId, subTab);
}
public SubTab getDefaultSubTab() {
- // the default subtab is the first one in the set that is not disabled
- for (SubTab subtab : this.subtabs.values()) {
- if (!this.disabledSubTabs.contains(subtab.getLocatorId())) {
- return subtab;
+ // the default subTab is the first one in the set that is visible and not disabled
+ for (SubTab subTab : this.subTabs.values()) {
+ if (!isSubTabDisabled(subTab)) {
+ return subTab;
}
}
return null;
}
- public boolean selectSubTab(SubTab subtab) {
- if (subtab == null) {
- throw new IllegalArgumentException("subtab is null.");
+ public boolean selectSubTab(SubTab subTab) {
+ if (subTab == null) {
+ throw new IllegalArgumentException("subTab is null.");
}
- return selectSubTabByLocatorId(subtab.getLocatorId());
+ return selectSubTabByLocatorId(subTab.getLocatorId());
}
public boolean selectSubTabByLocatorId(String locatorId) {
boolean foundTab = false;
- for (String subtabLocatorId : this.subtabs.keySet()) {
- if (subtabLocatorId.equals(locatorId)) {
- if (this.disabledSubTabs.contains(subtabLocatorId)) {
+ for (String subTabLocatorId : this.subTabs.keySet()) {
+ if (subTabLocatorId.equals(locatorId)) {
+ if (this.disabledSubTabs.contains(subTabLocatorId)) {
// Nice try - user tried to select a disabled tab, probably by going directly to a bookmark URL.
- SubTab subtab = this.subtabs.get(subtabLocatorId);
- CoreGUI.getErrorHandler().handleError("Cannot select disabled subtab '" + subtab.getTitle() + "'.");
+ SubTab subTab = this.subTabs.get(subTabLocatorId);
+ CoreGUI.getErrorHandler().handleError("Cannot select disabled subTab '" + subTab.getTitle() + "'.");
} else {
- this.currentlySelected = subtabLocatorId;
+ this.currentlySelected = subTabLocatorId;
foundTab = true;
}
break;
@@ -225,10 +222,10 @@ public class SubTabLayout extends LocatableVLayout {
}
public SubTab getSubTabByTitle(String title) {
- for (String subtabLocatorId : this.subtabs.keySet()) {
- SubTab subtab = this.subtabs.get(subtabLocatorId);
- if (subtab.getTitle().equals(title)) {
- return subtab;
+ for (String subTabLocatorId : this.subTabs.keySet()) {
+ SubTab subTab = this.subTabs.get(subTabLocatorId);
+ if (subTab.getTitle().equals(title)) {
+ return subTab;
}
}
@@ -236,9 +233,9 @@ public class SubTabLayout extends LocatableVLayout {
}
public SubTab getSubTabByLocatorId(String locatorId) {
- for (String subtabLocatorId : this.subtabs.keySet()) {
- if (subtabLocatorId.equals(locatorId)) {
- return this.subtabs.get(subtabLocatorId);
+ for (String subTabLocatorId : this.subTabs.keySet()) {
+ if (subTabLocatorId.equals(locatorId)) {
+ return this.subTabs.get(subTabLocatorId);
}
}
@@ -246,23 +243,31 @@ public class SubTabLayout extends LocatableVLayout {
}
public boolean selectSubTabByTitle(String title) {
- SubTab subtab = getSubTabByTitle(title);
- if (subtab == null) {
+ SubTab subTab = getSubTabByTitle(title);
+ if (subTab == null) {
return false;
} else {
- if (this.disabledSubTabs.contains(subtab.getLocatorId())) {
+ if (this.disabledSubTabs.contains(subTab.getLocatorId())) {
// Nice try - user tried to select a disabled tab, probably by going directly to a bookmark URL.
- CoreGUI.getErrorHandler().handleError("Cannot select disabled subtab '" + title + "'.");
+ CoreGUI.getErrorHandler().handleError("Cannot select disabled subTab '" + title + "'.");
return false;
}
- this.currentlySelected = subtab.getLocatorId();
+ this.currentlySelected = subTab.getLocatorId();
refresh();
return true;
}
}
public SubTab getCurrentSubTab() {
- return this.subtabs.get(this.currentlySelected);
+ if (null == currentlySelected) {
+ SubTab current = getDefaultSubTab();
+ if (null != current) {
+ currentlySelected = current.getLocatorId();
+ }
+ return current;
+ }
+
+ return this.subTabs.get(this.currentlySelected);
}
// ------- Event support -------
@@ -276,34 +281,34 @@ public class SubTabLayout extends LocatableVLayout {
public void fireSubTabSelection() {
TwoLevelTabSelectedEvent event = new TwoLevelTabSelectedEvent("?", getCurrentSubTab().getTitle(), -1,
- getCurrentCanvas());
+ getCurrentCanvas());
hm.fireEvent(event);
}
public Canvas getCurrentCanvas() {
- return currentlyDisplayed != null ? currentlyDisplayed.getCanvas() : subtabs.get(currentlySelected).getCanvas();
+ return currentlyDisplayed != null ? currentlyDisplayed.getCanvas() : subTabs.get(currentlySelected).getCanvas();
}
/**
* Destroy all the currently held views so that they can be replaced with new versions
*/
public void destroyViews() {
- for (SubTab subtab : subtabs.values()) {
- if (subtab.getCanvas() != null) {
- subtab.getCanvas().destroy();
- subtab.setCanvas(null);
+ for (SubTab subTab : subTabs.values()) {
+ if (subTab.getCanvas() != null) {
+ subTab.getCanvas().destroy();
+ subTab.setCanvas(null);
}
}
}
private void refresh() {
- if (isDrawn()) {
- Button button = this.subTabButtons.get(this.currentlySelected);
+ if (isDrawn() && null != this.currentlySelected) {
+ Button button = this.subTabs.get(this.currentlySelected).getButton();
button.select();
- SubTab currentSubtab = this.subtabs.get(this.currentlySelected);
+ SubTab currentSubTab = this.subTabs.get(this.currentlySelected);
- if (this.currentlyDisplayed != null && this.currentlyDisplayed.getCanvas() != currentSubtab.getCanvas()) {
+ if (this.currentlyDisplayed != null && this.currentlyDisplayed.getCanvas() != currentSubTab.getCanvas()) {
try {
this.currentlyDisplayed.getCanvas().hide();
} catch (Exception e) {
@@ -311,7 +316,7 @@ public class SubTabLayout extends LocatableVLayout {
}
}
- Canvas canvas = currentSubtab.getCanvas();
+ Canvas canvas = currentSubTab.getCanvas();
if (canvas != null) {
if (hasMember(canvas)) {
if (!canvas.isVisible()) {
@@ -324,7 +329,7 @@ public class SubTabLayout extends LocatableVLayout {
addMember(canvas);
}
markForRedraw();
- this.currentlyDisplayed = currentSubtab;
+ this.currentlyDisplayed = currentSubTab;
}
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTab.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTab.java
index cbb6370..4468d93 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTab.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTab.java
@@ -34,10 +34,6 @@ public class TwoLevelTab extends LocatableTab {
layout = new SubTabLayout(locatorId);
}
- public void updateSubTab(SubTab subTab) {
- layout.updateSubTab(subTab);
- }
-
public void registerSubTabs(SubTab... subTabs) {
for (SubTab subTab : subTabs) {
layout.registerSubTab(subTab);
@@ -45,14 +41,18 @@ public class TwoLevelTab extends LocatableTab {
}
public void setVisible(SubTab subTab, boolean visible) {
- layout.setVisible(subTab, visible);
+ if (visible) {
+ layout.showSubTab(subTab);
+ } else {
+ layout.hideSubTab(subTab);
+ }
}
- public void setSubTabEnabled(String locatorId, boolean enabled) {
+ public void setSubTabEnabled(SubTab subTab, boolean enabled) {
if (enabled) {
- layout.enableSubTab(locatorId);
+ layout.enableSubTab(subTab);
} else {
- layout.disableSubTab(locatorId);
+ layout.disableSubTab(subTab);
}
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java
index d39efb7..d8e29b2 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/tab/TwoLevelTabSet.java
@@ -39,7 +39,7 @@ public class TwoLevelTabSet extends LocatableTabSet implements TabSelectedHandle
public void setTabs(TwoLevelTab... tabs) {
super.setTabs(tabs);
- for (TwoLevelTab tab : tabs) {
+ for (TwoLevelTab tab : tabs) {
tab.getLayout().addTwoLevelTabSelectedHandler(this);
updateTab(tab, tab.getPane());
}
@@ -71,15 +71,17 @@ public class TwoLevelTabSet extends LocatableTabSet implements TabSelectedHandle
public void onTabSelected(TabSelectedEvent tabSelectedEvent) {
TwoLevelTab tab = (TwoLevelTab) getSelectedTab();
- TwoLevelTabSelectedEvent event = new TwoLevelTabSelectedEvent(tab.getTitle(),
- tab.getLayout().getCurrentSubTab().getTitle(), tabSelectedEvent.getTabNum(),
- tab.getLayout().getCurrentCanvas());
- m.fireEvent(event);
+ SubTab currentSubTab = tab.getLayout().getCurrentSubTab();
+ if (null != currentSubTab) {
+ TwoLevelTabSelectedEvent event = new TwoLevelTabSelectedEvent(tab.getTitle(), tab.getLayout()
+ .getCurrentSubTab().getTitle(), tabSelectedEvent.getTabNum(), tab.getLayout().getCurrentCanvas());
+ m.fireEvent(event);
+ }
}
public void onTabSelected(TwoLevelTabSelectedEvent tabSelectedEvent) {
tabSelectedEvent.setTabNum(getSelectedTabNumber());
- Tab tab = getSelectedTab();
+ Tab tab = getSelectedTab();
tabSelectedEvent.setId(tab.getTitle());
m.fireEvent(tabSelectedEvent);
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
index 8f7452c..c11659e 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/detail/AbstractTwoLevelTabSetView.java
@@ -18,10 +18,13 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.common.detail;
+import java.util.List;
+
import com.google.gwt.user.client.History;
import com.smartgwt.client.types.Side;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.layout.Layout;
+
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
@@ -32,14 +35,12 @@ import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTabSelectedH
import org.rhq.enterprise.gui.coregui.client.components.tab.TwoLevelTabSet;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
-import java.util.List;
-
/**
* @author Greg Hinkle
* @author Ian Springer
*/
-public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends LocatableVLayout
- implements BookmarkableView, TwoLevelTabSelectedHandler {
+public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends LocatableVLayout implements
+ BookmarkableView, TwoLevelTabSelectedHandler {
private String baseViewPath;
private TwoLevelTabSet tabSet;
private String tabName;
@@ -81,6 +82,7 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
protected abstract void loadSelectedItem(int itemId, ViewPath viewPath);
protected abstract void updateTabContent(T selectedItem);
+
// ---------------------------------------------------------
protected U getTitleBar() {
@@ -101,13 +103,13 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
}
}
- return enabled;
+ return (visible && enabled);
}
protected void updateSubTab(TwoLevelTab tab, SubTab subTab, Canvas canvas, boolean visible, boolean enabled) {
tab.setVisible(subTab, visible);
if (visible) {
- tab.setSubTabEnabled(subTab.getLocatorId(), enabled);
+ tab.setSubTabEnabled(subTab, enabled);
if (enabled) {
subTab.setCanvas(canvas);
}
@@ -175,8 +177,7 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
*/
public void selectTab(String tabTitle, String subtabTitle, ViewPath viewPath) {
try {
- TwoLevelTab tab = (tabTitle != null) ? this.tabSet.getTabByTitle(tabTitle) :
- this.tabSet.getDefaultTab();
+ TwoLevelTab tab = (tabTitle != null) ? this.tabSet.getTabByTitle(tabTitle) : this.tabSet.getDefaultTab();
if (tab == null || tab.getDisabled()) {
CoreGUI.getErrorHandler().handleError("Invalid tab name: " + tabTitle);
// TODO: Should we fire a history event here to redirect to a valid bookmark?
@@ -221,5 +222,5 @@ public abstract class AbstractTwoLevelTabSetView<T, U extends Layout> extends Lo
public String getSubTabName() {
return subTabName;
- }
+ }
}
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
index 05590ff..17d901c 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.tab.Tab;
import org.rhq.core.domain.authz.Permission;
@@ -98,6 +99,7 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
public ResourceGroupDetailView(String locatorId) {
super(locatorId, BASE_VIEW_PATH);
+ this.hide();
}
@Override
@@ -177,6 +179,9 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
}
protected void updateTabContent(ResourceGroupComposite groupComposite) {
+ boolean visible;
+ Canvas canvas;
+
this.groupComposite = groupComposite;
ResourceGroup group = groupComposite.getResourceGroup();
int groupId = group.getId();
@@ -194,22 +199,24 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
// summaryTab.updateSubTab("Timeline", timelinePane);
// Summary tab is always visible and enabled.
updateSubTab(this.summaryTab, this.summaryOverview, new OverviewView(this.summaryTab
- .extendLocatorId("Overview"), this.groupComposite), true, true);
+ .extendLocatorId("OverviewView"), this.groupComposite), true, true);
if (updateTab(this.monitoringTab, groupCategory == GroupCategory.COMPATIBLE, true)) {
- updateSubTab(this.monitoringTab, this.monitorGraphs, new FullHTMLPane(
- "/rhq/group/monitor/graphs-plain.xhtml?groupId=" + groupId), hasMetricsOfType(this.groupComposite,
- DataType.MEASUREMENT), true);
- updateSubTab(this.monitoringTab, this.monitorTables, new FullHTMLPane(
- "/rhq/group/monitor/tables-plain.xhtml?groupId=" + groupId), hasMetricsOfType(this.groupComposite,
- DataType.MEASUREMENT), true);
- updateSubTab(this.monitoringTab, this.monitorTraits, new TraitsView(this.monitoringTab
- .extendLocatorId("TraitsView"), groupId), hasMetricsOfType(this.groupComposite, DataType.TRAIT), true);
- updateSubTab(this.monitoringTab, this.monitorSched, new SchedulesView(this.monitoringTab
- .extendLocatorId("SchedulesView"), groupId), hasMetricsOfType(this.groupComposite, null), true);
- updateSubTab(this.monitoringTab, this.monitorCallTime, new FullHTMLPane(
- "/rhq/group/monitor/response-plain.xhtml?groupId=" + groupId), facets
- .contains(ResourceTypeFacet.CALL_TIME), true);
+ visible = hasMetricsOfType(this.groupComposite, DataType.MEASUREMENT);
+ canvas = (visible) ? new FullHTMLPane("/rhq/group/monitor/graphs-plain.xhtml?groupId=" + groupId) : null;
+ updateSubTab(this.monitoringTab, this.monitorGraphs, canvas, visible, true);
+ // visible = same test as above
+ canvas = (visible) ? new FullHTMLPane("/rhq/group/monitor/tables-plain.xhtml?groupId=" + groupId) : null;
+ updateSubTab(this.monitoringTab, this.monitorTables, canvas, visible, true);
+ visible = hasMetricsOfType(this.groupComposite, DataType.TRAIT);
+ canvas = (visible) ? new TraitsView(this.monitoringTab.extendLocatorId("TraitsView"), groupId) : null;
+ updateSubTab(this.monitoringTab, this.monitorTraits, canvas, visible, true);
+ visible = hasMetricsOfType(this.groupComposite, null);
+ canvas = (visible) ? new SchedulesView(this.monitoringTab.extendLocatorId("SchedulesView"), groupId) : null;
+ updateSubTab(this.monitoringTab, this.monitorSched, canvas, visible, true);
+ visible = facets.contains(ResourceTypeFacet.CALL_TIME);
+ canvas = (visible) ? new FullHTMLPane("/rhq/group/monitor/response-plain.xhtml?groupId=" + groupId) : null;
+ updateSubTab(this.monitoringTab, this.monitorCallTime, canvas, visible, true);
// TODO (ips): Add Availability subtab.
}
@@ -220,6 +227,7 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
//updateSubTab(this.inventoryTab, this.inventoryConn,
// new GroupPluginConfigurationEditView(this.group.getId(), this.group.getResourceType().getId(), ConfigurationEditor.ConfigType.plugin),
// facets.contains(ResourceTypeFacet.PLUGIN_CONFIGURATION), true);
+ // TODO: should require MANAGE_INVENTORY authz
updateSubTab(this.inventoryTab, this.inventoryMembership, new ResourceGroupMembershipView(this.inventoryTab
.extendLocatorId("MembershipView"), groupId), true, true);
@@ -238,8 +246,8 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
"/rhq/group/alert/listGroupAlertDefinitions-plain.xhtml?groupId=" + groupId), true, true);
}
- if (updateTab(this.configurationTab, groupCategory == GroupCategory.COMPATIBLE
- && facets.contains(ResourceTypeFacet.CONFIGURATION), this.permissions.isConfigureRead())) {
+ visible = groupCategory == GroupCategory.COMPATIBLE && facets.contains(ResourceTypeFacet.CONFIGURATION);
+ if (updateTab(this.configurationTab, visible, visible && this.permissions.isConfigureRead())) {
updateSubTab(this.configurationTab, this.configCurrent, new FullHTMLPane(
"/rhq/group/configuration/viewCurrent-plain.xhtml?groupId=" + groupId), true, true);
updateSubTab(this.configurationTab, this.configHistory, new FullHTMLPane(
@@ -250,6 +258,9 @@ public class ResourceGroupDetailView extends AbstractTwoLevelTabSetView<Resource
&& facets.contains(ResourceTypeFacet.EVENT), true)) {
updateSubTab(this.eventsTab, this.eventHistory, EventCompositeHistoryView.get(groupComposite), true, true);
}
+
+ this.show();
+ markForRedraw();
}
protected void loadSelectedItem(final int groupId, final ViewPath viewPath) {
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
index 8e4e16f..ba88b87 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
@@ -24,6 +24,7 @@ import java.util.List;
import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.tab.Tab;
import org.rhq.core.domain.criteria.ResourceCriteria;
@@ -110,6 +111,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
public ResourceDetailView(String locatorId) {
super(locatorId, BASE_VIEW_PATH);
+ this.hide();
}
protected List<TwoLevelTab> createTabs() {
@@ -188,6 +190,9 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
}
protected void updateTabContent(ResourceComposite resourceComposite) {
+ boolean visible;
+ Canvas canvas;
+
this.resourceComposite = resourceComposite;
Resource resource = this.resourceComposite.getResource();
getTitleBar().setResource(resource);
@@ -205,31 +210,36 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
updateSubTab(this.summaryTab, this.summaryTimeline, new FullHTMLPane(
"/rhq/resource/summary/timeline-plain.xhtml?id=" + resource.getId()), true, true);
- updateSubTab(this.monitoringTab, this.monitorGraphs, new GraphListView(this.monitoringTab
- .extendLocatorId("GraphListView"), resource),
- hasMetricsOfType(this.resourceComposite, DataType.MEASUREMENT), true);
- updateSubTab(this.monitoringTab, this.monitorTables, new FullHTMLPane(
- "/rhq/common/monitor/tables-plain.xhtml?id=" + resource.getId()), hasMetricsOfType(this.resourceComposite,
- DataType.MEASUREMENT), true);
- updateSubTab(this.monitoringTab, this.monitorTraits, new TraitsView(this.monitoringTab
- .extendLocatorId("TraitsView"), resource.getId()),
- hasMetricsOfType(this.resourceComposite, DataType.TRAIT), true);
+ visible = hasMetricsOfType(this.resourceComposite, DataType.MEASUREMENT);
+ canvas = (visible) ? new GraphListView(this.monitoringTab.extendLocatorId("GraphListView"), resource) : null;
+ updateSubTab(this.monitoringTab, this.monitorGraphs, canvas, visible, true);
+ // visible = same test as above
+ canvas = (visible) ? new FullHTMLPane("/rhq/common/monitor/tables-plain.xhtml?id=" + resource.getId()) : null;
+ updateSubTab(this.monitoringTab, this.monitorTables, canvas, visible, true);
+ visible = hasMetricsOfType(this.resourceComposite, DataType.TRAIT);
+ canvas = (visible) ? new TraitsView(this.monitoringTab.extendLocatorId("TraitsView"), resource.getId()) : null;
+ updateSubTab(this.monitoringTab, this.monitorTraits, canvas, visible, true);
updateSubTab(this.monitoringTab, this.monitorAvail, new FullHTMLPane(
"/rhq/resource/monitor/availabilityHistory-plain.xhtml?id=" + resource.getId()), true, true);
updateSubTab(this.monitoringTab, this.monitorSched, new SchedulesView(monitoringTab
.extendLocatorId("SchedulesView"), resource.getId()), hasMetricsOfType(this.resourceComposite, null), true);
- updateSubTab(this.monitoringTab, this.monitorCallTime, new FullHTMLPane(
- "/rhq/resource/monitor/response-plain.xhtml?id=" + resource.getId()), facets
- .contains(ResourceTypeFacet.CALL_TIME), true);
+ visible = facets.contains(ResourceTypeFacet.CALL_TIME);
+ canvas = (visible) ? new FullHTMLPane("/rhq/resource/monitor/response-plain.xhtml?id=" + resource.getId())
+ : null;
+ updateSubTab(this.monitoringTab, this.monitorCallTime, canvas, visible, true);
ResourceType type = this.resourceComposite.getResource().getResourceType();
- updateSubTab(this.inventoryTab, this.inventoryChildren, ResourceSearchView.getChildrenOf(this.inventoryTab
- .extendLocatorId("ChildrenView"), resource.getId()), !type.getChildResourceTypes().isEmpty(), true);
- updateSubTab(this.inventoryTab, this.inventoryConn, new PluginConfigurationEditView(this.inventoryTab
- .extendLocatorId("PluginConfigView"), resource), facets.contains(ResourceTypeFacet.PLUGIN_CONFIGURATION),
- true);
+ visible = !type.getChildResourceTypes().isEmpty();
+ canvas = (visible) ? ResourceSearchView.getChildrenOf(this.inventoryTab.extendLocatorId("ChildrenView"),
+ resource.getId()) : null;
+ updateSubTab(this.inventoryTab, this.inventoryChildren, canvas, visible, true);
+ visible = facets.contains(ResourceTypeFacet.PLUGIN_CONFIGURATION);
+ canvas = (visible) ? new PluginConfigurationEditView(this.inventoryTab.extendLocatorId("PluginConfigView"),
+ resource) : null;
+ updateSubTab(this.inventoryTab, this.inventoryConn, canvas, visible, true);
updateSubTab(this.inventoryTab, this.inventoryGroups, ResourceGroupListView.getGroupsOf(this.inventoryTab
.extendLocatorId("GroupsView"), resource.getId()), true, true);
+ // TODO: authz check for this subtab: MANAGE_INVENTORY
updateSubTab(this.inventoryTab, this.inventoryGroupMembership, new ResourceResourceGroupsView(this.inventoryTab
.extendLocatorId("GroupMembershipView"), resourceId), true, true);
@@ -241,7 +251,7 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
// 4) user can navigate to the group operation that spawned this resource operation history, if appropriate
// note: enabled operation execution/schedules from left-nav, if it doesn't already exist
updateSubTab(this.operationsTab, this.opHistory, OperationHistoryView.getResourceHistoryView(operationsTab
- .extendLocatorId("History"), this.resourceComposite), true, true);
+ .extendLocatorId("HistoryView"), this.resourceComposite), true, true);
updateSubTab(this.operationsTab, this.opSched, new FullHTMLPane(
"/rhq/resource/operation/resourceOperationSchedules-plain.xhtml?id=" + resource.getId()), true, true);
}
@@ -254,16 +264,16 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
updateSubTab(this.alertsTab, this.alertHistory, new FullHTMLPane(
"/rhq/resource/alert/listAlertHistory-plain.xhtml?id=" + resource.getId()), true, true);
updateSubTab(this.alertsTab, this.alertDef, new ResourceAlertDefinitionsView(alertsTab
- .extendLocatorId("AlertDef"), this.resourceComposite), true, true);
+ .extendLocatorId("AlertDefView"), this.resourceComposite), true, true);
updateSubTab(this.alertsTab, this.alertDelete, new FullHTMLPane(
"/rhq/resource/alert/listAlertDefinitions-plain.xhtml?id=" + resource.getId()), true, true);
if (updateTab(this.configurationTab, facets.contains(ResourceTypeFacet.CONFIGURATION), permissions
.isConfigureRead())) {
updateSubTab(this.configurationTab, this.configCurrent, new ResourceConfigurationEditView(this
- .extendLocatorId("ResourceConfig"), resource), true, true);
+ .extendLocatorId("ResourceConfigView"), resource), true, true);
updateSubTab(this.configurationTab, this.configHistory, ConfigurationHistoryView.getHistoryOf(
- configurationTab.extendLocatorId("Hist"), resource.getId()), true, true);
+ configurationTab.extendLocatorId("HistoryView"), resource.getId()), true, true);
}
if (updateTab(this.eventsTab, facets.contains(ResourceTypeFacet.EVENT), true)) {
@@ -281,6 +291,9 @@ public class ResourceDetailView extends AbstractTwoLevelTabSetView<ResourceCompo
updateSubTab(this.contentTab, this.contentHistory, new FullHTMLPane(
"/rhq/resource/content/history-plain.xhtml?id=" + resource.getId()), true, true);
}
+
+ this.show();
+ markForRedraw();
}
public Integer getSelectedItemId() {
commit 43ce65db4af85551e98c636db80f113cb7be2d98
Author: Jay Shaughnessy <jshaughn(a)redhat.com>
Date: Tue Sep 21 18:30:53 2010 -0400
Allow Resource.explicitGroups to be passed from server to CoreGUI.
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
index 25b19b0..66a25be 100644
--- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
+++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGWTServiceImpl.java
@@ -86,7 +86,7 @@ public class ResourceGWTServiceImpl extends AbstractGWTServiceImpl implements Re
// "resourceConfigurationUpdates \n" +
// "pluginConfigurationUpdates \n" +
// "implicitGroups \n" +
- // "explicitGroups \n" +
+ "explicitGroups",
// "contentServiceRequests \n" +
// "createChildResourceRequests \n" +
// "deleteResourceRequests \n" +