modules/core/domain/src/main/java/org/rhq/core/domain/authz/Role.java
| 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/CoreGUI.java
| 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserPermissionsManager.java
| 6
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
| 14
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesDataSource.java
| 18
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java
| 21
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/templates/TemplateSchedulesView.java
| 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UserEditView.java
| 17
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersDataSource.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersView.java
| 101 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractAlertDefinitionsView.java
| 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
| 92 ++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
| 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
| 8
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
| 1
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/AbstractRecordEditor.java
| 131 +++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
| 24 -
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
| 238 +++++-----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
| 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/inventory/resource/FavoriteResourcesPortlet.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListDetailView.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementScheduleListView.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/event/EventCompositeHistoryView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsDetailView.java
| 7
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsView.java
| 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/OperationHistoryView.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBView.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
| 2
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
| 53 +-
45 files changed, 510 insertions(+), 323 deletions(-)
New commits:
commit d141aa16209e1439ba578f882ea60b09365b355e
Author: Ian Springer <ian.springer(a)redhat.com>
Date: Thu Nov 18 22:13:33 2010 -0500
fix a number of bugs in the user and role datasources and views; fix bug in
permissions manager; make id field in Role entity an int, rather than an Integer
diff --git a/modules/core/domain/src/main/java/org/rhq/core/domain/authz/Role.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/authz/Role.java
index ef58302..8bde98d 100644
--- a/modules/core/domain/src/main/java/org/rhq/core/domain/authz/Role.java
+++ b/modules/core/domain/src/main/java/org/rhq/core/domain/authz/Role.java
@@ -95,7 +95,7 @@ public class Role implements Serializable {
@Column(name = "ID", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO, generator =
"RHQ_ROLE_ID_SEQ")
@Id
- private Integer id;
+ private int id;
@Column(name = "NAME", nullable = false)
private String name;
@@ -133,11 +133,11 @@ public class Role implements Serializable {
this.name = name;
}
- public Integer getId() {
+ public int getId() {
return this.id;
}
- public void setId(Integer id) {
+ public void setId(int id) {
this.id = id;
}
@@ -296,7 +296,7 @@ public class Role implements Serializable {
@Override
public String toString() {
- return "org.rhq.core.domain.authz.Role[id=" + id + ", name="
+ name + "]";
+ return "Role[id=" + this.id + ", name=" + this.name + ",
permissions=" + this.permissions + "]";
}
@Override
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 1030227..229fedc 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
@@ -63,6 +63,7 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
* @author Ian Springer
*/
public class CoreGUI implements EntryPoint, ValueChangeHandler<String> {
+
// This must come first to ensure proper I18N class loading for dev mode
private static final Messages MSG = GWT.create(Messages.class);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserPermissionsManager.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserPermissionsManager.java
index acbb575..c26a2f4 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserPermissionsManager.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserPermissionsManager.java
@@ -84,6 +84,10 @@ public class UserPermissionsManager {
}
}
+ public Set<Permission> getGlobalPermissions() {
+ return this.globalPermissions;
+ }
+
public void loadResourcePermissions(ResourceComposite currentResource,
PermissionsLoadedListener permissionsLoadedListener) {
if ((this.currentContext != Context.RESOURCE) || (this.currentId !=
currentResource.getResource().getId())) {
@@ -199,6 +203,7 @@ public class UserPermissionsManager {
private void notifyGlobalPermissionsLoadedListener() {
if (this.globalPermissionsLoadedListener != null) {
this.globalPermissionsLoadedListener.onPermissionsLoaded(this.globalPermissions);
+ this.globalPermissionsLoadedListener = null;
}
}
@@ -243,6 +248,7 @@ public class UserPermissionsManager {
private void notifyResourcePermissionsLoadedListener() {
if (this.resourcePermissionsLoadedListener != null) {
this.resourcePermissionsLoadedListener.onPermissionsLoaded(this.resourcePermissions);
+ this.resourcePermissionsLoadedListener = null;
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
index fd14c4c..6a8adab 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
@@ -130,11 +130,6 @@ public class RoleEditView extends
AbstractRecordEditor<RolesDataSource> implemen
}
}
- protected Record createNewRecord() {
- Role newRole = new Role();
- return getDataSource().copyValues(newRole);
- }
-
@Override
protected void editRecord(Record record) {
// A user can always view their own assigned roles, but only users with
MANAGE_SECURITY can view or update
@@ -246,14 +241,15 @@ public class RoleEditView extends
AbstractRecordEditor<RolesDataSource> implemen
// Grab the currently assigned sets from each of the selectors and stick them
into the corresponding canvas
// items on the form, so when the form is saved, they'll get submitted along
with the rest of the simple fields
// to the datasource's add or update methods .
- ListGridRecord[] groupRecords =
this.groupSelector.getAssignedGrid().getSelection();
+ // TODO: Uncomment and fix the below lines.
+ /*ListGridRecord[] groupRecords =
this.groupSelector.getAssignedGrid().getRecords();
getForm().setValue(RolesDataSource.Field.RESOURCE_GROUPS, groupRecords);
- ListGridRecord[] subjectRecords =
this.subjectSelector.getAssignedGrid().getSelection();
+ ListGridRecord[] subjectRecords =
this.subjectSelector.getAssignedGrid().getRecords();
getForm().setValue(RolesDataSource.Field.SUBJECTS, subjectRecords);
- ListGridRecord[] ldapGroupRecords =
this.ldapGroupSelector.getAssignedGrid().getSelection();
- getForm().setValue(RolesDataSource.Field.LDAP_GROUPS, ldapGroupRecords);
+ ListGridRecord[] ldapGroupRecords =
this.ldapGroupSelector.getAssignedGrid().getRecords();
+ getForm().setValue(RolesDataSource.Field.LDAP_GROUPS, ldapGroupRecords);*/
// Submit the form values to the datasource.
super.save();
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesDataSource.java
index ba5f6e9..2cc5520 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesDataSource.java
@@ -66,6 +66,10 @@ public class RolesDataSource extends RPCDataSource<Role> {
public static final String LDAP_GROUPS = "ldapGroups";
}
+ public static abstract class CriteriaField {
+ public static final String SUBJECT_ID = "subjectId";
+ }
+
public static final int ID_SUPERUSER = 1;
public static final int ID_ALL_RESOURCES = 2;
@@ -102,11 +106,11 @@ public class RolesDataSource extends RPCDataSource<Role> {
idDataField.setCanEdit(false);
fields.add(idDataField);
- DataSourceTextField nameField = new DataSourceTextField(Field.NAME,
MSG.common_title_name(), 100, true);
+ DataSourceTextField nameField = createTextField(Field.NAME,
MSG.common_title_name(), 3, 100, true);
fields.add(nameField);
- DataSourceTextField descriptionField = new DataSourceTextField(Field.DESCRIPTION,
MSG
- .common_title_description(), 100, false);
+ DataSourceTextField descriptionField = createTextField(Field.DESCRIPTION,
MSG.common_title_description(), null,
+ 100, false);
fields.add(descriptionField);
DataSourceField resourceGroupsField = new DataSourceField(Field.RESOURCE_GROUPS,
FieldType.ANY, "Resource Groups");
@@ -128,7 +132,6 @@ public class RolesDataSource extends RPCDataSource<Role> {
}
public void executeFetch(final DSRequest request, final DSResponse response) {
-
RoleCriteria criteria = getFetchCriteria(request);
roleService.findRolesByCriteria(criteria, new
AsyncCallback<PageList<Role>>() {
@@ -267,8 +270,10 @@ public class RolesDataSource extends RPCDataSource<Role> {
criteria.setPageControl(getPageControl(request));
// Filtering
- criteria.addFilterId(getFilter(request, Field.ID, Integer.class));
- Integer subjectId =
request.getCriteria().getAttributeAsInt("subjectId");
+ Integer id = getFilter(request, Field.ID, Integer.class);
+ criteria.addFilterId(id);
+
+ Integer subjectId =
request.getCriteria().getAttributeAsInt(CriteriaField.SUBJECT_ID);
if (subjectId != null) {
criteria.addFilterSubjectId(subjectId);
}
@@ -282,4 +287,5 @@ public class RolesDataSource extends RPCDataSource<Role> {
return criteria;
}
+
}
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 4b40221..57b3dc8 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
@@ -18,12 +18,16 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.roles;
+import java.util.Set;
+
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import org.rhq.core.domain.authz.Permission;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
-import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
+import org.rhq.enterprise.gui.coregui.client.PermissionsLoadedListener;
+import org.rhq.enterprise.gui.coregui.client.UserPermissionsManager;
import org.rhq.enterprise.gui.coregui.client.components.table.TableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
@@ -35,7 +39,8 @@ import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
* @author Greg Hinkle
* @author Ian Springer
*/
-public class RolesView extends TableSection implements BookmarkableView {
+public class RolesView extends TableSection<RolesDataSource> implements
BookmarkableView {
+
public static final ViewName VIEW_ID = new ViewName("Roles",
MSG.view_adminSecurity_roles());
// TODO: We need a 24x24 version of the Role icon.
@@ -82,7 +87,17 @@ public class RolesView extends TableSection implements BookmarkableView
{
}
});
- addTableAction(extendLocatorId("New"), MSG.common_button_new(), new
AbstractTableAction() {
+ addTableAction(extendLocatorId("New"), MSG.common_button_new(), new
TableAction() {
+ private boolean[] hasManageSecurityPermission = new boolean[] {false};
+ public boolean isEnabled(ListGridRecord[] selection) {
+ UserPermissionsManager.getInstance().loadGlobalPermissions(new
PermissionsLoadedListener() {
+ public void onPermissionsLoaded(Set<Permission>
globalPermissions) {
+ hasManageSecurityPermission[0] =
globalPermissions.contains(Permission.MANAGE_SECURITY);
+ }
+ });
+ return hasManageSecurityPermission[0];
+ }
+
public void executeAction(ListGridRecord[] selection, Object actionValue) {
newDetails();
}
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 71f2f49..015fc6d 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
@@ -47,9 +47,10 @@ public class TemplateSchedulesView extends
AbstractMeasurementScheduleListView {
}
@Override
- protected void configureTable() {
+ protected void configureTable() {
super.configureTable();
- addExtraWidget(new UpdateExistingSchedulesWidget(this));
+
+ addExtraWidget(new UpdateExistingSchedulesWidget(this));
}
public boolean isUpdateExistingSchedules() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UserEditView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UserEditView.java
index 2f99ddf..8d40e67 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UserEditView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UserEditView.java
@@ -79,12 +79,6 @@ public class UserEditView extends
AbstractRecordEditor<UsersDataSource> {
});
}
- protected Record createNewRecord() {
- Subject newSubject = new Subject();
- newSubject.setFactive(true);
- return getDataSource().copyValues(newSubject, false);
- }
-
@Override
protected void editRecord(Record record) {
// Don't allow the rhqadmin account to be disabled.
@@ -117,6 +111,15 @@ public class UserEditView extends
AbstractRecordEditor<UsersDataSource> {
super.editRecord(record);
}
+ @Override
+ protected void editNewRecord() {
+ super.editNewRecord();
+
+ // Make sure the new user is enabled by default.
+ FormItem enabledField = getForm().getField(UsersDataSource.Field.FACTIVE);
+ enabledField.setValue(Boolean.TRUE.toString());
+ }
+
//
// In general, a user with MANAGE_SECURITY can update assigned roles, with two
exceptions:
//
@@ -193,7 +196,7 @@ public class UserEditView extends
AbstractRecordEditor<UsersDataSource> {
@Override
protected void save() {
- ListGridRecord[] roleRecords =
this.roleSelector.getAssignedGrid().getSelection();
+ ListGridRecord[] roleRecords = this.roleSelector.getAssignedGrid().getRecords();
getForm().setValue(UsersDataSource.Field.ROLES, roleRecords);
super.save();
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersDataSource.java
index c24ac5b..5f84ce5 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersDataSource.java
@@ -30,6 +30,7 @@ import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.data.fields.DataSourcePasswordField;
import com.smartgwt.client.data.fields.DataSourceTextField;
+import com.smartgwt.client.types.FieldType;
import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
import com.smartgwt.client.widgets.form.validator.MatchesFieldValidator;
import com.smartgwt.client.widgets.form.validator.RegExpValidator;
@@ -153,6 +154,9 @@ public class UsersDataSource extends RPCDataSource<Subject> {
true);
fields.add(enabledField);
+ DataSourceField rolesField = new DataSourceField(Field.ROLES, FieldType.ANY,
"Roles");
+ fields.add(rolesField);
+
return fields;
}
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 e6c73c5..57c1327 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
@@ -18,11 +18,20 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.users;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.enterprise.gui.coregui.client.UserPermissionsManager;
import org.rhq.enterprise.gui.coregui.client.admin.AdministrationView;
+import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesDataSource;
import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
@@ -30,13 +39,15 @@ import
org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
/**
- * A table that lists all users and provides the ability to view details of or delete
those users and to create new
- * users.
+ * A table that lists all users and provides the ability to view or edit details of
users, delete users, or create new
+ * users. For the logged in user to view or edit a user other than themselves, they must
possess the
+ * {@link Permission#MANAGE_SECURITY MANAGE_SECURITY} permission. Furthermore, a user
without MANAGE_SECURITY cannot
+ * update their assigned roles.
*
* @author Greg Hinkle
* @author Ian Springer
*/
-public class UsersView extends TableSection {
+public class UsersView extends TableSection<UsersDataSource> {
public static final ViewName VIEW_ID = new ViewName("Users",
MSG.view_adminSecurity_users());
public static final String VIEW_PATH = AdministrationView.VIEW_ID + "/"
@@ -55,52 +66,90 @@ public class UsersView extends TableSection {
@Override
protected void configureTable() {
- getListGrid().setUseAllDataSourceFields(false);
+ List<ListGridField> fields = createFields();
+ setListGridFields(fields.toArray(new ListGridField[fields.size()]));
+
+ addTableAction(extendLocatorId("Delete"), MSG.common_button_delete(),
getDeleteConfirmMessage(),
+ createDeleteAction());
+ addTableAction(extendLocatorId("New"), MSG.common_button_new(),
createNewAction());
+ }
+
+ private List<ListGridField> createFields() {
+ List<ListGridField> fields = new ArrayList<ListGridField>();
ListGridField nameField = new ListGridField(UsersDataSource.Field.NAME, 120);
+ fields.add(nameField);
ListGridField activeField = new ListGridField(UsersDataSource.Field.FACTIVE,
90);
+ fields.add(activeField);
ListGridField ldapField = new ListGridField(UsersDataSource.Field.LDAP, 90);
+ fields.add(ldapField);
ListGridField firstNameField = new
ListGridField(UsersDataSource.Field.FIRST_NAME, 150);
+ fields.add(firstNameField);
ListGridField lastNameField = new ListGridField(UsersDataSource.Field.LAST_NAME,
150);
+ fields.add(lastNameField);
ListGridField departmentField = new
ListGridField(UsersDataSource.Field.DEPARTMENT, 150);
+ fields.add(departmentField);
+
+ Set<Permission> globalPermissions =
UserPermissionsManager.getInstance().getGlobalPermissions();
+ if (globalPermissions.contains(Permission.MANAGE_SECURITY)) {
+ ListGridField rolesField = new ListGridField(UsersDataSource.Field.ROLES,
250);
+ rolesField.setCellFormatter(new CellFormatter() {
+ public String format(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ Record[] roleRecords =
record.getAttributeAsRecordArray(UsersDataSource.Field.ROLES);
+ StringBuilder formattedValue = new StringBuilder();
+ for (int i = 0; i < roleRecords.length; i++) {
+ Record roleRecord = roleRecords[i];
+ String roleName =
roleRecord.getAttribute(RolesDataSource.Field.NAME);
+ formattedValue.append(roleName);
+ if (i != (roleRecords.length - 1)) {
+ formattedValue.append(", ");
+ }
+ }
+ return formattedValue.toString();
+ }
+ });
+ fields.add(rolesField);
+ }
- setListGridFields(nameField, activeField, ldapField, firstNameField,
lastNameField, departmentField);
+ return fields;
+ }
- // TODO: fix msg
- addTableAction(extendLocatorId("Delete"), MSG.common_button_delete(),
getDeleteConfirmMessage(),
- new TableAction() {
- public boolean isEnabled(ListGridRecord[] selection) {
- int count = selection.length;
- if (count == 0) {
- return false;
- }
+ private TableAction createDeleteAction() {
+ return new TableAction() {
+ public boolean isEnabled(ListGridRecord[] selection) {
+ int count = selection.length;
+ if (count == 0) {
+ return false;
+ }
- for (ListGridRecord record : selection) {
- int id = record.getAttributeAsInt(UsersDataSource.Field.ID);
- if (id == UsersDataSource.ID_OVERLORD || id ==
UsersDataSource.ID_RHQADMIN) {
- // The superuser and rhqadmin users cannot be deleted.
- return false;
- }
+ for (ListGridRecord record : selection) {
+ int id = record.getAttributeAsInt(UsersDataSource.Field.ID);
+ if (id == UsersDataSource.ID_OVERLORD || id ==
UsersDataSource.ID_RHQADMIN) {
+ // The superuser and rhqadmin users cannot be deleted.
+ return false;
}
- return true;
}
+ return true;
+ }
- public void executeAction(ListGridRecord[] selection, Object actionValue)
{
- deleteSelectedRecords();
- }
- });
+ public void executeAction(ListGridRecord[] selection, Object actionValue) {
+ deleteSelectedRecords();
+ }
+ };
+ }
- addTableAction(extendLocatorId("New"), MSG.common_button_new(), new
AbstractTableAction(
+ private AbstractTableAction createNewAction() {
+ return new AbstractTableAction(
TableActionEnablement.ALWAYS) {
public void executeAction(ListGridRecord[] selection, Object actionValue) {
newDetails();
}
- });
+ };
}
public Canvas getDetailsView(int subjectId) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
index 6aacb23..9fd74a1 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/AlertHistoryView.java
@@ -126,6 +126,8 @@ public class AlertHistoryView extends TableSection {
}
setupTableInteractions();
+
+
}
private void setupTableInteractions() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractAlertDefinitionsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractAlertDefinitionsView.java
index f7870eb..491bff5 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractAlertDefinitionsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/AbstractAlertDefinitionsView.java
@@ -43,7 +43,7 @@ import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
*
* @author John Mazzitelli
*/
-public abstract class AbstractAlertDefinitionsView extends TableSection {
+public abstract class AbstractAlertDefinitionsView extends
TableSection<AbstractAlertDefinitionsDataSource> {
public AbstractAlertDefinitionsView(String locatorId, String tableTitle) {
super(locatorId, tableTitle);
@@ -51,7 +51,6 @@ public abstract class AbstractAlertDefinitionsView extends TableSection
{
@Override
protected void configureTable() {
-
ListGrid listGrid = getListGrid();
AbstractAlertDefinitionsDataSource ds = getAlertDefinitionDataSource();
@@ -98,6 +97,8 @@ public abstract class AbstractAlertDefinitionsView extends TableSection
{
refresh();
}
});
+
+
}
@Override
@@ -123,10 +124,10 @@ public abstract class AbstractAlertDefinitionsView extends
TableSection {
newAlertDef.setDeleted(false);
newAlertDef.setEnabled(true);
newAlertDef.setPriority(AlertPriority.MEDIUM);
- newAlertDef.setParentId(Integer.valueOf(0));
+ newAlertDef.setParentId(0);
newAlertDef.setConditionExpression(BooleanExpression.ANY);
newAlertDef.setWillRecover(false);
- newAlertDef.setRecoveryId(Integer.valueOf(0));
+ newAlertDef.setRecoveryId(0);
newAlertDef.setAlertDampening(new
AlertDampening(AlertDampening.Category.NONE));
newAlertDef.setNotifyFiltered(false);
newAlertDef.setControlFiltered(false);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
index d1dfadb..aa6d838 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/ConditionsEditor.java
@@ -86,63 +86,73 @@ public class ConditionsEditor extends LocatableVLayout {
protected void onInit() {
super.onInit();
- table = new Table(extendLocatorId("conditionsTable"));
- table.setShowHeader(false);
+ table = new ConditionsTable(extendLocatorId("conditionsTable"));
- final ConditionDataSource dataSource = new ConditionDataSource();
- table.setDataSource(dataSource);
+ addMember(table);
+ }
- table.addTableAction(this.extendLocatorId("add"),
MSG.common_button_add(), null, new AbstractTableAction() {
- @Override
- public void executeAction(ListGridRecord[] selection, Object actionValue) {
- final Window winModal = new LocatableWindow(ConditionsEditor.this
- .extendLocatorId("newConditionEditorWindow"));
- winModal.setTitle(MSG.view_alert_common_tab_conditions_modal_title());
- winModal.setOverflow(Overflow.VISIBLE);
- winModal.setShowMinimizeButton(false);
- winModal.setIsModal(true);
- winModal.setShowModalMask(true);
- winModal.setAutoSize(true);
- winModal.setAutoCenter(true);
- //winModal.setShowResizer(true);
- //winModal.setCanDragResize(true);
- winModal.centerInPage();
- winModal.addCloseClickHandler(new CloseClickHandler() {
- @Override
- public void onCloseClick(CloseClientEvent event) {
- winModal.markForDestroy();
- }
- });
-
- NewConditionEditor newConditionEditor = new
NewConditionEditor(extendLocatorId("newConditionEditor"),
- conditions, ConditionsEditor.this.resourceType, new Runnable() {
+ public void setEditable(boolean editable) {
+ table.setTableActionDisableOverride(!editable);
+ }
+
+ private class ConditionsTable extends Table<ConditionDataSource> {
+ private ConditionsTable(String locatorId) {
+ super(locatorId);
+
+ setShowHeader(false);
+
+ final ConditionDataSource dataSource = new ConditionDataSource();
+ setDataSource(dataSource);
+ }
+
+ @Override
+ protected void configureTable() {
+ addTableAction(this.extendLocatorId("add"), "Add", null,
new AbstractTableAction() {
+ public void executeAction(ListGridRecord[] selection, Object actionValue)
{
+ final Window winModal = new LocatableWindow(ConditionsEditor.this
+ .extendLocatorId("newConditionEditorWindow"));
+
winModal.setTitle(MSG.view_alert_common_tab_conditions_modal_title());
+ winModal.setOverflow(Overflow.VISIBLE);
+ winModal.setShowMinimizeButton(false);
+ winModal.setIsModal(true);
+ winModal.setShowModalMask(true);
+ winModal.setAutoSize(true);
+ winModal.setAutoCenter(true);
+ //winModal.setShowResizer(true);
+ //winModal.setCanDragResize(true);
+ winModal.centerInPage();
+ winModal.addCloseClickHandler(new CloseClickHandler() {
@Override
- public void run() {
+ public void onCloseClick(CloseClientEvent event) {
winModal.markForDestroy();
- table.refresh();
}
});
- winModal.addItem(newConditionEditor);
- winModal.show();
- }
+
+ NewConditionEditor newConditionEditor = new
NewConditionEditor(extendLocatorId("newConditionEditor"),
+ conditions, ConditionsEditor.this.resourceType, new Runnable() {
+ @Override
+ public void run() {
+ winModal.markForDestroy();
+ refresh();
+ }
+ });
+ winModal.addItem(newConditionEditor);
+ winModal.show();
+ }
});
+
table.addTableAction(this.extendLocatorId("delete"),
MSG.common_button_delete(), MSG
.view_alert_definitions_delete_confirm(), new
AbstractTableAction(TableActionEnablement.ANY) {
- @Override
public void executeAction(ListGridRecord[] selection, Object actionValue) {
for (ListGridRecord record : selection) {
- AlertCondition cond = dataSource.copyValues(record);
+ AlertCondition cond = getDataSource().copyValues(record);
conditions.remove(cond);
}
- table.refresh();
+ refresh();
}
});
- addMember(table);
- }
-
- public void setEditable(boolean editable) {
- table.setTableActionDisableOverride(!editable);
+ }
}
private class ConditionDataSource extends RPCDataSource<AlertCondition> {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
index c1eb705..c36e7c2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NewNotificationEditor.java
@@ -25,6 +25,7 @@ package org.rhq.enterprise.gui.coregui.client.alert.definitions;
import java.util.ArrayList;
import java.util.LinkedHashMap;
+import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
@@ -53,7 +54,7 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
public class NewNotificationEditor extends LocatableDynamicForm {
private final AlertDefinition alertDefinition; // the definition we are adding the
notification to
- private final ArrayList<AlertNotification> notifications; // if we are creating
a new notification, it gets added to this list
+ private final List<AlertNotification> notifications; // if we are creating a
new notification, it gets added to this list
private final AlertNotification notificationToEdit; // the notification that this
editor is editing (may be null)
private final Runnable closeFunction; // this is called after a button is pressed and
the editor should close
@@ -61,7 +62,7 @@ public class NewNotificationEditor extends LocatableDynamicForm {
private CanvasItem senderCanvasItem;
public NewNotificationEditor(String locatorId, AlertDefinition alertDefinition,
- ArrayList<AlertNotification> notifs, AlertNotification notifToEdit,
Runnable closeFunc) {
+ List<AlertNotification> notifs, AlertNotification notifToEdit, Runnable
closeFunc) {
super(locatorId);
this.alertDefinition = alertDefinition;
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
index f72846d..d63159b 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/alert/definitions/NotificationsAlertDefinitionForm.java
@@ -62,7 +62,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout
implement
private static final String FIELD_CONFIGURATION = "configuration";
private AlertDefinition alertDefinition;
- private ArrayList<AlertNotification> notifications;
+ private List<AlertNotification> notifications;
private boolean formBuilt = false;
@@ -233,7 +233,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout
implement
}
}
- private class NotificationTable extends Table {
+ private class NotificationTable extends Table<NotificationDataSource> {
public NotificationTable(String locatorId) {
super(locatorId);
setShowHeader(false);
@@ -258,7 +258,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout
implement
ListGrid listGrid = (ListGrid) event.getSource();
ListGridRecord[] selectedRows = listGrid.getSelection();
if (selectedRows != null && selectedRows.length == 1) {
- AlertNotification notif = ((NotificationDataSource)
getDataSource())
+ AlertNotification notif = (getDataSource())
.copyValues(selectedRows[0]);
popupNotificationEditor(notif);
}
@@ -278,7 +278,7 @@ public class NotificationsAlertDefinitionForm extends LocatableVLayout
implement
@Override
public void executeAction(ListGridRecord[] selection, Object actionValue)
{
for (ListGridRecord record : selection) {
- AlertNotification notif = ((NotificationDataSource)
getDataSource()).copyValues(record);
+ AlertNotification notif = (getDataSource()).copyValues(record);
notifications.remove(notif);
}
table.refresh();
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
index d2d2b9c..93a55a1 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/deployment/BundleDeploymentListView.java
@@ -45,7 +45,6 @@ public class BundleDeploymentListView extends Table {
@Override
protected void configureTable() {
-
getListGrid().getField("id").setWidth("60");
getListGrid().getField("name").setWidth("25%");
getListGrid().getField("name").setCellFormatter(new CellFormatter() {
@@ -77,5 +76,6 @@ public class BundleDeploymentListView extends Table {
status.setValueIconHeight(11);
status.setWidth(80);
+
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
index 82995f2..f4052f7 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/destination/BundleDestinationListView.java
@@ -75,5 +75,6 @@ public class BundleDestinationListView extends Table {
status.setValueIconHeight(11);
status.setWidth(80);
+
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
index ccc31a1..bbe68f2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/list/BundlesListView.java
@@ -133,6 +133,8 @@ public class BundlesListView extends Table {
});
}
});
+
+
}
public int getMatches() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
index 68fd97a..6e8f401 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/version/BundleVersionListView.java
@@ -49,7 +49,6 @@ public class BundleVersionListView extends Table {
@Override
protected void configureTable() {
-
getListGrid().getField("id").setWidth("60");
getListGrid().getField("name").setWidth("25%");
getListGrid().getField("name").setCellFormatter(new CellFormatter() {
@@ -66,5 +65,6 @@ public class BundleVersionListView extends Table {
getListGrid().setSelectionType(SelectionStyle.NONE);
getListGrid().setSelectionAppearance(SelectionAppearance.ROW_STYLE);
+
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/AbstractRecordEditor.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/AbstractRecordEditor.java
index f246c19..2bf795c 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/AbstractRecordEditor.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/AbstractRecordEditor.java
@@ -22,6 +22,7 @@ package org.rhq.enterprise.gui.coregui.client.components.form;
import java.util.EnumSet;
import java.util.List;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.client.History;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DSCallback;
@@ -61,9 +62,12 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
implements BookmarkableView, DetailsView {
private static final Label LOADING_LABEL = new
Label(MSG.widget_recordEditor_label_loading());
+
private static final String FIELD_ID = "id";
private static final String FIELD_NAME = "name";
+ private static final int ID_NEW = 0;
+
private int recordId;
private TitleBar titleBar;
private VLayout editCanvas;
@@ -92,6 +96,7 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
// Add title bar. We'll set the actual title later.
this.titleBar = new TitleBar(null, headerIcon);
+ this.titleBar.hide();
addMember(this.titleBar);
}
@@ -113,27 +118,34 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
* @param isReadOnly whether or not the record editor should be in read-only mode
*/
protected void init(boolean isReadOnly) {
- this.isReadOnly = isReadOnly;
- this.editCanvas = buildEditor();
- this.editCanvas.hide();
- addMember(this.editCanvas);
-
- if (this.recordId == 0) {
- editNewRecord();
+ if (this.recordId == ID_NEW && isReadOnly) {
+ Message message =
+ new Message("You do not have the permissions required to create a
new " + this.dataTypeName + ".",
+ Message.Severity.Error);
+ CoreGUI.goToView(getListViewPath(), message);
} else {
- fetchExistingRecord(this.recordId);
+ this.isReadOnly = isReadOnly;
+ this.editCanvas = buildEditor();
+ this.editCanvas.hide();
+ addMember(this.editCanvas);
+
+ if (this.recordId == ID_NEW) {
+ editNewRecord();
+
+ // Now that all the widgets have been created and initialized, make
everything visible.
+ displayForm();
+ } else {
+ fetchExistingRecord(this.recordId);
+ }
}
}
private VLayout buildEditor() {
VLayout editorVLayout = new VLayout();
- boolean isNewRecord = (this.recordId == 0);
+ boolean isNewRecord = (this.recordId == ID_NEW);
this.form = new EnhancedDynamicForm(this.getLocatorId(), this.isReadOnly,
isNewRecord);
this.form.setDataSource(this.dataSource);
- if (!isNewRecord) {
- this.form.setInitialCriteria(new Criteria(FIELD_ID,
String.valueOf(this.recordId)));
- }
List<FormItem> items = createFormItems(isNewRecord);
this.form.setItems(items.toArray(new FormItem[items.size()]));
@@ -238,6 +250,11 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
+ " cannot be saved until these values are corrected.",
Message.Severity.Warning, EnumSet.of(
Message.Option.Sticky, Message.Option.Transient));
CoreGUI.getMessageCenter().notify(message);
+ } else {
+ Message message = new Message("All fields now have valid values.
This " + this.dataTypeName
+ + " can now be saved.", Message.Severity.Info,
EnumSet.of(Message.Option.Sticky,
+ Message.Option.Transient));
+ CoreGUI.getMessageCenter().notify(message);
}
}
}
@@ -252,16 +269,30 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
if (response.getStatus() == RPCResponse.STATUS_SUCCESS) {
Record[] data = response.getData();
Record record = data[0];
+
String id = record.getAttribute(FIELD_ID);
String name = record.getAttribute(getTitleFieldName());
+
Message message;
- DSOperationType operationType = request.getOperationType();
String conciseMessage;
String detailedMessage;
+ DSOperationType operationType = request.getOperationType();
+ if (Log.isDebugEnabled()) {
+ Object dataObject = dataSource.copyValues(record);
+ if (operationType == DSOperationType.ADD) {
+ Log.debug("Created: " + dataObject);
+ } else {
+ Log.debug("Updated: " + dataObject);
+ }
+ }
switch (operationType) {
case ADD:
conciseMessage =
MSG.widget_recordEditor_info_recordCreatedConcise(dataTypeName);
detailedMessage =
MSG.widget_recordEditor_info_recordCreatedDetailed(dataTypeName, name);
+ if (CoreGUI.isDebugMode()) {
+ conciseMessage += " (" + FIELD_ID +
"=" + id + ")";
+ detailedMessage += " (" + FIELD_ID +
"=" + id + ")";
+ }
break;
case UPDATE:
conciseMessage =
MSG.widget_recordEditor_info_recordUpdatedConcise(dataTypeName);
@@ -271,50 +302,61 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
throw new IllegalStateException(
MSG.widget_recordEditor_error_unsupportedOperationType(operationType.name()));
}
- if (CoreGUI.isDebugMode()) {
- conciseMessage += " (" + FIELD_ID + "=" + id
+ ")";
- detailedMessage += " (" + FIELD_ID + "=" + id
+ ")";
- }
+
message = new Message(conciseMessage, detailedMessage);
CoreGUI.goToView(getListViewPath(), message);
+ } else if (response.getStatus() == RPCResponse.STATUS_VALIDATION_ERROR)
{
+ Message message = new Message("Operation failed - one or more
fields have invalid values.",
+ Message.Severity.Error);
+ CoreGUI.getMessageCenter().notify(message);
+ } else {
+ // assume failure
+ Message message = new Message("Operation failed - an error
occurred.", Message.Severity.Error);
+ CoreGUI.getMessageCenter().notify(message);
}
}
});
}
@SuppressWarnings("unchecked")
- protected void editRecord(final Record record) {
+ protected void editRecord(Record record) {
+ // Update the view title.
+ String recordName = record.getAttribute(getTitleFieldName());
+ String title = (this.isReadOnly) ?
MSG.widget_recordEditor_title_view(this.dataTypeName, recordName) :
+ MSG.widget_recordEditor_title_edit(this.dataTypeName, recordName);
+ this.titleBar.setTitle(title);
+
// Load the data into the form.
this.form.editRecord(record);
- // This tells form.saveData() to invoke executeUpdate() on the dataSource.
- this.form.setSaveOperationType(DSOperationType.UPDATE);
-
- // Now that all the widgets have been created and initialized, make everything
visible.
- displayForm();
+ // Perform up front validation for existing records.
+ // NOTE: We do *not* do this for new records, since we expect most of the
required fields to be blank.
+ this.form.validate();
}
- private void editNewRecord() {
+ protected void editNewRecord() {
+ // Update the view title.
this.titleBar.setTitle("New " + this.dataTypeName);
- Record record = createNewRecord();
- this.form.editRecord(record);
+ // Clear the form
+ this.form.editNewRecord();
- // This tells form.saveData() to invoke executeAdd() on the dataSource.
- this.form.setSaveOperationType(DSOperationType.ADD);
-
- // Now that all the widgets have been created and initialized, make everything
visible.
- displayForm();
+ // But make sure the value of the "id" field is set to "0",
since a value of null could cause the dataSource's
+ // copyValues(Record) impl to choke.
+ FormItem idItem = this.form.getItem(FIELD_ID);
+ if (idItem != null) {
+ idItem.setDefaultValue(ID_NEW);
+ idItem.hide();
+ }
}
private void displayForm() {
LOADING_LABEL.hide();
+ this.titleBar.show();
this.editCanvas.show();
markForRedraw();
}
- protected abstract Record createNewRecord();
-
protected void fetchExistingRecord(final int recordId) {
Criteria criteria = new Criteria();
criteria.addCriteria(FIELD_ID, recordId);
@@ -329,26 +371,15 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
throw new
IllegalStateException(MSG.widget_recordEditor_error_multipleRecords());
}
Record record = records[0];
- onExistingRecordFetched(record);
+ editRecord(record);
+
+ // Now that all the widgets have been created and initialized, make
everything visible.
+ displayForm();
}
}
});
}
- protected void onExistingRecordFetched(Record record) {
- editRecord(record);
-
-
- // Perform up front validation for existing records.
- // NOTE: We do *not* do this for new records, since we expect most of the
required fields to be blank.
- this.form.validate();
-
- String recordName = record.getAttribute(getTitleFieldName());
- String title = (this.isReadOnly) ?
MSG.widget_recordEditor_title_view(this.dataTypeName, recordName) :
- MSG.widget_recordEditor_title_edit(this.dataTypeName, recordName);
- this.titleBar.setTitle(title);
- }
-
protected String getTitleFieldName() {
return FIELD_NAME;
}
@@ -360,7 +391,7 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
protected static ListGridRecord[] toListGridRecordArray(Record[] roleRecords) {
ListGridRecord[] roleListGridRecords = new ListGridRecord[roleRecords.length];
- for (int i = 0, roleRecordsLength = roleRecords.length; i < roleRecordsLength;
i++) {
+ for (int i = ID_NEW, roleRecordsLength = roleRecords.length; i <
roleRecordsLength; i++) {
Record roleRecord = roleRecords[i];
roleListGridRecords[i] = (ListGridRecord)roleRecord;
}
@@ -368,7 +399,7 @@ public abstract class AbstractRecordEditor<DS extends
RPCDataSource> extends Loc
}
private static String capitalize(String itemTitle) {
- return Character.toUpperCase(itemTitle.charAt(0)) + itemTitle.substring(1);
+ return Character.toUpperCase(itemTitle.charAt(ID_NEW)) + itemTitle.substring(1);
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
index b013f36..496d896 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/form/EnhancedDynamicForm.java
@@ -32,6 +32,7 @@ import com.smartgwt.client.widgets.form.FormItemIfFunction;
import com.smartgwt.client.widgets.form.fields.BooleanItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.FormItemIcon;
+import com.smartgwt.client.widgets.form.fields.HiddenItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import com.smartgwt.client.widgets.form.fields.events.BlurEvent;
import com.smartgwt.client.widgets.form.fields.events.BlurHandler;
@@ -56,6 +57,9 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm;
* @author Ian Springer
*/
public class EnhancedDynamicForm extends LocatableDynamicForm {
+
+ private static final String FIELD_ID = "id";
+
private boolean isReadOnly;
private boolean isNewRecord;
@@ -85,14 +89,12 @@ public class EnhancedDynamicForm extends LocatableDynamicForm {
setHiliteRequiredFields(true);
setRequiredTitleSuffix(" <span
class='requiredFieldMarker'>*</span> :");
- // DataSource Settings
- setAutoFetchData(true);
+ // DataSource Settings
setUseAllDataSourceFields(false);
// Validation Settings
setValidateOnChange(!isNewRecord);
setStopOnError(false);
-
}
@Override
@@ -103,7 +105,7 @@ public class EnhancedDynamicForm extends LocatableDynamicForm {
List<String> togglableTextItemNames = new ArrayList<String>();
boolean hasIdField = false;
for (FormItem item : items) {
- if (item.getName().equals("id")) {
+ if (item.getName().equals(FIELD_ID)) {
hasIdField = true;
}
if (this.isReadOnly) {
@@ -199,9 +201,14 @@ public class EnhancedDynamicForm extends LocatableDynamicForm {
}
}
- if (!this.isNewRecord && !hasIdField && getDataSource() != null
&& getField("id") != null
- && CoreGUI.isDebugMode()) {
- StaticTextItem idItem = new StaticTextItem("id",
MSG.common_title_id());
+ // If the dataSource has an "id" field, make sure the form does too.
+ if (!hasIdField && getDataSource() != null &&
getDataSource().getField(FIELD_ID) != null) {
+ FormItem idItem;
+ if (this.isNewRecord || !CoreGUI.isDebugMode()) {
+ idItem = new HiddenItem(FIELD_ID);
+ } else {
+ idItem = new StaticTextItem(FIELD_ID, MSG.common_title_id());
+ }
itemsList.add(0, idItem);
}
@@ -210,7 +217,7 @@ public class EnhancedDynamicForm extends LocatableDynamicForm {
item.setValidateOnChange(true);
}
- item.setWidth("*"); // this causes a JavaScript exception ... :-(
+ //item.setWidth("*"); // this causes a JavaScript exception ...
:-(
item.setWidth(240);
}
@@ -238,4 +245,5 @@ public class EnhancedDynamicForm extends LocatableDynamicForm {
}
markForRedraw();
}
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
index 3c15857..2da98c7 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/Table.java
@@ -82,10 +82,13 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableListGrid;
import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableMenu;
/**
+ * A tabular view of set of data records from an {@link RPCDataSource}.
+ *
* @author Greg Hinkle
* @author Ian Springer
*/
-public class Table extends LocatableHLayout implements RefreshableView {
+public class Table<DS extends RPCDataSource> extends LocatableHLayout
+ implements RefreshableView {
private static final String FIELD_ID = "id";
private static final String FIELD_NAME = "name";
@@ -114,12 +117,13 @@ public class Table extends LocatableHLayout implements
RefreshableView {
private boolean autoFetchData;
private boolean flexRowDisplay = true;
- private RPCDataSource dataSource;
+ private DS dataSource;
private DoubleClickHandler doubleClickHandler;
private List<TableActionInfo> tableActions = new
ArrayList<TableActionInfo>();
private boolean tableActionDisableOverride = false;
protected List<Canvas> extraWidgets = new ArrayList<Canvas>();
+ private ToolStrip footer;
public Table(String locatorId) {
this(locatorId, null, null, null, null, true);
@@ -232,17 +236,13 @@ public class Table extends LocatableHLayout implements
RefreshableView {
}
// Title
- title = new HTMLFlow();
- setTableTitle(tableTitle);
+ this.title = new HTMLFlow();
+ setTableTitle(this.tableTitle);
if (showHeader) {
titleLayout = new HLayout();
titleLayout.setAutoHeight();
titleLayout.setAlign(VerticalAlignment.BOTTOM);
- }
-
- // Add components to the view
- if (showHeader) {
contents.addMember(titleLayout, 0);
}
@@ -253,7 +253,7 @@ public class Table extends LocatableHLayout implements RefreshableView
{
contents.addMember(listGrid);
// Footer
- ToolStrip footer = new ToolStrip();
+ this.footer = new ToolStrip();
footer.setPadding(5);
footer.setWidth100();
footer.setMembersMargin(15);
@@ -286,123 +286,137 @@ public class Table extends LocatableHLayout implements
RefreshableView {
getTableInfo().setWrap(false);
if (showHeader) {
+ drawHeader();
+ }
- for (String headerIcon : headerIcons) {
- Img img = new Img(headerIcon, 24, 24);
- img.setPadding(4);
- titleLayout.addMember(img);
- }
+ if (showFooter) {
+ drawFooter();
+ }
+ } catch (Exception e) {
+ CoreGUI.getErrorHandler().handleError("Failed to draw Table [" +
this + "].", e);
+ }
+ }
- titleLayout.addMember(title);
+ private void drawHeader() {
+ for (String headerIcon : headerIcons) {
+ Img img = new Img(headerIcon, 24, 24);
+ img.setPadding(4);
+ titleLayout.addMember(img);
+ }
- if (titleComponent != null) {
- titleLayout.addMember(new LayoutSpacer());
- titleLayout.addMember(titleComponent);
- }
+ titleLayout.addMember(title);
- }
+ if (titleComponent != null) {
+ titleLayout.addMember(new LayoutSpacer());
+ titleLayout.addMember(titleComponent);
+ }
+ }
- if (showFooter) {
+ private void drawFooter() {
+ footer.removeMembers(footer.getMembers());
- footer.removeMembers(footer.getMembers());
-
- for (final TableActionInfo tableAction : tableActions) {
-
- if (null == tableAction.getValueMap()) {
- // button action
- IButton button = new LocatableIButton(tableAction.getLocatorId(),
tableAction.getTitle());
- button.setDisabled(true);
- button.setOverflow(Overflow.VISIBLE);
- button.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent clickEvent) {
- if (tableAction.confirmMessage != null) {
-
- String message =
tableAction.confirmMessage.replaceAll("\\#", String
- .valueOf(listGrid.getSelection().length));
-
- SC.ask(message, new BooleanCallback() {
- public void execute(Boolean confirmed) {
- if (confirmed) {
-
tableAction.action.executeAction(listGrid.getSelection(), null);
- }
- }
- });
- } else {
-
tableAction.action.executeAction(listGrid.getSelection(), null);
- }
- }
- });
-
- tableAction.actionCanvas = button;
- footer.addMember(button);
-
- } else {
- // menu action
- LocatableMenu menu = new LocatableMenu(tableAction.getLocatorId()
+ "Menu");
- final Map<String, ? extends Object> menuEntries =
tableAction.getValueMap();
- for (final String key : menuEntries.keySet()) {
- MenuItem item = new MenuItem(key);
- item.addClickHandler(new
com.smartgwt.client.widgets.menu.events.ClickHandler() {
-
- @Override
- public void onClick(MenuItemClickEvent event) {
- tableAction.getAction()
- .executeAction(listGrid.getSelection(),
menuEntries.get(key));
+ for (final TableActionInfo tableAction : tableActions) {
+
+ if (null == tableAction.getValueMap()) {
+ // button action
+ IButton button = new LocatableIButton(tableAction.getLocatorId(),
tableAction.getTitle());
+ button.setDisabled(true);
+ button.setOverflow(Overflow.VISIBLE);
+ button.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ if (tableAction.confirmMessage != null) {
+
+ String message =
tableAction.confirmMessage.replaceAll("\\#", String
+ .valueOf(listGrid.getSelection().length));
+
+ SC.ask(message, new BooleanCallback() {
+ public void execute(Boolean confirmed) {
+ if (confirmed) {
+
tableAction.action.executeAction(listGrid.getSelection(), null);
+ }
}
});
- menu.addItem(item);
+ } else {
+ tableAction.action.executeAction(listGrid.getSelection(),
null);
}
-
- IMenuButton menuButton = new
LocatableIMenuButton(tableAction.getLocatorId(), tableAction
- .getTitle(), menu);
- menuButton.setDisabled(true);
- // this makes it pretty tight, but maybe better than the default,
which is pretty wide
- menuButton.setAutoFit(true);
- menuButton.setOverflow(Overflow.VISIBLE);
-
- tableAction.actionCanvas = menuButton;
- footer.addMember(menuButton);
}
- }
-
- for (Canvas extraWidgetCanvas : extraWidgets) {
- footer.addMember(extraWidgetCanvas);
- }
+ });
- footer.addMember(new LayoutSpacer());
+ tableAction.actionCanvas = button;
+ footer.addMember(button);
- if (isShowFooterRefresh()) {
- IButton refreshButton = new
LocatableIButton(extendLocatorId("Refresh"), "Refresh");
- refreshButton.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent clickEvent) {
- listGrid.invalidateCache();
+ } else {
+ // menu action
+ LocatableMenu menu = new LocatableMenu(tableAction.getLocatorId() +
"Menu");
+ final Map<String, ? extends Object> menuEntries =
tableAction.getValueMap();
+ for (final String key : menuEntries.keySet()) {
+ MenuItem item = new MenuItem(key);
+ item.addClickHandler(new
com.smartgwt.client.widgets.menu.events.ClickHandler() {
+
+ @Override
+ public void onClick(MenuItemClickEvent event) {
+ tableAction.getAction()
+ .executeAction(listGrid.getSelection(),
menuEntries.get(key));
}
});
- footer.addMember(refreshButton);
+ menu.addItem(item);
}
- footer.addMember(tableInfo);
+ IMenuButton menuButton = new
LocatableIMenuButton(tableAction.getLocatorId(), tableAction
+ .getTitle(), menu);
+ menuButton.setDisabled(true);
+ // this makes it pretty tight, but maybe better than the default, which
is pretty wide
+ menuButton.setAutoFit(true);
+ menuButton.setOverflow(Overflow.VISIBLE);
- // Manages enable/disable buttons for the grid
- listGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
- public void onSelectionChanged(SelectionEvent selectionEvent) {
- refreshTableInfo();
- }
- });
+ tableAction.actionCanvas = menuButton;
+ footer.addMember(menuButton);
+ }
+ }
- listGrid.addDataArrivedHandler(new DataArrivedHandler() {
- public void onDataArrived(DataArrivedEvent dataArrivedEvent) {
- refreshTableInfo();
- fieldSizes.clear();
- }
- });
+ for (Canvas extraWidgetCanvas : extraWidgets) {
+ footer.addMember(extraWidgetCanvas);
+ }
+
+ footer.addMember(new LayoutSpacer());
+
+ if (isShowFooterRefresh()) {
+ IButton refreshButton = new
LocatableIButton(extendLocatorId("Refresh"), "Refresh");
+ refreshButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ listGrid.invalidateCache();
+ }
+ });
+ footer.addMember(refreshButton);
+ }
- // Ensure buttons are initially set correctly.
+ footer.addMember(tableInfo);
+
+ // Manages enable/disable buttons for the grid
+ listGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
refreshTableInfo();
}
- } catch (Exception e) {
- CoreGUI.getErrorHandler().handleError("Failed to draw Table [" +
this + "].", e);
- }
+ });
+
+ listGrid.addDataArrivedHandler(new DataArrivedHandler() {
+ public void onDataArrived(DataArrivedEvent dataArrivedEvent) {
+ refreshTableInfo();
+ fieldSizes.clear();
+ }
+ });
+
+ // Ensure buttons are initially set correctly.
+ refreshTableInfo();
+ }
+
+ /**
+ * Subclasses can use this as a chance to configure the list grid after it has been
+ * created but before it has been drawn to the DOM. This is also the proper place to
add table
+ * actions so that they're rendered in the footer.
+ */
+ protected void configureTable() {
+ return;
}
public void setFilterFormItems(FormItem... formItems) {
@@ -417,15 +431,6 @@ public class Table extends LocatableHLayout implements
RefreshableView {
}
- /**
- * Overriding components can use this as a chance to configure the list grid after it
has been
- * created but before it has been drawn to the DOM. This is also the proper place to
add table
- * actions so that they're rendered in the footer.
- */
- protected void configureTable() {
-
- }
-
public String getTitle() {
return this.tableTitle;
}
@@ -499,11 +504,11 @@ public class Table extends LocatableHLayout implements
RefreshableView {
title.markForRedraw();
}
- public RPCDataSource getDataSource() {
+ public DS getDataSource() {
return dataSource;
}
- public void setDataSource(RPCDataSource dataSource) {
+ public void setDataSource(DS dataSource) {
this.dataSource = dataSource;
}
@@ -771,6 +776,7 @@ public class Table extends LocatableHLayout implements RefreshableView
{
LinkedHashMap<String, ? extends Object> valueMap, TableAction action)
{
this.locatorId = locatorId;
this.title = title;
+ this.confirmMessage = confirmMessage;
this.valueMap = valueMap;
this.action = action;
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
index bf8bb55..1fc4fcd 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/table/TableSection.java
@@ -26,6 +26,7 @@ import com.google.gwt.user.client.History;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.SortSpecifier;
import com.smartgwt.client.types.AnimationEffect;
+import com.smartgwt.client.types.VerticalAlignment;
import com.smartgwt.client.widgets.AnimationCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.ListGridRecord;
@@ -38,12 +39,13 @@ import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.DetailsView;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.buttons.BackButton;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
/**
* @author Greg Hinkle
* @author John Mazzitelli
*/
-public abstract class TableSection extends Table implements BookmarkableView {
+public abstract class TableSection<DS extends RPCDataSource> extends
Table<DS> implements BookmarkableView {
private VLayout detailsHolder;
private Canvas detailsView;
@@ -85,9 +87,10 @@ public abstract class TableSection extends Table implements
BookmarkableView {
super.onInit();
detailsHolder = new VLayout();
+ detailsHolder.setAlign(VerticalAlignment.TOP);
//detailsHolder.setWidth100();
//detailsHolder.setHeight100();
- detailsHolder.setMargin(5);
+ detailsHolder.setMargin(4);
detailsHolder.hide();
addMember(detailsHolder);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
index e8c6084..9baf529 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/DashboardsView.java
@@ -27,7 +27,6 @@ import java.util.List;
import java.util.Map;
import com.allen_sauer.gwt.log.client.Log;
-import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Overflow;
@@ -49,7 +48,6 @@ import org.rhq.core.domain.dashboard.Dashboard;
import org.rhq.core.domain.dashboard.DashboardPortlet;
import org.rhq.enterprise.gui.coregui.client.BookmarkableView;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
-import org.rhq.enterprise.gui.coregui.client.Messages;
import org.rhq.enterprise.gui.coregui.client.ViewPath;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
import
org.rhq.enterprise.gui.coregui.client.dashboard.portlets.inventory.queue.AutodiscoveryPortlet;
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 8cfdde1..97b48cc 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
@@ -61,8 +61,6 @@ public class FavoriteResourcesPortlet extends ResourceSearchView
implements Port
@Override
protected void configureTable() {
- super.configureTable();
-
Set<Integer> favoriteIds =
UserSessionManager.getUserPreferences().getFavoriteResources();
Integer[] favArray = favoriteIds.toArray(new Integer[favoriteIds.size()]);
@@ -85,6 +83,7 @@ public class FavoriteResourcesPortlet extends ResourceSearchView
implements Port
}
});
+ super.configureTable();
}
public void configure(PortletWindow portletWindow, DashboardPortlet storedPortlet) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
index a582132..005c2be 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/dashboard/portlets/recent/problems/ProblemResourcesPortlet.java
@@ -99,6 +99,8 @@ public class ProblemResourcesPortlet extends Table implements
CustomSettingsPort
listGrid.setWrapCells(true);
addExtraWidget(new TimeRange(this.getLocatorId(), this));
}
+
+
}
@Override
@@ -268,7 +270,7 @@ public class ProblemResourcesPortlet extends Table implements
CustomSettingsPort
timeRange = new String[] {
MeasurementUtility.getDateTimeFormatter().format(new Date(begin)),
MeasurementUtility.getDateTimeFormatter().format(new Date(end)) };
}
- for (Canvas extraWidget : extraWidgets) {
+ for (Object extraWidget : extraWidgets) {
if (extraWidget instanceof TableWidget) {
((TableWidget) extraWidget).refresh(getListGrid());
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListDetailView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListDetailView.java
index 9530979..b410a80 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListDetailView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListDetailView.java
@@ -56,9 +56,7 @@ public abstract class AbstractMeasurementDataTraitListDetailView extends
Table {
}
@Override
- protected void configureTable() {
- super.configureTable();
-
+ protected void configureTable() {
ListGrid listGrid = getListGrid();
listGrid.setSelectionType(SelectionStyle.NONE);
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListView.java
index 88918bb..c5cc4e2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/common/AbstractMeasurementDataTraitListView.java
@@ -57,8 +57,6 @@ public abstract class AbstractMeasurementDataTraitListView extends
TableSection
@Override
protected void configureTable() {
- super.configureTable();
-
ListGrid listGrid = getListGrid();
listGrid.setSelectionType(SelectionStyle.SINGLE);
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 8413cc1..0d3e524 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
@@ -54,7 +54,6 @@ public abstract class AbstractMeasurementScheduleListView extends Table
{
}
protected void configureTable() {
-
ListGrid listGrid = getListGrid();
// Set widths and cell formatters on the fields.
@@ -82,6 +81,8 @@ public abstract class AbstractMeasurementScheduleListView extends Table
{
}
});
addExtraWidget(new UpdateCollectionIntervalWidget(this.getLocatorId(), this));
+
+
}
protected class CollectionEnabledCellFormatter extends BooleanCellFormatter {
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 8f2e10c..3434179 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
@@ -120,6 +120,8 @@ public class EventCompositeHistoryView extends TableSection {
setListGridFields(timestampField, severityField, detailsField, sourceField);
setupTableInteractions();
+
+
}
private void setupTableInteractions() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
index 7780095..0ecdbd2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
@@ -138,6 +138,8 @@ public class ResourceGroupListView extends Table {
CoreGUI.goToView("ResourceGroup/" +
event.getRecord().getAttribute("id"));
}
});
+
+
}
// -------- Static Utility loaders ------------
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java
index b734425..3ea5d49 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java
@@ -57,7 +57,6 @@ public class GroupDefinitionListView extends TableSection {
@Override
protected void configureTable() {
-
ListGridField idField = new ListGridField("id", MSG.common_title_id(),
50);
ListGridField nameField = new ListGridField("name",
MSG.common_title_name(), 150);
ListGridField descriptionField = new ListGridField("description",
MSG.common_title_description());
@@ -144,6 +143,8 @@ public class GroupDefinitionListView extends TableSection {
});
}
});
+
+
}
@Override
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
index 547af2d..32f363f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationMembers.java
@@ -168,6 +168,8 @@ public class HistoryGroupPluginConfigurationMembers extends
LocatableVLayout {
listGrid.setFields(fieldResource, fieldDateCreated, fieldLastUpdated,
fieldUser, fieldStatus);
listGrid.setLinkTextProperty("resourceName");
+
+
}
private String getStatusHtmlString(Record record) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
index a3e4b63..4639767 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/inventory/HistoryGroupPluginConfigurationTable.java
@@ -200,6 +200,8 @@ public class HistoryGroupPluginConfigurationTable extends Table {
+ "/" + selection[0].getAttribute("id") +
"/Members");
}
});
+
+
}
private String getStatusHtmlString(Record record) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
index 46ed7ad..3c7f368 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsDetailView.java
@@ -44,6 +44,8 @@ public class TraitsDetailView extends
AbstractMeasurementDataTraitListDetailView
ListGridField resourceNameField =
listGrid.getField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME);
resourceNameField.setWidth("20%");
resourceNameField.setCanGroupBy(true);
+
+
}
private static Criteria createCriteria(int groupId, int definitionId) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
index d35c6e7..f11c678 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/detail/monitoring/traits/TraitsView.java
@@ -54,6 +54,8 @@ public class TraitsView extends AbstractMeasurementDataTraitListView {
ListGridField resourceNameField =
listGrid.getField(MeasurementDataTraitCriteria.SORT_FIELD_RESOURCE_NAME);
resourceNameField.setWidth("20%");
resourceNameField.setCanGroupBy(true);
+
+
}
@Override
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
index d3e4922..0c4df49 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceCompositeSearchView.java
@@ -50,9 +50,6 @@ public class ResourceCompositeSearchView extends ResourceSearchView {
@Override
protected void configureTable() {
-
- super.configureTable();
-
addTableAction(extendLocatorId("Delete"), MSG.common_button_delete(),
MSG
.view_inventory_resources_deleteConfirm(), new
AbstractTableAction(TableActionEnablement.ANY) {
@@ -138,6 +135,7 @@ public class ResourceCompositeSearchView extends ResourceSearchView {
}
+ super.configureTable();
}
public ResourceComposite getParentResourceComposite() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
index 078461f..4402029 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java
@@ -114,7 +114,6 @@ public class ResourceSearchView extends Table {
@Override
protected void configureTable() {
-
ListGridField iconField = new ListGridField("icon",
MSG.common_title_icon(), 40);
iconField.setType(ListGridFieldType.IMAGE);
iconField.setImageURLPrefix("types/");
@@ -181,6 +180,8 @@ public class ResourceSearchView extends Table {
}
}
});*/
+
+
}
public int getMatches() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
index 767b151..6d3d59f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
@@ -75,8 +75,6 @@ public class ConfigurationHistoryView extends TableSection {
@Override
protected void configureTable() {
- super.configureTable();
-
List<ListGridField> fields = new ArrayList<ListGridField>();
ListGridField idField = new
ListGridField(ConfigurationHistoryDataSource.Field.ID, 60);
@@ -154,6 +152,7 @@ public class ConfigurationHistoryView extends TableSection {
}
});
+
}
@Override
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsDetailView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsDetailView.java
index da87700..bac2d47 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsDetailView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsDetailView.java
@@ -41,4 +41,11 @@ public class TraitsDetailView extends
AbstractMeasurementDataTraitListDetailView
return criteria;
}
+
+ @Override
+ protected void configureTable() {
+ super.configureTable();
+
+
+ }
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsView.java
index 0d3b161..513fee8 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/monitoring/traits/TraitsView.java
@@ -42,6 +42,11 @@ public class TraitsView extends AbstractMeasurementDataTraitListView {
return new TraitsDetailView(extendLocatorId("Detail"), this.resourceId,
definitionId);
}
+ @Override
+ protected void configureTable() {
+
+ }
+
private static Criteria createCriteria(int resourceId) {
Criteria criteria = new Criteria();
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/OperationHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/OperationHistoryView.java
index 3b7accc..48cf7e9 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/OperationHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/operation/OperationHistoryView.java
@@ -73,7 +73,6 @@ public class OperationHistoryView extends TableSection {
@Override
protected void configureTable() {
-
getListGrid().getField(OperationHistoryDataSource.Field.ID).setWidth(40);
getListGrid().getField(OperationHistoryDataSource.Field.OPERATION_NAME).setWidth("*");
getListGrid().getField(OperationHistoryDataSource.Field.STATUS).setWidth(100);
@@ -139,6 +138,7 @@ public class OperationHistoryView extends TableSection {
addExtraWidget(operationsButton);
}
+
}
@Override
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBView.java
index e70a673..a8a7f6f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/report/measurement/MeasurementOOBView.java
@@ -50,5 +50,8 @@ public class MeasurementOOBView extends Table {
return "<a href=\"#Resource/" +
listGridRecord.getAttribute("resourceId") + "\">" + o +
"</a>";
}
});
+
+
}
+
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
index 9f8b723..c2b1efd 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
@@ -482,7 +482,7 @@ public abstract class RPCDataSource<T> extends DataSource {
}
}
- Log.debug("Result = " + result);
+ Log.debug("Result: " + paramName + "=[" + result +
"]");
return result;
}
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
index f1321b3..80fc211 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/auth/SubjectManagerBean.java
@@ -191,31 +191,50 @@ public class SubjectManagerBean implements SubjectManagerLocal,
SubjectManagerRe
+ subjectToModify.getName() + "].");
}
- if (!subjectToModify.getFactive() &&
authorizationManager.isSystemSuperuser(subjectToModify)) {
+ boolean subjectToModifyIsSystemSuperuser =
authorizationManager.isSystemSuperuser(subjectToModify);
+ if (!subjectToModify.getFactive() && subjectToModifyIsSystemSuperuser) {
throw new PermissionException("You cannot disable the system user
[" + subjectToModify.getName()
+ "].");
}
- if (!isSecurityManager) {
- RoleCriteria subjectRolesCriteria = new RoleCriteria();
- subjectRolesCriteria.addFilterSubjectId(subjectToModify.getId());
- PageList<Role> currentRoles = roleManager.findRolesByCriteria(whoami,
subjectRolesCriteria);
- Set<Role> newRoles = subjectToModify.getRoles();
- if (newRoles == null) {
- newRoles = Collections.emptySet();
+ RoleCriteria subjectRolesCriteria = new RoleCriteria();
+ subjectRolesCriteria.addFilterSubjectId(subjectToModify.getId());
+ PageList<Role> currentRoles = roleManager.findRolesByCriteria(whoami,
subjectRolesCriteria);
+ Set<Role> newRoles = subjectToModify.getRoles();
+ if (newRoles == null) {
+ newRoles = Collections.emptySet();
+ }
+ boolean rolesModified = !(currentRoles.containsAll(newRoles) &&
newRoles.containsAll(currentRoles));
+
+ RoleCriteria subjectLdapRolesCriteria = new RoleCriteria();
+ subjectLdapRolesCriteria.addFilterLdapSubjectId(subjectToModify.getId());
+ PageList<Role> currentLdapRoles = roleManager.findRolesByCriteria(whoami,
subjectLdapRolesCriteria);
+ Set<Role> newLdapRoles = subjectToModify.getLdapRoles();
+ if (newLdapRoles == null) {
+ newLdapRoles = Collections.emptySet();
+ }
+ boolean ldapRolesModified =
+ !(currentLdapRoles.containsAll(newLdapRoles) &&
newLdapRoles.containsAll(currentLdapRoles));
+
+ if (isSecurityManager) {
+ if (subjectToModifyIsSystemSuperuser) {
+ if (rolesModified) {
+ throw new PermissionException("You cannot alter the roles for
user [" + subjectToModify.getName()
+ + "] - roles are fixed for this user");
+ }
+
+ if (ldapRolesModified) {
+ throw new PermissionException("You cannot alter the LDAP roles
for user [" + subjectToModify.getName()
+ + "] - LDAP roles are fixed for this user");
+ }
}
- if (!(currentRoles.containsAll(newRoles) &&
newRoles.containsAll(currentRoles))) {
+ } else {
+ if (rolesModified) {
throw new PermissionException("You cannot change the roles assigned
to [" + subjectToModify.getName()
+ "] - only a user with the MANAGE_SECURITY permission can do
so.");
}
- RoleCriteria subjectLdapRolesCriteria = new RoleCriteria();
- subjectLdapRolesCriteria.addFilterLdapSubjectId(subjectToModify.getId());
- PageList<Role> currentLdapRoles =
roleManager.findRolesByCriteria(whoami, subjectLdapRolesCriteria);
- Set<Role> newLdapRoles = subjectToModify.getLdapRoles();
- if (newLdapRoles == null) {
- newLdapRoles = Collections.emptySet();
- }
- if (!(currentLdapRoles.containsAll(newLdapRoles) &&
newLdapRoles.containsAll(currentLdapRoles))) {
+
+ if (ldapRolesModified) {
throw new PermissionException("You cannot change the LDAP roles
assigned to [" + subjectToModify.getName()
+ "] - only a user with the MANAGE_SECURITY permission can do
so.");
}