modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ResourceGroupGWTService.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/ResourceGroupsDataSource.java | 12 +- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionDataSource.java | 21 +-- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java | 59 ++++++++-- modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java | 52 ++++++++ modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java | 4 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java | 1 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/RPCDataSource.java | 1 modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ResourceGroupGWTServiceImpl.java | 10 + 9 files changed, 131 insertions(+), 33 deletions(-)
New commits: commit a03a5f6757ac252cfd91f5578129e46a5ed54866 Author: Joseph Marques joseph@redhat.com Date: Tue Sep 21 01:37:40 2010 -0400
more dynagroup CRUD work:
* add list of dynagroup children to details view * add ability to recalculate the current group def from details view * fix column widths and cell formatting for list view * add ability to recalculate selected group definitions from list view
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 00e8819..f0fe978 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 @@ -110,6 +110,11 @@ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup> { "downMemberCount"))); }
+ if (request.getCriteria().getValues().get("groupDefinitionId") != null) { + criteria.addFilterGroupDefinitionId(Integer.parseInt((String) request.getCriteria().getValues().get( + "groupDefinitionId"))); + } + return criteria; }
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 index a95e0e6..49ea417 100644 --- 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 @@ -30,7 +30,6 @@ 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.widgets.grid.ListGridRecord;
import org.rhq.core.domain.criteria.ResourceGroupDefinitionCriteria; @@ -70,23 +69,21 @@ public class GroupDefinitionDataSource extends RPCDataSource<GroupDefinition> {
DataSourceTextField descriptionField = new DataSourceTextField("description", "Description");
- DataSourceTextField expressionField = new DataSourceTextField("expression", "Expression"); + DataSourceTextField expressionField = new DataSourceTextField("expression", "Expression Set"); expressionField.setRequired(true);
- DataSourceTextField recursiveField = new DataSourceTextField("recursive", "Recursive"); - recursiveField.setType(FieldType.BOOLEAN); - - /* - DataSourceTextField recalculationIntervalField = new DataSourceTextField("recalculationInterval", + DataSourceIntegerField lastCalculationTimeIntervalField = new DataSourceIntegerField("lastCalculationTime", "Recalculation Interval"); - */
- DataSourceTextField nextCalculationTimeField = new DataSourceTextField("nextCalculationTime", + DataSourceIntegerField nextCalculationTimeField = new DataSourceIntegerField("nextCalculationTime", "Next Calculation Time");
- setFields(idField, nameField, descriptionField, expressionField, recursiveField, /*recalculationIntervalField,*/ - nextCalculationTimeField); - + addField(idField); + addField(nameField); + addField(descriptionField); + addField(expressionField); + addField(lastCalculationTimeIntervalField); + addField(nextCalculationTimeField); }
@Override diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java index d6d78e5..9b17abf 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/GroupDefinitionListView.java @@ -21,13 +21,14 @@ package org.rhq.enterprise.gui.coregui.client.inventory.groups.definitions; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.widgets.Canvas; 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 org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.components.table.Table; import org.rhq.enterprise.gui.coregui.client.components.table.TableAction; import org.rhq.enterprise.gui.coregui.client.components.table.TableSection; +import org.rhq.enterprise.gui.coregui.client.components.table.TimestampCellFormatter; 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.TableUtility; @@ -50,25 +51,71 @@ public class GroupDefinitionListView extends TableSection {
@Override protected void configureTable() { - super.configureTable();
- ListGrid grid = getListGrid(); + ListGridField idField = new ListGridField("id", "ID", 50); + ListGridField nameField = new ListGridField("name", "Name", 150); + ListGridField descriptionField = new ListGridField("description", "Description"); + ListGridField expressionField = new ListGridField("expression", "Expression Set", 250); + expressionField.setCellFormatter(new CellFormatter() { + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + return value.toString().replaceAll("\n", "<br/>"); + } + }); + + ListGridField lastCalculationTimeField = new ListGridField("lastCalculationTime", "Last Calculation Time", 175); + //lastCalculationTimeField.setAlign(Alignment.CENTER); + lastCalculationTimeField.setCellFormatter(new TimestampCellFormatter() { + public String format(Object value, ListGridRecord record, int rowNum, int colNum) { + if (value == null) { + return "Never"; + } + return super.format(value, record, rowNum, colNum); + } + });
- grid.getField("nextCalculationTime").setCellFormatter(new CellFormatter() { + ListGridField nextCalculationTimeField = new ListGridField("nextCalculationTime", "Next Calculation Time", 175); + //nextCalculationTimeField.setAlign(Alignment.CENTER); + nextCalculationTimeField.setCellFormatter(new TimestampCellFormatter() { public String format(Object value, ListGridRecord record, int rowNum, int colNum) { - if ("0".equals(value.toString())) { + if (value == null || "0".equals(value.toString())) { return "N/A"; } - return value.toString(); + return super.format(value, record, rowNum, colNum); } });
+ getListGrid().setFields(idField, nameField, descriptionField, expressionField, lastCalculationTimeField, + nextCalculationTimeField); + addTableAction(extendLocatorId("New"), "New", Table.SelectionEnablement.ALWAYS, null, new TableAction() { public void executeAction(ListGridRecord[] selection) { newDetails(); } });
+ addTableAction(extendLocatorId("Recalculate"), "Recalculate", Table.SelectionEnablement.ANY, null, + new TableAction() { + public void executeAction(ListGridRecord[] selection) { + final int[] groupDefinitionIds = TableUtility.getIds(selection); + ResourceGroupGWTServiceAsync resourceGroupManager = GWTServiceLookup.getResourceGroupService(); + + resourceGroupManager.recalculateGroupDefinitions(groupDefinitionIds, new AsyncCallback<Void>() { + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError("Failed to recalculate selected group definitions", + caught); + } + + public void onSuccess(Void result) { + CoreGUI.getMessageCenter().notify( + new Message("Successfully recalculated " + groupDefinitionIds.length + + " group definitions", Severity.Info)); + + GroupDefinitionListView.this.refresh(); + } + }); + } + }); + addTableAction(extendLocatorId("Delete"), "Delete", Table.SelectionEnablement.ANY, null, new TableAction() { public void executeAction(ListGridRecord[] selection) { final int[] groupDefinitionIds = TableUtility.getIds(selection); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java index 1639a92..f4ca2cf 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java @@ -23,6 +23,7 @@ import java.util.Set;
import com.google.gwt.user.client.History; import com.google.gwt.user.client.rpc.AsyncCallback; +import com.smartgwt.client.data.Criteria; import com.smartgwt.client.data.DSCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; @@ -45,7 +46,11 @@ import org.rhq.enterprise.gui.coregui.client.BookmarkableView; import org.rhq.enterprise.gui.coregui.client.CoreGUI; import org.rhq.enterprise.gui.coregui.client.ViewId; import org.rhq.enterprise.gui.coregui.client.ViewPath; +import org.rhq.enterprise.gui.coregui.client.components.table.Table; import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup; +import org.rhq.enterprise.gui.coregui.client.inventory.groups.ResourceGroupsDataSource; +import org.rhq.enterprise.gui.coregui.client.util.message.Message; +import org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableDynamicForm; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableIButton; import org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout; @@ -131,16 +136,48 @@ public class SingleGroupDefinitionView extends LocatableVLayout implements Bookm form.setSaveOperationType(DSOperationType.UPDATE); }
+ final DynaGroupChildrenView dynaGroupChildrenView = new DynaGroupChildrenView(extendLocatorId("DynaGroups"), + groupDefinitionId); + // button setup IButton saveButton = new LocatableIButton(this.extendLocatorId("Save"), "Save"); saveButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { public void onClick(com.smartgwt.client.widgets.events.ClickEvent clickEvent) { if (form.validate()) { - //createOrUpdate(); form.saveData(new DSCallback() { @Override public void execute(DSResponse response, Object rawData, DSRequest request) { - History.back(); + dynaGroupChildrenView.refresh(); + } + }); + } + } + }); + + IButton recalculateButton = new LocatableIButton(this.extendLocatorId("Recalculate"), "Save & Recalculate"); + recalculateButton.setWidth(150); + recalculateButton.addClickHandler(new com.smartgwt.client.widgets.events.ClickHandler() { + public void onClick(com.smartgwt.client.widgets.events.ClickEvent clickEvent) { + if (form.validate()) { + form.saveData(new DSCallback() { + @Override + public void execute(DSResponse response, Object rawData, DSRequest request) { + GWTServiceLookup.getResourceGroupService().recalculateGroupDefinitions( + new int[] { groupDefinitionId }, new AsyncCallback<Void>() { + @Override + public void onFailure(Throwable caught) { + CoreGUI.getErrorHandler().handleError( + "Failed to recalculate this group definition", caught); + } + + @Override + public void onSuccess(Void result) { + dynaGroupChildrenView.refresh(); + CoreGUI.getMessageCenter().notify( + new Message("Successfully recalculated this group definition", + Severity.Info)); + } + }); } }); } @@ -157,15 +194,25 @@ public class SingleGroupDefinitionView extends LocatableVLayout implements Bookm HLayout buttonLayout = new HLayout(10); // margin between members buttonLayout.setMargin(10); // margin around layout widget buttonLayout.addMember(saveButton); + buttonLayout.addMember(recalculateButton); buttonLayout.addMember(resetButton);
// canvas setup addMember(form); addMember(buttonLayout); + addMember(dynaGroupChildrenView);
markForRedraw(); }
+ class DynaGroupChildrenView extends Table { + public DynaGroupChildrenView(String locatorId, int groupDefinitionId) { + super(locatorId, "DynaGroup Children", new Criteria("groupDefinitionId", String.valueOf(groupDefinition + .getId()))); + setDataSource(ResourceGroupsDataSource.getInstance()); + } + } + public void switchToEditMode() { name.show(); description.show(); diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java index 71f1996..e1bed72 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceSearchView.java @@ -106,7 +106,6 @@ public class ResourceSearchView extends Table { protected void configureTable() {
getListGrid().setSelectionType(SelectionStyle.SIMPLE); - getListGrid().setResizeFieldsInRealTime(true);
ListGridField idField = new ListGridField("id", "Id", 55); idField.setType(ListGridFieldType.INTEGER);
commit c97a7a3d47cadd9405d9becdfda5beb3da783e8a Author: Joseph Marques joseph@redhat.com Date: Tue Sep 21 01:29:37 2010 -0400
add recalculation method to the ResourceGroup GWT service
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 333427f..d475aa8 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 @@ -30,6 +30,7 @@ import org.rhq.core.domain.util.PageList;
/** * @author Greg Hinkle + * @author Joseph Marques */ @RemoteServiceRelativePath("ResourceGroupGWTService") public interface ResourceGroupGWTService extends RemoteService { @@ -48,6 +49,8 @@ public interface ResourceGroupGWTService extends RemoteService {
PageList<ResourceGroupComposite> findResourceGroupCompositesByCriteria(ResourceGroupCriteria criteria);
+ void recalculateGroupDefinitions(int[] groupDefinitionIds); + void setMembership(int groupId, int[] resourceIds, boolean setType);
void updateGroupDefinition(GroupDefinition groupDefinition); @@ -55,5 +58,4 @@ public interface ResourceGroupGWTService extends RemoteService { void updateResourceGroup(ResourceGroup group);
void updateResourceGroup(ResourceGroup group, boolean updateMembership); - } \ No newline at end of file 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 b9642d6..07b9168 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 @@ -132,6 +132,16 @@ public class ResourceGroupGWTServiceImpl extends AbstractGWTServiceImpl implemen } }
+ public void recalculateGroupDefinitions(int[] groupDefinitionIds) { + try { + for (int nextGroupDefinitionId : groupDefinitionIds) { + definitionManager.calculateGroupMembership(getSessionSubject(), nextGroupDefinitionId); + } + } catch (Throwable t) { + throw new RuntimeException(ThrowableUtil.getAllMessages(t)); + } + } + public void deleteGroupDefinitions(int[] groupDefinitionIds) { try { for (int nextGroupDefinitionId : groupDefinitionIds) {
commit a8203c775172bf83d9aa611433f7c051fa253f7d Author: Joseph Marques joseph@redhat.com Date: Mon Sep 20 22:14:15 2010 -0400
remove redundant data caching methods from ResourceGroupsDatasource
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 00e9389..00e8819 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 @@ -54,10 +54,7 @@ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup> { }
public ResourceGroupsDataSource() { - - // TODO until http://code.google.com/p/smartgwt/issues/detail?id=490 is fixed always go to the server for data - this.setAutoCacheAllData(false); - this.setCacheAllData(false); + super();
DataSourceField idDataField = new DataSourceIntegerField("id", "ID", 20); idDataField.setPrimaryKey(true); @@ -77,8 +74,6 @@ public class ResourceGroupsDataSource extends RPCDataSource<ResourceGroup> { }
public void executeFetch(final DSRequest request, final DSResponse response) { - final long start = System.currentTimeMillis(); - ResourceGroupCriteria criteria = getFetchCriteria(request);
groupService.findResourceGroupsByCriteria(criteria, new AsyncCallback<PageList<ResourceGroup>>() {
commit a5b3075fb496babadb208e2be2b1d4c5f2e92a1e Author: Joseph Marques joseph@redhat.com Date: Mon Sep 20 22:05:17 2010 -0400
remove redundant data caching methods from ResourceDatasource
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java index 280cb89..8a55ed7 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/ResourceDatasource.java @@ -58,10 +58,6 @@ public class ResourceDatasource extends RPCDataSource<Resource> { public ResourceDatasource() { super();
- // TODO until http://code.google.com/p/smartgwt/issues/detail?id=490 is fixed always go to the server for data - this.setAutoCacheAllData(false); - this.setCacheAllData(false); - DataSourceField idDataField = new DataSourceIntegerField("id", "ID", 20); idDataField.setPrimaryKey(true);
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 dd5e77b..5b3ecf7 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 @@ -58,6 +58,7 @@ public abstract class RPCDataSource<T> extends DataSource { System.out.println("Trying to build DS: " + name); setID(name); } + // TODO until http://code.google.com/p/smartgwt/issues/detail?id=490 is fixed always go to the server for data setClientOnly(false); setAutoCacheAllData(false); setCacheAllData(false);
commit f4d2f1663b3beffe728af06df3aa7a12737fc201 Author: Joseph Marques joseph@redhat.com Date: Mon Sep 20 13:13:58 2010 -0400
remove unnecessary set for number of columns
diff --git a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java index 7b5ea42..1639a92 100644 --- a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java +++ b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/groups/definitions/SingleGroupDefinitionView.java @@ -122,7 +122,6 @@ public class SingleGroupDefinitionView extends LocatableVLayout implements Bookm final LocatableDynamicForm form = new LocatableDynamicForm(extendLocatorId("GroupDefinitionForm")); form.setFields(id, idStatic, name, nameStatic, description, descriptionStatic, expression, expressionStatic, recursive, recursiveStatic, recalculationInterval, recalculationIntervalStatic); - form.setNumCols(2); form.setDataSource(dataSource); form.setHiliteRequiredFields(true); form.setRequiredTitleSuffix(" <span style="color: red;">* </span>:");
rhq-commits@lists.fedorahosted.org