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@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."); }