modules/core/domain/src/main/java/org/rhq/core/domain/authz/Role.java
| 2
modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupDefinitionCriteria.java
| 108 +++++
modules/enterprise/gui/coregui/pom.xml
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Breadcrumb.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
| 36 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/PermissionEditorView.java
| 38 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleEditView.java
| 79 +++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleGroupsEditorItem.java
| 4
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesDataSource.java
| 137 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java
| 40 +
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/SubjectRolesEditorItem.java
| 126 ++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UserEditView.java
| 101 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersDataSource.java
| 203 +++++++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/UsersView.java
| 87 ++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/SimpleCollapsiblePanel.java
| 2
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
| 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
| 182 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
| 9
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionDataSource.java
| 114 +++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java
| 173 ++++++++
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourcesView.java
| 20
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java
| 20
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
| 12
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
| 15
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
| 14
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
| 19
modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerLocal.java
| 3
29 files changed, 1438 insertions(+), 121 deletions(-)
New commits:
commit 5c46dee953d93d777bac6ce77ff2b6a9e0eda0f6
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Tue Mar 2 10:51:14 2010 -0500
Moving to avoid conflict
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Breadcrumb.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Breadcrumb.java
index 3abac57..1e647c5 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Breadcrumb.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Breadcrumb.java
@@ -107,7 +107,7 @@ public class Breadcrumb {
}
} else {
first = false;
- }
+ }
displayName.append(currentChar);
}
return displayName.toString();
commit 698cc9d42a499d76f4c0b54ffe51d4bc77c6557e
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Tue Mar 2 10:43:00 2010 -0500
Group Definition list view, datasource and server side access
Subject create, update, delete *
Role create, update, delete *
* Not completed. Still working on grid to grid copy/drag to assign component
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 482fa08..039f356 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
@@ -137,7 +137,7 @@ public class Role implements Serializable {
@OneToMany(mappedBy = "role", cascade = javax.persistence.CascadeType.ALL)
private Set<RoleNotification> roleNotifications = new
HashSet<RoleNotification>();
- protected Role() {
+ public Role() {
fsystem = Boolean.FALSE;
}
diff --git a/modules/enterprise/gui/coregui/pom.xml
b/modules/enterprise/gui/coregui/pom.xml
index 0e72200..f248a15 100644
--- a/modules/enterprise/gui/coregui/pom.xml
+++ b/modules/enterprise/gui/coregui/pom.xml
@@ -180,7 +180,7 @@
<inplace>false</inplace>
<logLevel>INFO</logLevel>
<runTarget>http://localhost:7080/coregui/CoreGUI.html</runTarget>
- <extraJvmArgs>-Xmx512m</extraJvmArgs>
+ <extraJvmArgs>-Xms1024M -Xmx1024M -XX:PermSize=256M
-XX:MaxPermSize=256M</extraJvmArgs>
<localWorkers>2</localWorkers>
<draftCompile>true</draftCompile>
<buildOutputDirectory>target/gwtclasses</buildOutputDirectory>
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
new file mode 100644
index 0000000..e5579cf
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/Footer.java
@@ -0,0 +1,36 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client;
+
+import com.smartgwt.client.widgets.layout.HLayout;
+
+/**
+ * @author Greg Hinkle
+ */
+public class Footer extends HLayout {
+
+ public Footer() {
+ super();
+
+ setHeight(100);
+ setBackgroundColor("gray");
+
+
+ }
+}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/PermissionEditorView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/PermissionEditorView.java
index c788499..123e47d 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/PermissionEditorView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/PermissionEditorView.java
@@ -23,6 +23,8 @@ import
org.rhq.enterprise.gui.coregui.client.components.SimpleCollapsiblePanel;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.events.ItemChangedEvent;
+import com.smartgwt.client.widgets.form.events.ItemChangedHandler;
import com.smartgwt.client.widgets.form.fields.CanvasItem;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
@@ -30,6 +32,7 @@ import com.smartgwt.client.widgets.form.fields.HeaderItem;
import java.util.ArrayList;
import java.util.EnumSet;
+import java.util.HashSet;
import java.util.Set;
/**
@@ -38,14 +41,16 @@ import java.util.Set;
public class PermissionEditorView extends CanvasItem {
- private Set<Permission> permissions = EnumSet.noneOf(Permission.class);
+ private Set<Permission> selectedPermissions =
EnumSet.noneOf(Permission.class);
+
+ private DynamicForm parentForm;
private DynamicForm form;
+
public PermissionEditorView(String name, String title) {
super(name, title);
-
setCanvas(new SimpleCollapsiblePanel("Permissions", buildForm()));
}
@@ -90,10 +95,37 @@ public class PermissionEditorView extends CanvasItem {
public void setPermissions(Set<Permission> permissions) {
- this.permissions = permissions;
+ this.selectedPermissions = permissions;
for (Permission p : Permission.values()) {
form.setValue(p.name(), permissions.contains(p));
}
+
+ form.addItemChangedHandler(new ItemChangedHandler() {
+ public void onItemChanged(ItemChangedEvent itemChangedEvent) {
+ for (Permission p : Permission.values()) {
+ if ((Boolean)form.getValue(p.name())) {
+ selectedPermissions.add(p);
+ } else {
+ selectedPermissions.remove(p);
+ }
+ }
+ }
+ });
+
form.markForRedraw();
}
+
+ public Set<Permission> getPermissions() {
+ return selectedPermissions;
+ }
+
+ @Override
+ public Object getValue() {
+ System.out.println("Finding Value");
+ return super.getValue();
+ }
+
+ public void setParentForm(DynamicForm parentForm) {
+ this.parentForm = parentForm;
+ }
}
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 56b913e..a6b8bd8 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
@@ -19,24 +19,34 @@
package org.rhq.enterprise.gui.coregui.client.admin.roles;
import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.components.HeaderLabel;
+import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.Record;
+import com.smartgwt.client.types.DSOperationType;
import com.smartgwt.client.types.Overflow;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.events.SubmitValuesEvent;
+import com.smartgwt.client.widgets.form.events.SubmitValuesHandler;
import com.smartgwt.client.widgets.form.fields.CanvasItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.ResetItem;
import com.smartgwt.client.widgets.form.fields.SectionItem;
import com.smartgwt.client.widgets.form.fields.SubmitItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.VLayout;
+import java.util.HashMap;
+import java.util.HashSet;
import java.util.Set;
/**
@@ -44,6 +54,9 @@ import java.util.Set;
*/
public class RoleEditView extends VLayout {
+ private Role roleBeingEdited;
+
+
private Label message = new Label("Select a role to edit...");
@@ -81,29 +94,45 @@ public class RoleEditView extends VLayout {
editCanvas.addMember(editLabel);
form = new DynamicForm();
- form.setAutoFetchData(true);
form.setDataSource(RolesDataSource.getInstance());
- TextItem idItem = new TextItem("id","Id");
+ TextItem idItem = new TextItem("id", "Id");
- TextItem nameItem = new TextItem("name","Name");
+ TextItem nameItem = new TextItem("name", "Name");
permissionEditorItem = new PermissionEditorView("permissionEditor",
"Permissions");
permissionEditorItem.setShowTitle(false);
permissionEditorItem.setColSpan(2);
- assignedGroupEditorItem = new
RoleGroupsEditorItem("assignedGroups","Assigned Groups");
+
+ assignedGroupEditorItem = new RoleGroupsEditorItem("assignedGroups",
"Assigned Groups");
assignedGroupEditorItem.setShowTitle(false);
assignedGroupEditorItem.setColSpan(2);
+ SubmitItem saveButton = new SubmitItem("save", "Save");
+
+ saveButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ save();
+ System.out.println("Save is done");
+ }
+ });
+
+ form.addSubmitValuesHandler(new SubmitValuesHandler() {
+ public void onSubmitValues(SubmitValuesEvent submitValuesEvent) {
+ Object o = submitValuesEvent.getValues();
+ System.out.println("O: " + o);
+ }
+ });
+
+
form.setItems(
idItem,
nameItem,
permissionEditorItem,
assignedGroupEditorItem,
- new SubmitItem("save", "Save"), new
ResetItem("reset", "Reset"));
-
+ saveButton, new ResetItem("reset", "Reset"));
editCanvas.addMember(form);
@@ -111,11 +140,13 @@ public class RoleEditView extends VLayout {
}
public void editRecord(Record record) {
+ this.roleBeingEdited = (Role) record.getAttributeAsObject("entity");
message.hide();
editCanvas.show();
try {
- editLabel.setContents("Editing user " +
record.getAttribute("name"));
+ editLabel.setContents("Editing Role " +
record.getAttribute("name"));
form.editRecord(record);
+ permissionEditorItem.setParentForm(form);
permissionEditorItem.setPermissions((Set<Permission>)
record.getAttributeAsObject("permissions"));
assignedGroupEditorItem.setGroups((PageList<ResourceGroup>)
record.getAttributeAsObject("assignedGroups"));
} catch (Throwable t) {
@@ -130,4 +161,38 @@ public class RoleEditView extends VLayout {
markForRedraw();
}
+
+ public void editNew() {
+ ListGridRecord r = new ListGridRecord();
+ Role newRole = new Role(null); // todo make default constructor public
+ RolesDataSource.copyValues(newRole, r);
+ editRecord(r);
+ form.setSaveOperationType(DSOperationType.ADD);
+
+//
+// HashSet<Permission> permissions = new HashSet<Permission>();
+// HashMap values = new HashMap();
+// values.put("permssions", permissions);
+//
+// form.editNewRecord();
+
+
+ editLabel.setContents("Create Role");
+// permissionEditorItem.setPermissions(permissions);
+
+// message.hide();
+// editCanvas.show();
+ }
+
+
+
+ public void save() {
+ System.out.println("Saving role");
+ form.saveData();
+ }
+
+
+ public DynamicForm getForm() {
+ return form;
+ }
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleGroupsEditorItem.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleGroupsEditorItem.java
index 1a2da36..6eff51e 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleGroupsEditorItem.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RoleGroupsEditorItem.java
@@ -53,7 +53,7 @@ public class RoleGroupsEditorItem extends CanvasItem {
HLayout layout = new HLayout(10);
availableGroupGrid = new ListGrid();
- availableGroupGrid.setMinHeight(350);
+ availableGroupGrid.setHeight(350);
availableGroupGrid.setCanDragRecordsOut(true);
availableGroupGrid.setDragTrackerMode(DragTrackerMode.RECORD);
availableGroupGrid.setDragDataAction(DragDataAction.MOVE);
@@ -79,7 +79,7 @@ public class RoleGroupsEditorItem extends CanvasItem {
layout.addMember(moveButtonStack);
assignedGroupGrid = new ListGrid();
- assignedGroupGrid.setMinHeight(350);
+ assignedGroupGrid.setHeight(350);
assignedGroupGrid.setCanDragRecordsOut(true);
assignedGroupGrid.setCanAcceptDroppedRecords(true);
assignedGroupGrid.setDataSource(new ResourceGroupsDataSource());
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 bf100c0..6f8894b 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
@@ -18,23 +18,36 @@
*/
package org.rhq.enterprise.gui.coregui.client.admin.roles;
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.criteria.RoleCriteria;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.RoleGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.rpc.RPCResponse;
+import com.smartgwt.client.util.JSOHelper;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
/**
* @author Greg Hinkle
*/
@@ -71,6 +84,10 @@ public class RolesDataSource extends RPCDataSource {
RoleCriteria criteria = new RoleCriteria();
criteria.setPageControl(getPageControl(request));
+ Integer subjectId =
request.getCriteria().getAttributeAsInt("subjectId");
+ if (subjectId != null) {
+ criteria.setFilterSubjectId(subjectId);
+ }
criteria.setFetchResourceGroups(true);
criteria.setFetchPermissions(true);
@@ -92,12 +109,8 @@ public class RolesDataSource extends RPCDataSource {
for (int x = 0; x < result.size(); x++) {
Role role = result.get(x);
ListGridRecord record = new ListGridRecord();
- record.setAttribute("id", role.getId());
- record.setAttribute("name", role.getName());
- record.setAttribute("resourceGroups",
role.getResourceGroups());
- record.setAttribute("permissions", role.getPermissions());
- record.setAttribute("subjects", role.getSubjects());
+ copyValues(role, record);
records[x] = record;
}
@@ -109,4 +122,118 @@ public class RolesDataSource extends RPCDataSource {
});
}
+
+ @Override
+ protected void executeAdd(final DSRequest request, final DSResponse response) {
+ JavaScriptObject data = request.getData();
+ final ListGridRecord rec = new ListGridRecord(data);
+ Role newRole = new Role("newName"); // TODO GH: Make default
constructor public
+ copyValues(rec, newRole);
+
+ roleService.createRole(newRole, new AsyncCallback<Role>() {
+ public void onFailure(Throwable caught) {
+ Map<String,String> errors = new HashMap<String, String>();
+ errors.put("name", "A role with name already
exists.");
+ response.setErrors(errors);
+// CoreGUI.getErrorHandler().handleError("Failed to create
role",caught);
+ response.setStatus(RPCResponse.STATUS_VALIDATION_ERROR);
+ processResponse(request.getRequestId(), response);
+ }
+
+ public void onSuccess(Role result) {
+ ListGridRecord record = new ListGridRecord();
+ copyValues(result,record);
+ response.setData(new Record[] {record});
+ processResponse(request.getRequestId(),response);
+ }
+ });
+
+ }
+
+ @Override
+ protected void executeUpdate(final DSRequest request, final DSResponse response) {
+ final ListGridRecord record = getEditedRecord(request);
+ System.out.println("Updating record: " + record);
+ Role updatedRole = new Role("foo");
+ copyValues(record, updatedRole);
+ roleService.updateRole(updatedRole, new AsyncCallback<Role>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to update
role",caught);
+ }
+
+ public void onSuccess(Role result) {
+ System.out.println("Role Updated");
+ copyValues(result,record);
+ response.setData(new Record[] {record});
+ processResponse(request.getRequestId(),response);
+ }
+ });
+ }
+
+ @Override
+ protected void executeRemove(final DSRequest request, final DSResponse response) {
+ JavaScriptObject data = request.getData();
+ final ListGridRecord rec = new ListGridRecord(data);
+ Role newRole = new Role("newName"); // TODO GH: Make default
constructor public
+ copyValues(rec, newRole);
+
+ roleService.removeRoles(new Integer[]{newRole.getId()}, new
AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to delete
role",caught);
+ }
+
+ public void onSuccess(Void result) {
+ System.out.println("Role deleted");
+ response.setData(new Record[]{rec});
+ processResponse(request.getRequestId(), response);
+ }
+ });
+
+ }
+
+ private static void copyValues(ListGridRecord from, Role to) {
+ to.setId(from.getAttributeAsInt("id"));
+ to.setName(from.getAttributeAsString("name"));
+// to.setDate (from.getAttributeAsDate ("date"));
+// from.getAttributeAsIntArray("resourceGroups");
+ to.setResourceGroups((Set<ResourceGroup>)
from.getAttributeAsObject("resourceGroups"));
+ to.setPermissions((Set<Permission>)
from.getAttributeAsObject("permissions"));
+ to.setSubjects((Set<Subject>)
from.getAttributeAsObject("subjects"));
+ }
+
+ static void copyValues(Role from, ListGridRecord to) {
+ to.setAttribute("id", from.getId());
+ to.setAttribute("name", from.getName());
+ to.setAttribute("resourceGroups", from.getResourceGroups());
+ to.setAttribute("permissions", from.getPermissions());
+ to.setAttribute("subjects", from.getSubjects());
+
+ to.setAttribute("entity", from);
+ }
+
+
+ private ListGridRecord getEditedRecord(DSRequest request) {
+ // Retrieving values before edit
+ JavaScriptObject oldValues =
request.getAttributeAsJavaScriptObject("oldValues");
+ // Creating new record for combining old values with changes
+ ListGridRecord newRecord = new ListGridRecord();
+ // Copying properties from old record
+ JSOHelper.apply(oldValues, newRecord.getJsObj());
+ // Retrieving changed values
+ JavaScriptObject data = request.getData();
+ // Apply changes
+ JSOHelper.apply(data, newRecord.getJsObj());
+ return newRecord;
+ }
+
+ public static ListGridRecord[] buildRecords(Collection<Role> roles) {
+ ListGridRecord[] roleRecords = new ListGridRecord[roles.size()];
+ int i = 0;
+ for (Role role : roles) {
+ ListGridRecord record = new ListGridRecord();
+ copyValues(role, record);
+ roleRecords[i++] = record;
+ }
+ return roleRecords;
+ }
}
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 bc88bad..8f71101 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/roles/RolesView.java
@@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.admin.roles;
import org.rhq.enterprise.gui.coregui.client.Presenter;
import org.rhq.enterprise.gui.coregui.client.admin.users.UsersDataSource;
+import
org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationEditor;
import org.rhq.enterprise.gui.coregui.client.places.Place;
import com.smartgwt.client.docs.CheckboxField;
@@ -33,8 +34,11 @@ import com.smartgwt.client.util.BooleanCallback;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.events.SubmitValuesEvent;
+import com.smartgwt.client.widgets.form.events.SubmitValuesHandler;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
@@ -88,7 +92,7 @@ public class RolesView extends VLayout implements Presenter {
idField.setType(ListGridFieldType.INTEGER);
- ListGridField nameField = new ListGridField("username",
"Name");
+ ListGridField nameField = new ListGridField("name", "Name");
listGrid.setFields(idField, nameField);
@@ -104,8 +108,10 @@ public class RolesView extends VLayout implements Presenter {
public void onClick(ClickEvent clickEvent) {
SC.confirm("Are you sure you want to delete " +
listGrid.getSelection().length + " resources?",
new BooleanCallback() {
- public void execute(Boolean aBoolean) {
-
+ public void execute(Boolean accepted) {
+ if (accepted) {
+ listGrid.removeSelectedData();
+ }
}
}
);
@@ -113,10 +119,20 @@ public class RolesView extends VLayout implements Presenter {
});
+
+ final IButton addButton = new IButton("Add Role");
+ addButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ createRole();
+ }
+ });
+
+
final Label tableInfo = new Label("Total: " +
listGrid.getTotalRows());
tableInfo.setWrap(false);
toolStrip.addMember(removeButton);
+ toolStrip.addMember(addButton);
toolStrip.addMember(new LayoutSpacer());
toolStrip.addMember(tableInfo);
@@ -148,8 +164,26 @@ public class RolesView extends VLayout implements Presenter {
}
}
});
+ }
+
+
+
+ public void createRole() {
+
+ RoleEditView editView = new RoleEditView();
+ final Window roleEditor = new Window();
+ roleEditor.setTitle("Create Role");
+ roleEditor.setWidth(800);
+ roleEditor.setHeight(800);
+ roleEditor.setIsModal(true);
+ roleEditor.setShowModalMask(true);
+ roleEditor.setCanDragResize(true);
+ roleEditor.centerInPage();
+ roleEditor.addItem(editView);
+ roleEditor.show();
+ editView.editNew();
}
public boolean fireDisplay(Place base, List<Place> subLocations) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/SubjectRolesEditorItem.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/SubjectRolesEditorItem.java
new file mode 100644
index 0000000..ab61eac
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/admin/users/SubjectRolesEditorItem.java
@@ -0,0 +1,126 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.admin.users;
+
+import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Role;
+import org.rhq.core.domain.resource.group.ResourceGroup;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesDataSource;
+import org.rhq.enterprise.gui.coregui.client.components.SimpleCollapsiblePanel;
+import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
+
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.types.DSOperationType;
+import com.smartgwt.client.types.DragDataAction;
+import com.smartgwt.client.types.DragTrackerMode;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.TransferImgButton;
+import com.smartgwt.client.widgets.form.fields.CanvasItem;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.layout.HLayout;
+import com.smartgwt.client.widgets.layout.VStack;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Greg Hinkle
+ */
+public class SubjectRolesEditorItem extends CanvasItem {
+
+ private Set<Role> assignedRoles;
+ private Subject subject;
+
+ private ListGrid assignedRoleGrid;
+ private ListGrid availableRoleGrid;
+
+ public SubjectRolesEditorItem(String name, String title) {
+ super(name, title);
+ setShowTitle(false);
+ setColSpan(2);
+ setWidth("90%");
+ setCanvas(new SimpleCollapsiblePanel("Assigned Roles", buildForm()));
+ }
+
+ private Canvas buildForm() {
+
+ HLayout layout = new HLayout(10);
+
+ availableRoleGrid = new ListGrid();
+ availableRoleGrid.setHeight(250);
+ availableRoleGrid.setCanDragRecordsOut(true);
+ availableRoleGrid.setDragTrackerMode(DragTrackerMode.RECORD);
+ availableRoleGrid.setDragDataAction(DragDataAction.MOVE);
+ availableRoleGrid.setDataSource(RolesDataSource.getInstance());
+ availableRoleGrid.setAutoFetchData(true);
+ availableRoleGrid.setFields(new ListGridField("id", 50), new
ListGridField("name"));
+
+ layout.addMember(availableRoleGrid);
+
+ VStack moveButtonStack = new VStack(10);
+ moveButtonStack.setWidth(50);
+
+ TransferImgButton addButton = new TransferImgButton(TransferImgButton.RIGHT);
+ TransferImgButton removeButton = new TransferImgButton(TransferImgButton.LEFT);
+ TransferImgButton addAllButton = new
TransferImgButton(TransferImgButton.RIGHT_ALL);
+ TransferImgButton removeAllButton = new
TransferImgButton(TransferImgButton.LEFT_ALL);
+
+ moveButtonStack.addMember(addButton);
+ moveButtonStack.addMember(removeButton);
+ moveButtonStack.addMember(addAllButton);
+ moveButtonStack.addMember(removeAllButton);
+
+ layout.addMember(moveButtonStack);
+
+ assignedRoleGrid = new ListGrid();
+ assignedRoleGrid.setHeight(250);
+ assignedRoleGrid.setCanDragRecordsOut(true);
+ assignedRoleGrid.setCanAcceptDroppedRecords(true);
+// assignedRoleGrid.setDataSource(RolesDataSource.getInstance());
+ assignedRoleGrid.setFields(new ListGridField("id", 50), new
ListGridField("name"));
+
+ layout.addMember(assignedRoleGrid);
+
+
+ return layout;
+ }
+
+ public void setRoles(Set<Role> assignedRoles) {
+ this.assignedRoles = assignedRoles;
+
+ assignedRoleGrid.setData(RolesDataSource.buildRecords(assignedRoles));
+ }
+
+ public Set<Role> getRoles() {
+ return this.assignedRoles;
+ }
+
+ public Subject getSubject() {
+ return subject;
+ }
+
+ public void setSubject(Subject subject) {
+ this.subject = subject;
+ if (subject != null) {
+ assignedRoleGrid.setCriteria(new Criteria("subjectId",
String.valueOf(subject.getId())));
+ }
+ }
+}
\ No newline at end of file
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 83e599d..1b74870 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
@@ -19,30 +19,52 @@
package org.rhq.enterprise.gui.coregui.client.admin.users;
import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Role;
+import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesDataSource;
import org.rhq.enterprise.gui.coregui.client.admin.roles.RolesView;
+import org.rhq.enterprise.gui.coregui.client.components.HeaderLabel;
import com.google.gwt.user.client.ui.Widget;
import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.data.Record;
import com.smartgwt.client.docs.FormLayout;
+import com.smartgwt.client.types.DSOperationType;
import com.smartgwt.client.types.VisibilityMode;
import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.fields.BooleanItem;
import com.smartgwt.client.widgets.form.fields.FormItem;
+import com.smartgwt.client.widgets.form.fields.ResetItem;
import com.smartgwt.client.widgets.form.fields.SectionItem;
+import com.smartgwt.client.widgets.form.fields.SubmitItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.ClickEvent;
+import com.smartgwt.client.widgets.form.fields.events.ClickHandler;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.layout.HLayout;
import com.smartgwt.client.widgets.layout.SectionStack;
import com.smartgwt.client.widgets.layout.SectionStackSection;
+import com.smartgwt.client.widgets.layout.VLayout;
+
+import java.util.List;
+import java.util.Set;
/**
* @author Greg Hinkle
*/
-public class UserEditView extends HLayout {
+public class UserEditView extends VLayout {
- private Subject subject;
- private Subject originalSubject;
+ private Label message = new Label("Select a user to edit...");
+
+ private SubjectRolesEditorItem subjectRolesEditorItem ;
+
+ private VLayout editCanvas;
+ private HeaderLabel editLabel;
+ private DynamicForm form;
+
+ private Subject subject;
@Override
protected void onInit() {
@@ -51,26 +73,16 @@ public class UserEditView extends HLayout {
setWidth100();
setHeight100();
- SectionStack sectionStack = new SectionStack();
- sectionStack.setVisibilityMode(VisibilityMode.MULTIPLE);
+ buildSubjectEditor();
+ form.hide();
- sectionStack.setWidth100();
- sectionStack.setHeight100();
-
- SectionStackSection subjectSection = new SectionStackSection("Edit
Subject");
- subjectSection.setItems(buildSubjectEditor());
-
- SectionStackSection roleSection = new SectionStackSection("Edit
Subject's Roles");
- roleSection.setItems(buildRoleEditor());
-
- sectionStack.setSections(subjectSection, roleSection );
-
- addMember(buildSubjectEditor());
+ addMember(message);
+ addMember(form);
}
private Canvas buildSubjectEditor() {
- DynamicForm form = new DynamicForm();
+ form = new DynamicForm();
form.setWidth100();
SectionItem userEditSection = new SectionItem("userEditSection",
"Edit User");
@@ -96,19 +108,28 @@ public class UserEditView extends HLayout {
UsersDataSource ds = UsersDataSource.getInstance();
- ds.filterData(new Criteria("id", "2"));
form.setUseAllDataSourceFields(true);
form.setDataSource(ds);
- form.setAutoFetchData(true);
- form.getField("id").hide();
+ subjectRolesEditorItem = new
SubjectRolesEditorItem("rolesEditor","Assigned Roles");
+
- FormItem[] forms = form.getFields();
+ SubmitItem saveButton = new SubmitItem("save", "Save");
-
+ saveButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ form.saveData();
+ System.out.println("Save is done");
+ }
+ });
+ TextItem departmentItem = new TextItem("department");
+
+ ResetItem resetButton = new ResetItem("reset", "Reset");
+
+ form.setItems(departmentItem, subjectRolesEditorItem, saveButton, resetButton);
return form;
@@ -116,12 +137,38 @@ public class UserEditView extends HLayout {
}
- private Canvas buildRoleEditor() {
+ public void editRecord(Record record) {
+ form.getDataSource().getField("username").setCanEdit(false);
+
+ subjectRolesEditorItem.setSubject((Subject)
record.getAttributeAsObject("entity"));
+ subjectRolesEditorItem.setRoles((Set<Role>)
record.getAttributeAsObject("roles"));
+
+ try {
+ form.editRecord(record);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ message.hide();
+ form.show();
+ form.setSaveOperationType(DSOperationType.UPDATE);
+
+ }
+
+ public void editNone() {
+ message.show();
+ form.hide();
+ }
+
+ public void editNew() {
+ form.getDataSource().getField("username").setCanEdit(true);
- RolesView rv = new RolesView();
- // set subject criteria
- return rv;
+ ListGridRecord r = new ListGridRecord();
+ Subject subject = new Subject(); // todo make default constructor public
+ UsersDataSource.copyValues(subject, r);
+ editRecord(r);
+ form.setSaveOperationType(DSOperationType.ADD);
}
+
}
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 dcf7199..8e88e06 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
@@ -19,23 +19,38 @@
package org.rhq.enterprise.gui.coregui.client.admin.users;
import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.criteria.SubjectCriteria;
+import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.gwt.SubjectGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.FieldValueExtractor;
+import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.data.fields.DataSourceTextField;
import com.smartgwt.client.rpc.RPCResponse;
+import com.smartgwt.client.types.FieldType;
+import com.smartgwt.client.util.JSOHelper;
+import com.smartgwt.client.widgets.form.validator.LengthRangeValidator;
+import com.smartgwt.client.widgets.form.validator.MatchesFieldValidator;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
/**
* @author Greg Hinkle
*/
@@ -53,21 +68,40 @@ public class UsersDataSource extends RPCDataSource {
return INSTANCE;
}
-
+
protected UsersDataSource() {
super("Users");
DataSourceField idDataField = new DataSourceIntegerField("id",
"ID");
idDataField.setPrimaryKey(true);
+ idDataField.setCanEdit(false);
+
+ DataSourceTextField usernameField = new DataSourceTextField("username",
"User Name", 100, true);
+ usernameField.setRequired(true);
+
+ DataSourceTextField firstName = new DataSourceTextField("firstName",
"First Name", 100, true);
+
+ DataSourceTextField lastName = new DataSourceTextField("lastName",
"Last Name", 100, true);
+
+ DataSourceTextField password = new DataSourceTextField("password",
"Password", 100, false);
+ password.setType(FieldType.PASSWORD);
+
+ LengthRangeValidator passwordValdidator = new LengthRangeValidator();
+ passwordValdidator.setMin(6);
+ passwordValdidator.setErrorMessage("Password must be at least six
characters");
+ password.setValidators(passwordValdidator);
+
- DataSourceTextField usernameField = new DataSourceTextField("username",
"User Name");
- usernameField.setCanEdit(false);
+ DataSourceTextField passwordVerify = new
DataSourceTextField("passwordVerify", "Verify", 100, false);
+ passwordVerify.setType(FieldType.PASSWORD);
- DataSourceTextField firstName = new DataSourceTextField("firstName",
"First Name");
+ MatchesFieldValidator passwordsEqualValidator = new MatchesFieldValidator();
+ passwordsEqualValidator.setOtherField("password");
+ passwordsEqualValidator.setErrorMessage("Passwords do not match");
+ passwordVerify.setValidators(passwordsEqualValidator);
- DataSourceTextField lastName = new DataSourceTextField("lastName",
"Last Name");
- DataSourceTextField email = new DataSourceTextField("email",
"Email Address");
+ DataSourceTextField email = new DataSourceTextField("email",
"Email Address", 100, true);
DataSourceTextField phone = new DataSourceTextField("phoneNumber",
"Phone");
@@ -79,13 +113,13 @@ public class UsersDataSource extends RPCDataSource {
roles.setMultiple(true);
- setFields(idDataField, usernameField, firstName, lastName, phone, email,
department);
+ setFields(idDataField, usernameField, firstName, lastName, password,
passwordVerify, phone, email, department);
}
public void executeFetch(final DSRequest request, final DSResponse response) {
final long start = System.currentTimeMillis();
-
+
SubjectCriteria criteria = new SubjectCriteria();
criteria.setPageControl(getPageControl(request));
@@ -101,26 +135,155 @@ public class UsersDataSource extends RPCDataSource {
System.out.println("Data retrieved in: " +
(System.currentTimeMillis() - start));
ListGridRecord[] records = new ListGridRecord[result.size()];
- for (int x=0; x<result.size(); x++) {
- Subject res = result.get(x);
+ for (int x = 0; x < result.size(); x++) {
+ Subject subject = result.get(x);
ListGridRecord record = new ListGridRecord();
- record.setAttribute("id",res.getId());
- record.setAttribute("username",res.getName());
-// record.setAttribute("name",res.getFirstName() + "
" + res.getLastName());
- record.setAttribute("firstName", res.getFirstName());
- record.setAttribute("lastName", res.getLastName());
- record.setAttribute("factive", res.getFactive());
- record.setAttribute("department", res.getDepartment());
- record.setAttribute("phoneNumber", res.getPhoneNumber());
- record.setAttribute("email",res.getEmailAddress());
+
+ copyValues(subject, record);
+
records[x] = record;
}
response.setData(records);
- response.setTotalRows(result.getTotalSize()); // for paging to work we
have to specify size of full result set
+ response.setTotalRows(result.getTotalSize()); // for paging to work we
have to specify size of full result set
processResponse(request.getRequestId(), response);
}
});
}
+
+
+ @Override
+ protected void executeAdd(final DSRequest request, final DSResponse response) {
+ JavaScriptObject data = request.getData();
+ final ListGridRecord rec = new ListGridRecord(data);
+ Subject newSubject = new Subject();
+ copyValues(rec, newSubject);
+
+ subjectService.createSubject(newSubject, new AsyncCallback<Subject>() {
+ public void onFailure(Throwable caught) {
+ // TODO better exceptions so we can set the right validation errors
+ Map<String,String> errors = new HashMap<String, String>();
+ errors.put("username", "A user with this name already
exists.");
+ response.setErrors(errors);
+// CoreGUI.getErrorHandler().handleError("Failed to create
role",caught);
+ response.setStatus(RPCResponse.STATUS_VALIDATION_ERROR);
+ processResponse(request.getRequestId(), response);
+ }
+
+ public void onSuccess(Subject result) {
+ ListGridRecord record = new ListGridRecord();
+ copyValues(result,record);
+ response.setData(new Record[] {record});
+ processResponse(request.getRequestId(),response);
+ }
+ });
+
+ }
+
+ @Override
+ protected void executeUpdate(final DSRequest request, final DSResponse response) {
+ final ListGridRecord record = getEditedRecord(request);
+ System.out.println("Updating record: " + record);
+ final Subject updatedSubject = new Subject();
+ copyValues(record, updatedSubject);
+ subjectService.updateSubject(updatedSubject, new AsyncCallback<Subject>()
{
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to update
subject",caught);
+ }
+
+ public void onSuccess(final Subject result) {
+
+ String password = record.getAttributeAsString("password");
+ if (password != null) {
+ subjectService.changePassword(updatedSubject.getName(), password, new
AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to update
subject's password",caught);
+ }
+
+ public void onSuccess(Void nothing) {
+ System.out.println("Subject Updated");
+ copyValues(result,record);
+ response.setData(new Record[] {record});
+ processResponse(request.getRequestId(),response);
+
+ }
+ });
+ } else {
+ System.out.println("Subject Updated");
+ copyValues(result,record);
+ response.setData(new Record[] {record});
+ processResponse(request.getRequestId(),response);
+ }
+ }
+ });
+ }
+
+ @Override
+ protected void executeRemove(final DSRequest request, final DSResponse response) {
+ JavaScriptObject data = request.getData();
+ final ListGridRecord rec = new ListGridRecord(data);
+ Subject subjectToDelete = new Subject(); // TODO GH: Make default constructor
public
+ copyValues(rec, subjectToDelete);
+
+ subjectService.deleteSubjects(new int[]{subjectToDelete.getId()}, new
AsyncCallback<Void>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to delete
role",caught);
+ }
+
+ public void onSuccess(Void result) {
+ System.out.println("Subject deleted");
+ response.setData(new Record[]{rec});
+ processResponse(request.getRequestId(), response);
+ }
+ });
+
+ }
+
+
+
+ private static void copyValues(ListGridRecord from, Subject to) {
+ to.setId(from.getAttributeAsInt("id"));
+ to.setName(from.getAttributeAsString("username"));
+ to.setFirstName(from.getAttributeAsString("firstName"));
+ to.setLastName(from.getAttributeAsString("lastName"));
+ to.setFactive(from.getAttributeAsBoolean("factive"));
+ to.setDepartment(from.getAttributeAsString("department"));
+ to.setPhoneNumber(from.getAttributeAsString("phoneNumber"));
+ to.setEmailAddress(from.getAttributeAsString("email"));
+
+ to.setRoles((Set<Role>) from.getAttributeAsObject("roles"));
+ }
+
+ static void copyValues(Subject from, ListGridRecord to) {
+ to.setAttribute("id", from.getId());
+ to.setAttribute("username", from.getName());
+ to.setAttribute("firstName", from.getFirstName());
+ to.setAttribute("lastName", from.getLastName());
+ to.setAttribute("factive", from.getFactive());
+ to.setAttribute("department", from.getDepartment());
+ to.setAttribute("phoneNumber", from.getPhoneNumber());
+ to.setAttribute("email", from.getEmailAddress());
+
+ to.setAttribute("roles",from.getRoles());
+
+ to.setAttribute("entity", from);
+ }
+
+
+
+ private ListGridRecord getEditedRecord(DSRequest request) {
+ // Retrieving values before edit
+ JavaScriptObject oldValues =
request.getAttributeAsJavaScriptObject("oldValues");
+ // Creating new record for combining old values with changes
+ ListGridRecord newRecord = new ListGridRecord();
+ // Copying properties from old record
+ JSOHelper.apply(oldValues, newRecord.getJsObj());
+ // Retrieving changed values
+ JavaScriptObject data = request.getData();
+ // Apply changes
+ JSOHelper.apply(data, newRecord.getJsObj());
+ return newRecord;
+ }
+
}
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 b6757ea..c2c0c6f 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
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.client.admin.users;
import org.rhq.enterprise.gui.coregui.client.Presenter;
+import org.rhq.enterprise.gui.coregui.client.admin.roles.RoleEditView;
import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDatasource;
import org.rhq.enterprise.gui.coregui.client.places.Place;
@@ -34,6 +35,7 @@ import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.Window;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.grid.ListGrid;
@@ -51,24 +53,25 @@ import java.util.List;
/**
* @author Greg Hinkle
*/
-public class UsersView extends SectionStack implements Presenter {
-
-
+public class UsersView extends VLayout implements Presenter {
+ public UsersView() {
+ super();
+ setWidth100();
+ setHeight100();
+ }
@Override
protected void onInit() {
super.onInit();
- setVisibilityMode(VisibilityMode.MULTIPLE);
- setWidth100();
- setHeight100();
- final UsersDataSource datasource = UsersDataSource.getInstance();
+ final UsersDataSource datasource = UsersDataSource.getInstance();
VLayout gridHolder = new VLayout();
gridHolder.setWidth100();
- gridHolder.setHeight100();
+ gridHolder.setHeight("50%");
+ gridHolder.setShowResizeBar(true);
final ListGrid listGrid = new ListGrid();
listGrid.setWidth100();
@@ -79,21 +82,19 @@ public class UsersView extends SectionStack implements Presenter {
// listGrid.setAutoFitData(Autofit.HORIZONTAL);
listGrid.setAlternateRecordStyles(true);
// listGrid.setAutoFitData(Autofit.HORIZONTAL);
- listGrid.setSelectionType(SelectionStyle.SIMPLE);
- listGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
+// listGrid.setSelectionType(SelectionStyle.SIMPLE);
+// listGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
listGrid.setShowFilterEditor(true);
ListGridField idField = new ListGridField("id", "Id", 55);
idField.setType(ListGridFieldType.INTEGER);
-
+
ListGridField nameField = new ListGridField("username",
"Name", 100);
+ ListGridField emailField = new ListGridField("email", "Email
Address");
- ListGridField descriptionField = new ListGridField("name",
"Name", 150);
- ListGridField emailField = new ListGridField("email", "Email
Address", 100);
-
- listGrid.setFields(idField, nameField, descriptionField, emailField);
+ listGrid.setFields(idField, nameField, emailField);
gridHolder.addMember(listGrid);
@@ -105,10 +106,10 @@ public class UsersView extends SectionStack implements Presenter {
removeButton.setDisabled(true);
removeButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
- SC.confirm("Are you sure you want to delete " +
listGrid.getSelection().length + " resources?",
+ SC.confirm("Are you sure you want to delete " +
listGrid.getSelection().length + " users?",
new BooleanCallback() {
public void execute(Boolean aBoolean) {
-
+ // todo
}
}
);
@@ -116,20 +117,32 @@ public class UsersView extends SectionStack implements Presenter {
});
-
final Label tableInfo = new Label("Total: " +
listGrid.getTotalRows());
tableInfo.setWrap(false);
+
+ final IButton addButton = new IButton("Add Role");
+ addButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ createUser();
+ }
+ });
+
+
toolStrip.addMember(removeButton);
+ toolStrip.addMember(addButton);
toolStrip.addMember(new LayoutSpacer());
toolStrip.addMember(tableInfo);
gridHolder.addMember(toolStrip);
+ final UserEditView userEditor = new UserEditView();
+
+
listGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
public void onSelectionChanged(SelectionEvent selectionEvent) {
- int selectedCount =
((ListGrid)selectionEvent.getSource()).getSelection().length;
+ int selectedCount = ((ListGrid)
selectionEvent.getSource()).getSelection().length;
tableInfo.setContents("Total: " + listGrid.getTotalRows() +
" (" + selectedCount + " selected)");
removeButton.setDisabled(selectedCount == 0);
}
@@ -141,22 +154,36 @@ public class UsersView extends SectionStack implements Presenter {
listGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
public void onSelectionChanged(SelectionEvent selectionEvent) {
- for (Canvas c : detailsSection.getItems())
- c.destroy();
-
- detailsSection.setItems(new UserEditView());
- detailsSection.setExpanded(true);
- expandSection(1);
+ if (selectionEvent.getState()) {
+ userEditor.editRecord(selectionEvent.getRecord());
+ } else {
+ userEditor.editNone();
+ }
}
});
- SectionStackSection gridSection = new SectionStackSection("Search
Users");
- gridSection.setExpanded(true);
- gridSection.setItems(gridHolder);
- addSection(gridSection);
- addSection(detailsSection);
+ addMember(gridHolder);
+ addMember(userEditor);
+ }
+
+
+ public void createUser() {
+
+ UserEditView editView = new UserEditView();
+
+ final Window roleEditor = new Window();
+ roleEditor.setTitle("Create User");
+ roleEditor.setWidth(800);
+ roleEditor.setHeight(800);
+ roleEditor.setIsModal(true);
+ roleEditor.setShowModalMask(true);
+ roleEditor.setCanDragResize(true);
+ roleEditor.centerInPage();
+ roleEditor.addItem(editView);
+ roleEditor.show();
+ editView.editNew();
}
public boolean fireDisplay(Place base, List<Place> subLocations) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/SimpleCollapsiblePanel.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/SimpleCollapsiblePanel.java
index e516d00..cb09a01 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/SimpleCollapsiblePanel.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/components/SimpleCollapsiblePanel.java
@@ -52,6 +52,7 @@ public class SimpleCollapsiblePanel extends VLayout {
button.setShowRollOver(false);
button.setActionType(SelectionType.RADIO);
button.setBorder(null);
+ button.setAutoFit(true);
button.setIcon("[skin]/images/SectionHeader/opener_opened.png");
@@ -66,6 +67,7 @@ public class SimpleCollapsiblePanel extends VLayout {
} else {
button.setIcon("[skin]/images/SectionHeader/opener_closed.png");
content.hide();
+ setHeight(30);
}
getParentElement().markForRedraw();
markForRedraw();
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
index d1fc4a3..d0cc937 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java
@@ -20,6 +20,8 @@ package org.rhq.enterprise.gui.coregui.client.gwt;
import org.rhq.core.domain.criteria.ResourceGroupCriteria;
+import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
+import org.rhq.core.domain.resource.group.GroupDefinition;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
@@ -36,4 +38,5 @@ public interface ResourceGroupGWTService extends RemoteService {
PageList<ResourceGroup> findResourceGroupsByCriteria(ResourceGroupCriteria
criteria);
+ PageList<GroupDefinition>
findGroupDefinitionsByCriteria(ResourceGroupDefinitionCriteria criteria);
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
index 66123f9..230dbdc 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/RoleGWTService.java
@@ -32,4 +32,9 @@ public interface RoleGWTService extends RemoteService {
PageList<Role> findRolesByCriteria(RoleCriteria criteria);
+ Role createRole(Role role);
+
+ Role updateRole(Role role);
+
+ void removeRoles(Integer[] roleIds);
}
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
new file mode 100644
index 0000000..538fc95
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupListView.java
@@ -0,0 +1,182 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.groups;
+
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceDatasource;
+import org.rhq.enterprise.gui.coregui.client.inventory.resource.ResourceSelectListener;
+
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.types.SelectionAppearance;
+import com.smartgwt.client.types.SelectionStyle;
+import com.smartgwt.client.util.BooleanCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.form.DynamicForm;
+import com.smartgwt.client.widgets.form.fields.TextItem;
+import com.smartgwt.client.widgets.form.fields.events.KeyPressEvent;
+import com.smartgwt.client.widgets.form.fields.events.KeyPressHandler;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.DataArrivedEvent;
+import com.smartgwt.client.widgets.grid.events.DataArrivedHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionEvent;
+import com.smartgwt.client.widgets.layout.LayoutSpacer;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
+
+import java.util.ArrayList;
+
+/**
+ * @author Greg Hinkle
+ */
+public class ResourceGroupListView extends VLayout {
+
+ private ListGrid listGrid;
+
+
+ public ResourceGroupListView() {
+
+ setWidth100();
+ setHeight100();
+
+// DynamicForm searchPanel = new DynamicForm();
+// final TextItem searchBox = new TextItem("query", "Search
Resources");
+// searchBox.setValue("");
+// searchPanel.setWrapItemTitles(false);
+// searchPanel.setFields(searchBox);
+//
+//
+// addMember(searchPanel);
+
+
+ final ResourceGroupsDataSource datasource = new ResourceGroupsDataSource();
+
+ VLayout gridHolder = new VLayout();
+
+ listGrid = new ListGrid();
+ listGrid.setWidth100();
+ listGrid.setHeight100();
+ listGrid.setDataSource(datasource);
+ listGrid.setAutoFetchData(true);
+ listGrid.setAlternateRecordStyles(true);
+// listGrid.setAutoFitData(Autofit.HORIZONTAL);
+// listGrid.setCriteria(new Criteria("name",
searchPanel.getValueAsString("query")));
+
+ listGrid.setSelectionType(SelectionStyle.SIMPLE);
+ listGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
+ listGrid.setResizeFieldsInRealTime(true);
+
+
+ ListGridField idField = new ListGridField("id", "Id", 55);
+ idField.setType(ListGridFieldType.INTEGER);
+ ListGridField nameField = new ListGridField("name", "Name",
250);
+ nameField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int i1)
{
+ return "<a href=\"#ResourceGroup/" +
listGridRecord.getAttribute("id") +"\">" + o +
"</a>";
+ }
+ });
+
+
+ ListGridField descriptionField = new ListGridField("description",
"Description");
+ ListGridField typeNameField = new ListGridField("typeName",
"Type", 130);
+ ListGridField pluginNameField = new ListGridField("pluginName",
"Plugin", 100);
+ ListGridField categoryField = new ListGridField("category",
"Category", 60);
+
+ ListGridField availabilityField = new
ListGridField("currentAvailability", "Availability", 55);
+
+ availabilityField.setAlign(Alignment.CENTER);
+ listGrid.setFields(idField, nameField, descriptionField, typeNameField,
pluginNameField, categoryField, availabilityField);
+
+
+ gridHolder.addMember(listGrid);
+
+ ToolStrip toolStrip = new ToolStrip();
+ toolStrip.setMembersMargin(15);
+
+ final IButton removeButton = new IButton("Remove");
+ removeButton.setDisabled(true);
+ removeButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ SC.confirm("Are you sure you want to delete " +
listGrid.getSelection().length + " resources?",
+ new BooleanCallback() {
+ public void execute(Boolean aBoolean) {
+
+ }
+ }
+ );
+ }
+ });
+
+
+
+
+ final Label tableInfo = new Label("Total: " +
listGrid.getTotalRows());
+ tableInfo.setWrap(false);
+
+ toolStrip.addMember(removeButton);
+ toolStrip.addMember(new LayoutSpacer());
+ toolStrip.addMember(tableInfo);
+
+ gridHolder.addMember(toolStrip);
+
+
+ listGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ int selectedCount =
((ListGrid)selectionEvent.getSource()).getSelection().length;
+ tableInfo.setContents("Total: " + listGrid.getTotalRows() +
" (" + selectedCount + " selected)");
+ removeButton.setDisabled(selectedCount == 0);
+ }
+ });
+
+
+
+ addMember(gridHolder);
+
+
+ listGrid.addDataArrivedHandler(new DataArrivedHandler() {
+ public void onDataArrived(DataArrivedEvent dataArrivedEvent) {
+ int selectedCount =
((ListGrid)dataArrivedEvent.getSource()).getSelection().length;
+ tableInfo.setContents("Total: " + listGrid.getTotalRows() +
" (" + selectedCount + " selected)");
+ }
+ });
+
+ /*
+ searchBox.addKeyPressHandler(new KeyPressHandler() {
+ public void onKeyPress(KeyPressEvent event) {
+ if (event.getCharacterValue() == KeyCodes.KEY_ENTER) {
+ datasource.setQuery((String) searchBox.getValue());
+ Criteria c = new Criteria("name", (String)
searchBox.getValue());
+ long start = System.currentTimeMillis();
+ listGrid.fetchData(c);
+ System.out.println("Loaded in: " +
(System.currentTimeMillis() - start));
+ }
+ }
+ });*/
+ }
+
+}
\ No newline at end of file
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
index 69a8968..1f88e32 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java
@@ -109,10 +109,11 @@ public class ResourceGroupsDataSource extends RPCDataSource {
record.setAttribute("description", group.getDescription());
record.setAttribute("groupCategory",
group.getGroupCategory());
- record.setAttribute("resourceType", group.getResourceType());
- record.setAttribute("typeName",
group.getResourceType().getName());
- record.setAttribute("pluginName",
group.getResourceType().getPlugin());
-
+ if (group.getResourceType() != null) {
+ record.setAttribute("resourceType",
group.getResourceType());
+ record.setAttribute("typeName",
group.getResourceType().getName());
+ record.setAttribute("pluginName",
group.getResourceType().getPlugin());
+ }
records[x] = record;
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionDataSource.java
new file mode 100644
index 0000000..b5a9b89
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionDataSource.java
@@ -0,0 +1,114 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.groups.definitions;
+
+import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
+import org.rhq.core.domain.resource.group.GroupDefinition;
+import org.rhq.core.domain.util.PageList;
+import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
+import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTServiceAsync;
+import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.smartgwt.client.data.DSRequest;
+import com.smartgwt.client.data.DSResponse;
+import com.smartgwt.client.data.DataSourceField;
+import com.smartgwt.client.data.fields.DataSourceIntegerField;
+import com.smartgwt.client.data.fields.DataSourceTextField;
+import com.smartgwt.client.rpc.RPCResponse;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+
+/**
+ * @author Greg Hinkle
+ */
+public class GroupDefinitionDataSource extends RPCDataSource {
+
+
+ private ResourceGroupGWTServiceAsync groupService =
GWTServiceLookup.getResourceGroupService();
+
+
+ public GroupDefinitionDataSource() {
+ super();
+
+ DataSourceField idDataField = new DataSourceIntegerField("id",
"ID");
+ idDataField.setPrimaryKey(true);
+ idDataField.setCanEdit(false);
+
+ DataSourceTextField nameField = new DataSourceTextField("name",
"Name");
+ DataSourceTextField descriptionField = new
DataSourceTextField("description", "Description");
+ DataSourceTextField expressionField = new
DataSourceTextField("expression", "Expression");
+ DataSourceTextField recalculationIntervalField = new
DataSourceTextField("recalculationInterval", "Recalculation
Interval");
+ DataSourceTextField modifiedTimeField = new
DataSourceTextField("modifiedTime", "Modified Time");
+ DataSourceTextField createdTimeField = new
DataSourceTextField("createdTime", "Created Time");
+ DataSourceTextField lastCalculationTimeField = new
DataSourceTextField("lastCalculationTime", "Last Calculation Time");
+ DataSourceTextField nextCalculationTimeField = new
DataSourceTextField("nextCalculationTime", "Next Calculation Time");
+ DataSourceTextField managedResourceGroupsField = new
DataSourceTextField("managedResourceGroups", "Managed Resource
Groups");
+
+
+ setFields(idDataField, nameField, descriptionField, expressionField,
recalculationIntervalField, modifiedTimeField, createdTimeField, lastCalculationTimeField,
nextCalculationTimeField, managedResourceGroupsField);
+
+ }
+
+ @Override
+ protected void executeFetch(final DSRequest request, final DSResponse response) {
+ ResourceGroupDefinitionCriteria criteria = new
ResourceGroupDefinitionCriteria();
+ criteria.setPageControl(getPageControl(request));
+
+ groupService.findGroupDefinitionsByCriteria(criteria, new
AsyncCallback<PageList<GroupDefinition>>() {
+ public void onFailure(Throwable caught) {
+ CoreGUI.getErrorHandler().handleError("Failed to load group
definitions", caught);
+ }
+
+ public void onSuccess(PageList<GroupDefinition> result) {
+
+
+ response.setStatus(RPCResponse.STATUS_SUCCESS);
+ response.setData(buildRecords(result));
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+
+ }
+ });
+ }
+
+
+ public ListGridRecord[] buildRecords(PageList<GroupDefinition> definitions) {
+
+ ListGridRecord[] records = new ListGridRecord[definitions.size()];
+ int i = 0;
+ for (GroupDefinition def : definitions) {
+ ListGridRecord record = new ListGridRecord();
+ record.setAttribute("id", def.getId());
+ record.setAttribute("name", def.getName());
+ record.setAttribute("description", def.getDescription());
+ record.setAttribute("expression", def.getExpression());
+ record.setAttribute("recalculationInterval",
def.getRecalculationInterval());
+ record.setAttribute("modifiedTime", def.getModifiedTime());
+ record.setAttribute("createdTime", def.getCreatedTime());
+ record.setAttribute("lastCalculationTime",
def.getLastCalculationTime());
+ record.setAttribute("nextCalculationTime",
def.getNextCalculationTime());
+ record.setAttribute("managedResourceGroups",
def.getManagedResourceGroups());
+
+ records[i++] = record;
+ }
+
+ return records;
+ }
+}
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
new file mode 100644
index 0000000..91dc3ba
--- /dev/null
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java
@@ -0,0 +1,173 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2010 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+package org.rhq.enterprise.gui.coregui.client.inventory.groups.definitions;
+
+import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource;
+
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.types.SelectionAppearance;
+import com.smartgwt.client.types.SelectionStyle;
+import com.smartgwt.client.util.BooleanCallback;
+import com.smartgwt.client.util.SC;
+import com.smartgwt.client.widgets.IButton;
+import com.smartgwt.client.widgets.Label;
+import com.smartgwt.client.widgets.events.ClickEvent;
+import com.smartgwt.client.widgets.events.ClickHandler;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.ListGrid;
+import com.smartgwt.client.widgets.grid.ListGridField;
+import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.DataArrivedEvent;
+import com.smartgwt.client.widgets.grid.events.DataArrivedHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionChangedHandler;
+import com.smartgwt.client.widgets.grid.events.SelectionEvent;
+import com.smartgwt.client.widgets.layout.LayoutSpacer;
+import com.smartgwt.client.widgets.layout.VLayout;
+import com.smartgwt.client.widgets.toolbar.ToolStrip;
+
+/**
+ * @author Greg Hinkle
+ */
+public class GroupDefinitionListView extends VLayout {
+
+ private ListGrid listGrid;
+
+
+ public GroupDefinitionListView() {
+
+ setWidth100();
+ setHeight100();
+
+// DynamicForm searchPanel = new DynamicForm();
+// final TextItem searchBox = new TextItem("query", "Search
Resources");
+// searchBox.setValue("");
+// searchPanel.setWrapItemTitles(false);
+// searchPanel.setFields(searchBox);
+//
+//
+// addMember(searchPanel);
+
+
+ final GroupDefinitionDataSource datasource = new GroupDefinitionDataSource();
+
+ VLayout gridHolder = new VLayout();
+
+ listGrid = new ListGrid();
+ listGrid.setWidth100();
+ listGrid.setHeight100();
+ listGrid.setDataSource(datasource);
+ listGrid.setAutoFetchData(true);
+ listGrid.setAlternateRecordStyles(true);
+// listGrid.setAutoFitData(Autofit.HORIZONTAL);
+// listGrid.setCriteria(new Criteria("name",
searchPanel.getValueAsString("query")));
+
+ listGrid.setSelectionType(SelectionStyle.SIMPLE);
+ listGrid.setSelectionAppearance(SelectionAppearance.CHECKBOX);
+ listGrid.setResizeFieldsInRealTime(true);
+
+
+ ListGridField idField = new ListGridField("id", "Id", 55);
+ idField.setType(ListGridFieldType.INTEGER);
+ ListGridField nameField = new ListGridField("name", "Name",
250);
+ nameField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int i1)
{
+ return "<a href=\"#ResourceGroupDefinition/" +
listGridRecord.getAttribute("id") +"\">" + o +
"</a>";
+ }
+ });
+
+
+ ListGridField descriptionField = new ListGridField("description",
"Description");
+//// ListGridField typeNameField = new ListGridField("typeName",
"Type", 130);
+//// ListGridField pluginNameField = new ListGridField("pluginName",
"Plugin", 100);
+//// ListGridField categoryField = new ListGridField("category",
"Category", 60);
+////
+//// ListGridField availabilityField = new
ListGridField("currentAvailability", "Availability", 55);
+//
+// availabilityField.setAlign(Alignment.CENTER);
+// listGrid.setFields(idField, nameField, descriptionField, typeNameField,
pluginNameField, categoryField, availabilityField);
+
+
+ gridHolder.addMember(listGrid);
+
+ ToolStrip toolStrip = new ToolStrip();
+ toolStrip.setMembersMargin(15);
+
+ final IButton removeButton = new IButton("Remove");
+ removeButton.setDisabled(true);
+ removeButton.addClickHandler(new ClickHandler() {
+ public void onClick(ClickEvent clickEvent) {
+ SC.confirm("Are you sure you want to delete " +
listGrid.getSelection().length + " resources?",
+ new BooleanCallback() {
+ public void execute(Boolean aBoolean) {
+
+ }
+ }
+ );
+ }
+ });
+
+
+
+
+ final Label tableInfo = new Label("Total: " +
listGrid.getTotalRows());
+ tableInfo.setWrap(false);
+
+ toolStrip.addMember(removeButton);
+ toolStrip.addMember(new LayoutSpacer());
+ toolStrip.addMember(tableInfo);
+
+ gridHolder.addMember(toolStrip);
+
+
+ listGrid.addSelectionChangedHandler(new SelectionChangedHandler() {
+ public void onSelectionChanged(SelectionEvent selectionEvent) {
+ int selectedCount =
((ListGrid)selectionEvent.getSource()).getSelection().length;
+ tableInfo.setContents("Total: " + listGrid.getTotalRows() +
" (" + selectedCount + " selected)");
+ removeButton.setDisabled(selectedCount == 0);
+ }
+ });
+
+
+
+ addMember(gridHolder);
+
+
+ listGrid.addDataArrivedHandler(new DataArrivedHandler() {
+ public void onDataArrived(DataArrivedEvent dataArrivedEvent) {
+ int selectedCount =
((ListGrid)dataArrivedEvent.getSource()).getSelection().length;
+ tableInfo.setContents("Total: " + listGrid.getTotalRows() +
" (" + selectedCount + " selected)");
+ }
+ });
+
+ /*
+ searchBox.addKeyPressHandler(new KeyPressHandler() {
+ public void onKeyPress(KeyPressEvent event) {
+ if (event.getCharacterValue() == KeyCodes.KEY_ENTER) {
+ datasource.setQuery((String) searchBox.getValue());
+ Criteria c = new Criteria("name", (String)
searchBox.getValue());
+ long start = System.currentTimeMillis();
+ listGrid.fetchData(c);
+ System.out.println("Loaded in: " +
(System.currentTimeMillis() - start));
+ }
+ }
+ });*/
+ }
+
+}
\ No newline at end of file
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourcesView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourcesView.java
index b3bf91f..38fa943 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourcesView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourcesView.java
@@ -21,6 +21,8 @@ package org.rhq.enterprise.gui.coregui.client.inventory.resource;
import org.rhq.core.domain.resource.Resource;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.Presenter;
+import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupListView;
+import
org.rhq.enterprise.gui.coregui.client.inventory.groups.definitions.GroupDefinitionListView;
import org.rhq.enterprise.gui.coregui.client.places.Place;
import com.smartgwt.client.types.ContentsType;
@@ -130,14 +132,14 @@ public class ResourcesView extends HLayout implements Presenter {
treeGrid.setShowHeader(false);
Tree tree = new Tree();
- final TreeNode manageServersNode = new TreeNode("Groups");
- final TreeNode manageAgentsNode = new TreeNode("DynaGroups");
+ final TreeNode groupsNode = new TreeNode("Groups");
+ final TreeNode groupDefinitions = new TreeNode("DynaGroups");
final TreeNode manageAffinityGroupsNode = new TreeNode("Special
Groups");
final TreeNode managePartitionEventsNode = new TreeNode("Greg's
Groups");
tree.setRoot(new TreeNode("clustering",
- manageServersNode,
- manageAgentsNode,
+ groupsNode,
+ groupDefinitions,
manageAffinityGroupsNode,
managePartitionEventsNode));
@@ -152,10 +154,12 @@ public class ResourcesView extends HLayout implements Presenter {
pane.setHeight100();
String url = null;
- if (selectionEvent.getRecord() == manageServersNode) {
- url = "/rhq/ha/listServers.xhtml";
- } else if (selectionEvent.getRecord() == manageAgentsNode) {
- url = "/rhq/ha/listAgents.xhtml";
+ if (selectionEvent.getRecord() == groupsNode) {
+ setContent(new ResourceGroupListView());
+ return;
+ } else if (selectionEvent.getRecord() == groupDefinitions) {
+ setContent(new GroupDefinitionListView());
+ return;
} else if (selectionEvent.getRecord() == manageAffinityGroupsNode) {
url = "/rhq/ha/listAffinityGroups.xhtml";
} else if (selectionEvent.getRecord() == managePartitionEventsNode) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
index 766f6a5..5fcee6b 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
@@ -20,6 +20,7 @@ package org.rhq.enterprise.gui.coregui.client.util;
import com.smartgwt.client.util.SC;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -28,7 +29,7 @@ import java.util.List;
public class ErrorHandler {
- private List<String> errors;
+ private ArrayList<String> errors = new ArrayList<String>();
public void handleError(String message, Throwable t) {
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 c979e3f..f484c29 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
@@ -49,20 +49,28 @@ public abstract class RPCDataSource extends DataSource {
setClientOnly(false);
setDataProtocol(DSProtocol.CLIENTCUSTOM);
setDataFormat(DSDataFormat.CUSTOM);
+
}
+
+
@Override
protected Object transformRequest(DSRequest request) {
try {
+ DSResponse response = createResponse(request);
+
switch (request.getOperationType()) {
case FETCH:
- DSResponse response = createResponse(request);
executeFetch(request, response);
break;
case ADD:
+ executeAdd(request, response);
+ break;
case UPDATE:
+ executeUpdate(request, response);
+ break;
case REMOVE:
- super.transformRequest(request);
+ executeRemove(request, response);
break;
default:
super.transformRequest(request);
@@ -123,6 +131,14 @@ public abstract class RPCDataSource extends DataSource {
throw new UnsupportedOperationException("This dataSource does not support
removal.");
}
+ protected void executeAdd(final DSRequest request, final DSResponse response) {
+ throw new UnsupportedOperationException("This dataSource does not support
addition.");
+ }
+
+ protected void executeUpdate(final DSRequest request, final DSResponse response) {
+ throw new UnsupportedOperationException("This dataSource does not support
updates.");
+ }
+
private DSResponse createResponse(DSRequest request) {
DSResponse response = new DSResponse();
response.setAttribute("clientContext",
request.getAttributeAsObject("clientContext"));
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
index a4ae911..867de6e 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java
@@ -21,12 +21,15 @@ package org.rhq.enterprise.gui.coregui.server.gwt;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.rhq.core.domain.criteria.ResourceGroupCriteria;
+import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
+import org.rhq.core.domain.resource.group.GroupDefinition;
import org.rhq.core.domain.resource.group.ResourceGroup;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.gwt.ResourceGroupGWTService;
import org.rhq.enterprise.gui.coregui.server.util.SerialUtility;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerBean;
import org.rhq.enterprise.server.resource.group.ResourceGroupManagerLocal;
+import org.rhq.enterprise.server.resource.group.definition.GroupDefinitionManagerLocal;
import org.rhq.enterprise.server.util.LookupUtil;
@@ -36,10 +39,19 @@ import org.rhq.enterprise.server.util.LookupUtil;
public class ResourceGroupGWTServiceImpl extends AbstractGWTServiceImpl implements
ResourceGroupGWTService {
private ResourceGroupManagerLocal groupManager =
LookupUtil.getResourceGroupManager();
+ private GroupDefinitionManagerLocal definitionManager =
LookupUtil.getGroupDefinitionManager();
+
public PageList<ResourceGroup>
findResourceGroupsByCriteria(ResourceGroupCriteria criteria) {
return
SerialUtility.prepare(groupManager.findResourceGroupsByCriteria(getSessionSubject(),
criteria),
"ResourceGroupService.findResourceGroupsByCriteria");
}
+ // TODO GH: build and expose findResourceGroupCompositesByCriteria
+
+ public PageList<GroupDefinition>
findGroupDefinitionsByCriteria(ResourceGroupDefinitionCriteria criteria) {
+ return
SerialUtility.prepare(definitionManager.findGroupDefinitionsByCriteria(getSessionSubject(),
criteria),
+ "ResourceGroupService.findGroupDefinitionsByCriteria");
+ }
+
}
\ No newline at end of file
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
index 360e078..373322f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/RoleGWTServiceImpl.java
@@ -47,4 +47,19 @@ public class RoleGWTServiceImpl extends AbstractGWTServiceImpl
implements RoleGW
return SerialUtility.prepare(roleManager.findRolesByCriteria(getSessionSubject(),
criteria),
"RoleService.findRolesByCriteria");
}
+
+ public Role createRole(Role role) {
+ return SerialUtility.prepare(roleManager.createRole(getSessionSubject(), role),
+ "RoleService.createRole");
+ }
+
+ public Role updateRole(Role role) {
+ return SerialUtility.prepare(roleManager.updateRole(getSessionSubject(), role),
+ "RoleService.updateRole");
+ }
+
+ public void removeRoles(Integer[] roleIds) {
+ roleManager.deleteRoles(getSessionSubject(), roleIds);
+ }
+
}
\ No newline at end of file
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
index f347e10..a46900c 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/SubjectGWTServiceImpl.java
@@ -39,19 +39,20 @@ public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl
implements Sub
private SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
public void changePassword(String username, String password) {
- // TODO: Implement this method.
+ subjectManager.changePassword(getSessionSubject(), username, password);
}
public void createPrincipal(String username, String password) {
- // TODO: Implement this method.
+ subjectManager.createPrincipal(getSessionSubject(), username, password);
}
public Subject createSubject(Subject subjectToCreate) {
- return null; // TODO: Implement this method.
+ return SerialUtility.prepare(subjectManager.createSubject(getSessionSubject(),
subjectToCreate),
+ "SubjectManager.createSubject");
}
public void deleteSubjects(int[] subjectIds) {
- // TODO: Implement this method.
+ subjectManager.deleteSubjects(getSessionSubject(),subjectIds);
}
public Subject login(String username, String password) {
@@ -63,11 +64,12 @@ public class SubjectGWTServiceImpl extends AbstractGWTServiceImpl
implements Sub
}
public void logout(Subject subject) {
- // TODO: Implement this method.
+ subjectManager.logout(subject.getSessionId());
}
public Subject updateSubject(Subject subjectToModify) {
- return null; // TODO: Implement this method.
+ return SerialUtility.prepare(subjectManager.updateSubject(getSessionSubject(),
subjectToModify),
+ "SubjectManager.updateSubject");
}
public PageList<Subject> findSubjectsByCriteria(SubjectCriteria criteria) {
commit c5a5bf943e8e0f1e584ec5650a9707be919a7868
Author: Greg Hinkle <ghinkle(a)redhat.com>
Date: Tue Mar 2 10:39:55 2010 -0500
Group Definition criteria query access
diff --git
a/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupDefinitionCriteria.java
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupDefinitionCriteria.java
new file mode 100644
index 0000000..9116dc8
--- /dev/null
+++
b/modules/core/domain/src/main/java/org/rhq/core/domain/criteria/ResourceGroupDefinitionCriteria.java
@@ -0,0 +1,108 @@
+/*
+ * RHQ Management Platform
+ * Copyright (C) 2005-2008 Red Hat, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation, and/or the GNU Lesser
+ * General Public License, version 2.1, also as published by the Free
+ * Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License and the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * and the GNU Lesser General Public License along with this program;
+ * if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.rhq.core.domain.criteria;
+
+import org.rhq.core.domain.resource.group.GroupDefinition;
+import org.rhq.core.domain.util.PageOrdering;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+
+/**
+ * @author Greg Hinkle
+ */
+(a)XmlAccessorType(XmlAccessType.FIELD)
+@SuppressWarnings("unused")
+public class ResourceGroupDefinitionCriteria extends Criteria {
+ private static final long serialVersionUID = 1L;
+
+
+ private Integer filterId;
+ private String filterName;
+ private String filterDescription;
+ private Boolean filterRecursive;
+ private String filterExpression;
+
+ private boolean fetchManagedResourceGroups;
+
+ private PageOrdering sortName;
+ private PageOrdering sortDescription;
+ private PageOrdering sortRecursive;
+ private PageOrdering sortExpression;
+
+
+ public ResourceGroupDefinitionCriteria() {
+ super(GroupDefinition.class);
+ }
+
+ @Override
+ public Class getPersistentClass() {
+ return GroupDefinition.class;
+ }
+
+ public void addFilterId(Integer filterId) {
+ this.filterId = filterId;
+ }
+
+ public void addFilterName(String filterName) {
+ this.filterName = filterName;
+ }
+
+ public void addFilterDescription(String filterDescription) {
+ this.filterDescription = filterDescription;
+ }
+
+ public void addFilterRecursive(Boolean filterRecursive) {
+ this.filterRecursive = filterRecursive;
+ }
+
+ public void addFilterExpression(String filterExpression) {
+ this.filterExpression = filterExpression;
+ }
+
+
+ public void fetchManagedResourceGroups(boolean fetchManagedResourceGroups) {
+ this.fetchManagedResourceGroups = fetchManagedResourceGroups;
+ }
+
+
+ public void addSortName(PageOrdering sortName) {
+ addSortField("name");
+ this.sortName = sortName;
+ }
+
+ public void addSortDescription(PageOrdering sortDescription) {
+ addSortField("description");
+ this.sortDescription = sortDescription;
+ }
+
+ public void addSortRecursive(PageOrdering sortRecursive) {
+ addSortField("recursive");
+ this.sortRecursive = sortRecursive;
+ }
+
+ public void addSortExpression(PageOrdering sortExpression) {
+ addSortField("expression");
+ this.sortExpression = sortExpression;
+ }
+}
\ No newline at end of file
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
index 3a3f842..9dc3430 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerBean.java
@@ -51,6 +51,8 @@ import org.rhq.core.db.PostgresqlDatabaseType;
import org.rhq.core.db.SQLServerDatabaseType;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
+import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
+import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.domain.resource.composite.ResourceFacets;
import org.rhq.core.domain.resource.group.GroupDefinition;
@@ -65,6 +67,7 @@ import org.rhq.core.util.jdbc.JDBCUtil;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.authz.AuthorizationManagerLocal;
+import org.rhq.enterprise.server.authz.PermissionException;
import org.rhq.enterprise.server.authz.RequiredPermission;
import org.rhq.enterprise.server.resource.ResourceManagerLocal;
import org.rhq.enterprise.server.resource.ResourceTypeManagerLocal;
@@ -81,6 +84,8 @@ import
org.rhq.enterprise.server.resource.group.definition.framework.ExpressionE
import
org.rhq.enterprise.server.resource.group.definition.framework.InvalidExpressionException;
import
org.rhq.enterprise.server.resource.group.definition.mbean.GroupDefinitionRecalculationThreadMonitor;
import
org.rhq.enterprise.server.resource.group.definition.mbean.GroupDefinitionRecalculationThreadMonitorMBean;
+import org.rhq.enterprise.server.util.CriteriaQueryGenerator;
+import org.rhq.enterprise.server.util.CriteriaQueryRunner;
@Stateless
@javax.annotation.Resource(name = "RHQ_DS", mappedName =
RHQConstants.DATASOURCE_JNDI_NAME)
@@ -555,6 +560,20 @@ public class GroupDefinitionManagerBean implements
GroupDefinitionManagerLocal {
}
}
+ public PageList<GroupDefinition> findGroupDefinitionsByCriteria(Subject
subject, ResourceGroupDefinitionCriteria criteria) {
+ CriteriaQueryGenerator generator = new CriteriaQueryGenerator(criteria);
+ if (authorizationManager.isInventoryManager(subject) == false) {
+ if (criteria.isInventoryManagerRequired()) {
+ throw new PermissionException("Subject [" + subject.getName()
+ + "] requires InventoryManager permission for requested query
criteria.");
+ }
+ }
+
+ CriteriaQueryRunner<GroupDefinition> queryRunner = new
CriteriaQueryRunner(criteria, generator, entityManager);
+
+ return queryRunner.execute();
+ }
+
public int getGroupDefinitionCount(Subject subject) {
if (authorizationManager.isInventoryManager(subject)) {
Query queryCount = PersistenceUtility.createCountQuery(entityManager,
GroupDefinition.QUERY_FIND_ALL);
diff --git
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerLocal.java
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerLocal.java
index a7c8a86..4738625 100644
---
a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerLocal.java
+++
b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/resource/group/definition/GroupDefinitionManagerLocal.java
@@ -21,6 +21,7 @@ package org.rhq.enterprise.server.resource.group.definition;
import javax.ejb.Local;
import org.rhq.core.domain.auth.Subject;
+import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria;
import org.rhq.core.domain.resource.group.GroupDefinition;
import org.rhq.core.domain.resource.group.composite.ResourceGroupComposite;
import org.rhq.core.domain.util.PageControl;
@@ -60,6 +61,8 @@ public interface GroupDefinitionManagerLocal {
PageList<GroupDefinition> getGroupDefinitions(Subject subject, PageControl
pc);
+ PageList<GroupDefinition> findGroupDefinitionsByCriteria(Subject subject,
ResourceGroupDefinitionCriteria criteria);
+
int getGroupDefinitionCount(Subject subject);
int getAutoRecalculationGroupDefinitionCount(Subject subject);