modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
| 26 ++++++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleListView.java
| 28 ++++++----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/UpdateCollectionIntervalWidget.java
| 7 ++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/ResourceGroupDetailView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesView.java
| 18 +++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/ResourceDetailView.java
| 3 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesView.java
| 16 ++++-
7 files changed, 80 insertions(+), 20 deletions(-)
New commits:
commit 643ac4be5a53f4a457874b52310debf9dddc379d
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Feb 24 21:30:22 2011 -0500
disable enable/disable/set-interval controls on metric schedule views if logged-in
user does not have the required permissions
(
https://bugzilla.redhat.com/show_bug.cgi?id=536281)
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
index bb702ba..c9a4226 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
@@ -20,24 +20,47 @@ package org.rhq.enterprise.gui.coregui.client.admin.templates;
import com.smartgwt.client.data.Criteria;
+import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.criteria.MeasurementScheduleCriteria;
+import org.rhq.enterprise.gui.coregui.client.PermissionsLoadedListener;
+import org.rhq.enterprise.gui.coregui.client.PermissionsLoader;
import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementScheduleListView;
+import java.util.EnumSet;
+import java.util.Set;
+
/**
* A view for viewing and updating the default metric schedules ("metric
templates") for a particular ResourceType.
*
* @author Ian Springer
*/
public class TemplateSchedulesView extends AbstractMeasurementScheduleListView {
- private static final String TITLE = MSG.view_admin_measTemplates_title();
+ private static final String TITLE = MSG.view_admin_measTemplates_title();
private static final String[] EXCLUDED_FIELD_NAMES = new String[] {
MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_TYPE_ID };
private boolean updateExistingSchedules = true;
+ private Set<Permission> globalPermissions;
public TemplateSchedulesView(String locatorId, int resourceTypeId) {
super(locatorId, TITLE, new TemplateSchedulesDataSource(resourceTypeId),
createCriteria(resourceTypeId),
EXCLUDED_FIELD_NAMES);
+
+ this.globalPermissions = EnumSet.noneOf(Permission.class);
+ loadGlobalPermissions();
+ }
+
+ public boolean hasManageMeasurementsPermission() {
+ loadGlobalPermissions();
+ return globalPermissions.contains(Permission.MANAGE_INVENTORY);
+ }
+
+ private void loadGlobalPermissions() {
+ new PermissionsLoader().loadExplicitGlobalPermissions(new
PermissionsLoadedListener() {
+ public void onPermissionsLoaded(Set<Permission> permissions) {
+ globalPermissions = permissions;
+ }
+ });
}
private static Criteria createCriteria(int resourceTypeId) {
@@ -60,4 +83,5 @@ public class TemplateSchedulesView extends
AbstractMeasurementScheduleListView {
public void setUpdateExistingSchedules(boolean updateExistingSchedules) {
this.updateExistingSchedules = updateExistingSchedules;
}
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleListView.java
index e1479af..43f130f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleListView.java
@@ -27,10 +27,9 @@ import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import org.rhq.core.domain.criteria.MeasurementScheduleCriteria;
-import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.BooleanCellFormatter;
import org.rhq.enterprise.gui.coregui.client.components.table.Table;
-import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
+import org.rhq.enterprise.gui.coregui.client.components.table.TableAction;
/**
* A view that displays a non-paginated table of {@link
org.rhq.core.domain.measurement.MeasurementSchedule measurement
@@ -39,8 +38,10 @@ import
org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablem
* @author Ian Springer
*/
public abstract class AbstractMeasurementScheduleListView extends Table {
- private static final SortSpecifier[] SORT_SPECIFIERS = new SortSpecifier[] { new
SortSpecifier(
- MeasurementScheduleCriteria.SORT_FIELD_DISPLAY_NAME, SortDirection.ASCENDING) };
+
+ private static final SortSpecifier[] SORT_SPECIFIERS = new SortSpecifier[] {
+ new SortSpecifier(MeasurementScheduleCriteria.SORT_FIELD_DISPLAY_NAME,
SortDirection.ASCENDING)
+ };
public AbstractMeasurementScheduleListView(String locatorId, String title,
AbstractMeasurementScheduleCompositeDataSource dataSource, Criteria criteria,
String[] excludedFieldNames) {
@@ -48,6 +49,8 @@ public abstract class AbstractMeasurementScheduleListView extends Table
{
setDataSource(dataSource);
}
+ public abstract boolean hasManageMeasurementsPermission();
+
@Override
public AbstractMeasurementScheduleCompositeDataSource getDataSource() {
return (AbstractMeasurementScheduleCompositeDataSource) super.getDataSource();
@@ -68,20 +71,25 @@ public abstract class AbstractMeasurementScheduleListView extends
Table {
intervalField.setWidth("25%");
// Add action buttons and widgets.
- addTableAction(extendLocatorId("Enable"), MSG.common_button_enable(),
null, new AbstractTableAction(
- TableActionEnablement.ANY) {
+ addTableAction(extendLocatorId("Enable"), MSG.common_button_enable(),
null, new TableAction() {
+ public boolean isEnabled(ListGridRecord[] selection) {
+ return ((selection.length >= 1) &&
hasManageMeasurementsPermission());
+ }
+
public void executeAction(ListGridRecord[] selection, Object actionValue) {
getDataSource().enableSchedules(AbstractMeasurementScheduleListView.this);
}
});
- addTableAction(extendLocatorId("Disable"), MSG.common_button_disable(),
null, new AbstractTableAction(
- TableActionEnablement.ANY) {
+ addTableAction(extendLocatorId("Disable"), MSG.common_button_disable(),
null, new TableAction() {
+ public boolean isEnabled(ListGridRecord[] selection) {
+ return ((selection.length >= 1) &&
hasManageMeasurementsPermission());
+ }
+
public void executeAction(ListGridRecord[] selection, Object actionValue) {
getDataSource().disableSchedules(AbstractMeasurementScheduleListView.this);
}
});
addExtraWidget(new UpdateCollectionIntervalWidget(this.getLocatorId(), this),
true);
-
}
protected class CollectionEnabledCellFormatter extends BooleanCellFormatter {
@@ -93,6 +101,7 @@ public abstract class AbstractMeasurementScheduleListView extends Table
{
}
protected class CollectionIntervalCellFormatter implements CellFormatter {
+
public String format(Object value, ListGridRecord record, int rowNum, int colNum)
{
if (value == null) {
return MSG.view_inventory_mixed();
@@ -139,4 +148,5 @@ public abstract class AbstractMeasurementScheduleListView extends
Table {
}
}
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/UpdateCollectionIntervalWidget.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/UpdateCollectionIntervalWidget.java
index debc8be..76378f0 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/UpdateCollectionIntervalWidget.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/UpdateCollectionIntervalWidget.java
@@ -1,6 +1,6 @@
/*
* RHQ Management Platform
- * Copyright (C) 2010 Red Hat, Inc.
+ * Copyright (C) 2010-2011 Red Hat, Inc.
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
@@ -110,6 +110,11 @@ public class UpdateCollectionIntervalWidget extends LocatableHLayout
implements
}
});
+ if (!schedulesView.hasManageMeasurementsPermission()) {
+ intervalItem.setDisabled(true);
+ unitsItem.setDisabled(true);
+ }
+
this.form.setFields(intervalItem, unitsItem);
addMember(this.form);
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 fd52d17..b42297b 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
@@ -278,7 +278,7 @@ public class ResourceGroupDetailView extends
AbstractTwoLevelTabSetView<Resource
updateSubTab(this.monitoringTab, this.monitorTraits, canvas, visible, true);
visible = hasMetricsOfType(this.groupComposite, null);
- canvas = (visible) ? new
SchedulesView(this.monitorSched.extendLocatorId("View"), groupId) : null;
+ canvas = (visible) ? new
SchedulesView(this.monitorSched.extendLocatorId("View"), this.groupComposite) :
null;
updateSubTab(this.monitoringTab, this.monitorSched, canvas, visible, true);
visible = facets.contains(ResourceTypeFacet.CALL_TIME);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesView.java
index 0f59f7d..bd8d36d 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/schedules/SchedulesView.java
@@ -21,6 +21,7 @@ package
org.rhq.enterprise.gui.coregui.client.inventory.groups.detail.monitoring
import com.smartgwt.client.data.Criteria;
import org.rhq.core.domain.criteria.MeasurementScheduleCriteria;
+import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementScheduleListView;
/**
@@ -29,13 +30,21 @@ import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasuremen
* @author Ian Springer
*/
public class SchedulesView extends AbstractMeasurementScheduleListView {
- private static final String TITLE = MSG.view_group_meas_schedules_title();
+ private static final String TITLE = MSG.view_group_meas_schedules_title();
private static final String[] EXCLUDED_FIELD_NAMES = new String[] {
MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_GROUP_ID };
- public SchedulesView(String locatorId, int resourceGroupId) {
- super(locatorId, TITLE, new SchedulesDataSource(resourceGroupId),
createCriteria(resourceGroupId),
- EXCLUDED_FIELD_NAMES);
+ private ResourceGroupComposite resourceGroupComposite;
+
+ public SchedulesView(String locatorId, ResourceGroupComposite resourceGroupComposite)
{
+ super(locatorId, TITLE, new
SchedulesDataSource(resourceGroupComposite.getResourceGroup().getId()),
+ createCriteria(resourceGroupComposite.getResourceGroup().getId()),
EXCLUDED_FIELD_NAMES);
+
+ this.resourceGroupComposite = resourceGroupComposite;
+ }
+
+ public boolean hasManageMeasurementsPermission() {
+ return this.resourceGroupComposite.getResourcePermission().isMeasure();
}
private static Criteria createCriteria(int resourceGroupId) {
@@ -43,4 +52,5 @@ public class SchedulesView extends AbstractMeasurementScheduleListView
{
criteria.addCriteria(MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_GROUP_ID,
resourceGroupId);
return criteria;
}
+
}
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 e0504d6..89a87fb 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
@@ -324,7 +324,8 @@ public class ResourceDetailView extends
AbstractTwoLevelTabSetView<ResourceCompo
"/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);
+ .extendLocatorId("SchedulesView"), this.resourceComposite),
hasMetricsOfType(this.resourceComposite, null),
+ true);
visible = facets.contains(ResourceTypeFacet.CALL_TIME);
canvas = (visible) ? new
FullHTMLPane(this.monitorCallTime.extendLocatorId("View"),
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesView.java
index 813ac07..46ef463 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/schedules/SchedulesView.java
@@ -21,6 +21,7 @@ package
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.monitori
import com.smartgwt.client.data.Criteria;
import org.rhq.core.domain.criteria.MeasurementScheduleCriteria;
+import org.rhq.core.domain.resource.composite.ResourceComposite;
import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasurementScheduleListView;
/**
@@ -31,11 +32,19 @@ import
org.rhq.enterprise.gui.coregui.client.inventory.common.AbstractMeasuremen
public class SchedulesView extends AbstractMeasurementScheduleListView {
private static final String TITLE = MSG.view_resource_monitor_schedules_title();
-
private static final String[] EXCLUDED_FIELD_NAMES = new String[] {
MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_ID };
- public SchedulesView(String locatorId, int resourceId) {
- super(locatorId, TITLE, new SchedulesDataSource(resourceId),
createCriteria(resourceId), EXCLUDED_FIELD_NAMES);
+ private ResourceComposite resourceComposite;
+
+ public SchedulesView(String locatorId, ResourceComposite resourceComposite) {
+ super(locatorId, TITLE, new
SchedulesDataSource(resourceComposite.getResource().getId()),
+ createCriteria(resourceComposite.getResource().getId()),
EXCLUDED_FIELD_NAMES);
+
+ this.resourceComposite = resourceComposite;
+ }
+
+ public boolean hasManageMeasurementsPermission() {
+ return resourceComposite.getResourcePermission().isMeasure();
}
private static Criteria createCriteria(int resourceId) {
@@ -43,4 +52,5 @@ public class SchedulesView extends AbstractMeasurementScheduleListView
{
criteria.addCriteria(MeasurementScheduleCriteria.FILTER_FIELD_RESOURCE_ID,
resourceId);
return criteria;
}
+
}