modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
| 5
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDataSource.java
| 237 ++++++++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDetailView.java
| 16
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
| 148 +++---
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
| 18
modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
| 21
6 files changed, 339 insertions(+), 106 deletions(-)
New commits:
commit e88da782dbd2e6fbcfff6081fb028f93a831bef3
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Feb 23 20:35:11 2011 -0500
bz 679130 more fixing of the res config history page
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDataSource.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDataSource.java
index 034a133..83f730e 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDataSource.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDataSource.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.configuration;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -27,20 +28,37 @@ 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.types.FieldType;
+import com.smartgwt.client.types.Alignment;
+import com.smartgwt.client.types.DateDisplayFormat;
+import com.smartgwt.client.types.ListGridFieldType;
+import com.smartgwt.client.widgets.Canvas;
+import com.smartgwt.client.widgets.grid.CellFormatter;
+import com.smartgwt.client.widgets.grid.HoverCustomizer;
+import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
+import com.smartgwt.client.widgets.grid.events.RecordClickEvent;
+import com.smartgwt.client.widgets.grid.events.RecordClickHandler;
+import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.criteria.ResourceConfigurationUpdateCriteria;
+import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
+import org.rhq.enterprise.gui.coregui.client.ErrorMessageWindow;
+import org.rhq.enterprise.gui.coregui.client.ImageManager;
+import org.rhq.enterprise.gui.coregui.client.LinkManager;
import org.rhq.enterprise.gui.coregui.client.gwt.ConfigurationGWTServiceAsync;
import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import org.rhq.enterprise.gui.coregui.client.util.RPCDataSource;
+import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
+ * A data source that loads information about all the configuration changes that
happened
+ * for a resource or across all inventory.
+ *
* @author Greg Hinkle
+ * @author John Mazzitelli
*/
public class ConfigurationHistoryDataSource extends
RPCDataSource<ResourceConfigurationUpdate> {
@@ -52,9 +70,11 @@ public class ConfigurationHistoryDataSource extends
RPCDataSource<ResourceConfig
public static final String SUBJECT = "subject";
public static final String RESOURCE_TYPE_ID = "resourceTypeId";
public static final String CONFIGURATION = "configuration";
+ public static final String GROUP_CONFIG_UPDATE_ID =
"groupConfigUpdateId";
public static final String DURATION = "duration";
public static final String ERROR_MESSAGE = "errorMessage";
public static final String MODIFIED_TIME = "modifiedTime";
+ public static final String CURRENT_CONFIG = "currentConfig"; // will be
true if the history item represents the current config
public static final String OBJECT = "object"; // the full entity object
is stored in this attribute
}
@@ -70,32 +90,155 @@ public class ConfigurationHistoryDataSource extends
RPCDataSource<ResourceConfig
addFields(fields);
}
- @Override
- protected List<DataSourceField> addDataSourceFields() {
- List<DataSourceField> fields = super.addDataSourceFields();
+ /**
+ * Views that use this data source can call this method to get a list of fields
+ * that can be used in a list grid to show the data for this data source.
+ *
+ * @param includeResourceFields if true, the list of fields that are returned will
+ * include fields to show individual resource data.
+ * Pass in false if you are only collecting data on a
+ * single resource, since you don't need every row
to
+ * show the same data on the same resource.
+ * @return fields
+ */
+ public ArrayList<ListGridField> getListGridFields(boolean
includeResourceFields) {
+ ArrayList<ListGridField> fields = new ArrayList<ListGridField>();
- DataSourceIntegerField idField = new DataSourceIntegerField(Field.ID,
- MSG.dataSource_configurationHistory_field_id());
- idField.setPrimaryKey(true);
+ ListGridField idField = new ListGridField(Field.ID, MSG.common_title_id());
+ idField.setShowHover(true);
+ idField.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ if (Boolean.parseBoolean(record.getAttribute(Field.CURRENT_CONFIG))) {
+ return MSG.dataSource_configurationHistory_currentConfig();
+ }
+ return null;
+ }
+ });
fields.add(idField);
- DataSourceTextField resourceField = new DataSourceTextField(Field.RESOURCE,
- MSG.dataSource_configurationHistory_field_resource());
- fields.add(resourceField);
+ ListGridField submittedTimeField = new ListGridField(Field.CREATED_TIME, MSG
+ .dataSource_configurationHistory_dateSubmitted());
+ submittedTimeField.setType(ListGridFieldType.DATE);
+ submittedTimeField.setDateFormatter(DateDisplayFormat.TOLOCALESTRING);
+ fields.add(submittedTimeField);
- DataSourceTextField submittedField = new DataSourceTextField(Field.CREATED_TIME,
- MSG.dataSource_configurationHistory_field_createdTime());
- submittedField.setType(FieldType.DATETIME);
- fields.add(submittedField);
+ ListGridField completedTimeField = new ListGridField(Field.MODIFIED_TIME, MSG
+ .dataSource_configurationHistory_dateCompleted());
+ completedTimeField.setType(ListGridFieldType.DATE);
+ completedTimeField.setDateFormatter(DateDisplayFormat.TOLOCALESTRING);
+ fields.add(completedTimeField);
- DataSourceTextField statusField = new DataSourceTextField(Field.STATUS,
- MSG.dataSource_configurationHistory_field_status());
+ ListGridField statusField = new ListGridField(Field.STATUS,
MSG.common_title_status());
+ statusField.setAlign(Alignment.CENTER);
+ statusField.setCellFormatter(new CellFormatter() {
+ public String format(Object value, ListGridRecord listGridRecord, int i, int
i1) {
+ ConfigurationUpdateStatus status =
ConfigurationUpdateStatus.valueOf(value.toString());
+ return Canvas.imgHTML(ImageManager.getResourceConfigurationIcon(status),
16, 16);
+ }
+ });
+ statusField.setShowHover(true);
+ statusField.setHoverCustomizer(new HoverCustomizer() {
+ @Override
+ public String hoverHTML(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ String html = null;
+ String err = record.getAttribute(Field.ERROR_MESSAGE);
+ if (err != null && err.length() > 0) {
+ html = MSG.dataSource_configurationHistory_clickToSeeError();
+ } else {
+ ConfigurationUpdateStatus status =
ConfigurationUpdateStatus.valueOf(record
+ .getAttribute(Field.STATUS));
+ switch (status) {
+ case SUCCESS: {
+ html = MSG.common_status_success();
+ break;
+ }
+ case FAILURE: {
+ html = MSG.common_status_failed();
+ break;
+ }
+ case INPROGRESS: {
+ html = MSG.common_status_inprogress();
+ break;
+ }
+ case NOCHANGE: {
+ html = MSG.common_status_success();
+ break;
+ }
+ }
+ }
+ return html;
+ }
+ });
+ statusField.addRecordClickHandler(new RecordClickHandler() {
+ @Override
+ public void onRecordClick(RecordClickEvent event) {
+ String err = event.getRecord().getAttribute(Field.ERROR_MESSAGE);
+ if (err != null && err.length() > 0) {
+ err = "<pre>" + err + "</pre>";
+ new ErrorMessageWindow("errWin", MSG.common_title_error(),
err).show();
+ }
+ }
+ });
fields.add(statusField);
- DataSourceTextField subjectField = new DataSourceTextField(Field.SUBJECT,
- MSG.dataSource_configurationHistory_field_subject());
+ ListGridField subjectField = new ListGridField(Field.SUBJECT,
MSG.common_title_user());
fields.add(subjectField);
+ ListGridField updateTypeField = new ListGridField(Field.GROUP_CONFIG_UPDATE_ID,
MSG
+ .dataSource_configurationHistory_updateType());
+ updateTypeField.setCellFormatter(new CellFormatter() {
+ @Override
+ public String format(Object value, ListGridRecord record, int rowNum, int
colNum) {
+ if (value == null) {
+ return MSG.dataSource_configurationHistory_updateType_individual();
+ }
+ return MSG.dataSource_configurationHistory_updateType_group();
+ }
+ });
+ fields.add(updateTypeField);
+
+ // determine the widths of our columns
+ if (includeResourceFields) {
+ ListGridField resourceField = new ListGridField(Field.RESOURCE,
MSG.common_title_resource());
+ resourceField.setCellFormatter(new CellFormatter() {
+ public String format(Object o, ListGridRecord listGridRecord, int i, int
i1) {
+ if (listGridRecord == null) {
+ return "unknown";
+ }
+ Resource res = (Resource)
listGridRecord.getAttributeAsObject(Field.RESOURCE);
+ String url = LinkManager.getResourceLink(res.getId());
+ // TODO disambiguate the resource name
+ return SeleniumUtility.getLocatableHref(url, res.getName(), null);
+ }
+ });
+ fields.add(resourceField);
+
+ idField.setWidth("10%");
+ submittedTimeField.setWidth("20%");
+ completedTimeField.setWidth("20%");
+ statusField.setWidth("10%");
+ subjectField.setWidth("10%");
+ updateTypeField.setWidth("10%");
+ resourceField.setWidth("*");
+ } else {
+ idField.setWidth("10%");
+ submittedTimeField.setWidth("20%");
+ completedTimeField.setWidth("20%");
+ statusField.setWidth("10%");
+ subjectField.setWidth("10%");
+ updateTypeField.setWidth("*");
+ }
+
+ return fields;
+ }
+
+ @Override
+ protected List<DataSourceField> addDataSourceFields() {
+ List<DataSourceField> fields = super.addDataSourceFields();
+ DataSourceIntegerField idField = new DataSourceIntegerField(Field.ID,
MSG.common_title_id());
+ idField.setPrimaryKey(true);
+ fields.add(idField);
return fields;
}
@@ -105,10 +248,11 @@ public class ConfigurationHistoryDataSource extends
RPCDataSource<ResourceConfig
ResourceConfigurationUpdateCriteria criteria = new
ResourceConfigurationUpdateCriteria();
criteria.fetchConfiguration(true);
criteria.fetchResource(true);
+ criteria.fetchGroupConfigurationUpdate(true);
criteria.setPageControl(getPageControl(request));
- Integer resourceId = (Integer)
request.getCriteria().getValues().get(CriteriaField.RESOURCE_ID);
+ final Integer resourceId = (Integer)
request.getCriteria().getValues().get(CriteriaField.RESOURCE_ID);
if (resourceId != null) {
criteria.addFilterResourceIds(resourceId);
}
@@ -122,10 +266,43 @@ public class ConfigurationHistoryDataSource extends
RPCDataSource<ResourceConfig
processResponse(request.getRequestId(), response);
}
- public void onSuccess(PageList<ResourceConfigurationUpdate> result)
{
- response.setData(buildRecords(result));
- response.setTotalRows(result.getTotalSize());
- processResponse(request.getRequestId(), response);
+ public void onSuccess(final PageList<ResourceConfigurationUpdate>
result) {
+ final ListGridRecord[] records = buildRecords(result);
+ if (resourceId == null) {
+ response.setData(records);
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+ return; // we can finish now, we don't need any additional
information
+ }
+
+ // we are obtaining a single resource's history items. Let's
find out which is
+ // its latest, current config item so we can mark it as such
+
configurationService.getLatestResourceConfigurationUpdate(resourceId.intValue(),
+ new AsyncCallback<ResourceConfigurationUpdate>() {
+ @Override
+ public void onSuccess(ResourceConfigurationUpdate
latestResult) {
+ if (latestResult != null) {
+ for (ListGridRecord record : records) {
+ boolean latest =
record.getAttributeAsInt(Field.ID).intValue() == latestResult
+ .getId();
+ record.setAttribute(Field.CURRENT_CONFIG,
latest);
+ }
+ }
+ finish();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ // should we show an error message? this just means we
can't show any item as the "current" one
+ finish();
+ }
+
+ private void finish() {
+ response.setData(records);
+ response.setTotalRows(result.getTotalSize());
+ processResponse(request.getRequestId(), response);
+ }
+ });
}
});
}
@@ -142,12 +319,18 @@ public class ConfigurationHistoryDataSource extends
RPCDataSource<ResourceConfig
record.setAttribute(Field.RESOURCE, from.getResource());
record.setAttribute(Field.RESOURCE_TYPE_ID,
from.getResource().getResourceType().getId());
record.setAttribute(Field.SUBJECT, from.getSubjectName());
+ record.setAttribute(Field.STATUS, from.getStatus().name());
record.setAttribute(Field.CONFIGURATION, from.getConfiguration());
- record.setAttribute(Field.CREATED_TIME, new Date(from.getCreatedTime()));
record.setAttribute(Field.DURATION, from.getDuration());
record.setAttribute(Field.ERROR_MESSAGE, from.getErrorMessage());
- record.setAttribute(Field.MODIFIED_TIME, new Date(from.getModifiedTime()));
- record.setAttribute(Field.STATUS, from.getStatus().name());
+ record.setAttribute(Field.CREATED_TIME, new Date(from.getCreatedTime()));
+ // if it is still in progress, the modified time (which we label as "date
completed") is meaningless since it isn't completed yet
+ if (from.getStatus() != ConfigurationUpdateStatus.INPROGRESS) {
+ record.setAttribute(Field.MODIFIED_TIME, new Date(from.getModifiedTime()));
+ }
+ if (from.getGroupConfigurationUpdate() != null) {
+ record.setAttribute(Field.GROUP_CONFIG_UPDATE_ID,
from.getGroupConfigurationUpdate().getId());
+ }
record.setAttribute(Field.OBJECT, from);
return record;
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
index d758fcb..9062e3b 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
@@ -23,17 +23,15 @@ import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
+import com.smartgwt.client.types.SortDirection;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.CellFormatter;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
-import org.rhq.core.domain.configuration.ConfigurationUpdateStatus;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
-import org.rhq.core.domain.resource.Resource;
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.ImageManager;
-import org.rhq.enterprise.gui.coregui.client.LinkManager;
import
org.rhq.enterprise.gui.coregui.client.components.configuration.ConfigurationComparisonView;
import org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableAction;
import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
@@ -46,7 +44,10 @@ import
org.rhq.enterprise.gui.coregui.client.util.message.Message.Severity;
import org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
+ * The main view that lists all resource configuration history items.
+ *
* @author Greg Hinkle
+ * @author John Mazzitelli
*/
public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryDataSource> {
public static final ViewName VIEW_ID = new
ViewName("RecentConfigurationChanges", MSG
@@ -59,7 +60,8 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
*/
public ConfigurationHistoryView(String locatorId) {
super(locatorId, VIEW_ID.getTitle());
- final ConfigurationHistoryDataSource datasource = new
ConfigurationHistoryDataSource();
+ this.resourceId = null;
+ ConfigurationHistoryDataSource datasource = new
ConfigurationHistoryDataSource();
setDataSource(datasource);
}
@@ -83,52 +85,29 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
@Override
protected void configureTable() {
- List<ListGridField> fields = new ArrayList<ListGridField>();
-
- ListGridField idField = new
ListGridField(ConfigurationHistoryDataSource.Field.ID, 60);
- fields.add(idField);
+ List<ListGridField> fields =
getDataSource().getListGridFields(this.resourceId == null);
+ setListGridFields(true, fields.toArray(new ListGridField[fields.size()])); //
true = always show the ID field
+ getListGrid().sort(Field.ID, SortDirection.DESCENDING);
- ListGridField createdTimeField = new
ListGridField(ConfigurationHistoryDataSource.Field.CREATED_TIME, 200);
- fields.add(createdTimeField);
-
- if (this.resourceId == null) {
- ListGridField resourceField = new
ListGridField(ConfigurationHistoryDataSource.Field.RESOURCE);
- resourceField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int i, int
i1) {
- if (listGridRecord == null) {
- return "unknown";
+ addTableAction(extendLocatorId("Delete"), MSG.common_button_delete(),
MSG.common_msg_areYouSure(),
+ new AbstractTableAction(TableActionEnablement.ANY) {
+ public void executeAction(ListGridRecord[] selection, Object actionValue)
{
+ if (selection != null && selection.length > 0) {
+ int[] doomedIds = new int[selection.length];
+ int i = 0;
+ for (ListGridRecord selected : selection) {
+ doomedIds[i] = selected.getAttributeAsInt(Field.ID);
+ if (selected.getAttribute(Field.GROUP_CONFIG_UPDATE_ID) !=
null) {
+ CoreGUI.getMessageCenter().notify(
+ new
Message(MSG.view_configurationHistoryList_cannotDeleteGroupItems(),
+ Severity.Warning));
+ return; // abort
+ }
+ }
+ delete(doomedIds);
}
- Resource res = (Resource) listGridRecord
-
.getAttributeAsObject(ConfigurationHistoryDataSource.Field.RESOURCE);
- String url = LinkManager.getResourceLink(res.getId());
- return SeleniumUtility.getLocatableHref(url, res.getName(), null);
}
});
- fields.add(resourceField);
- }
-
- ListGridField statusField = new
ListGridField(ConfigurationHistoryDataSource.Field.STATUS, 100);
- statusField.setCellFormatter(new CellFormatter() {
- public String format(Object o, ListGridRecord listGridRecord, int i, int i1)
{
- ConfigurationUpdateStatus status =
ConfigurationUpdateStatus.valueOf((String) o);
- return Canvas.imgHTML(ImageManager.getResourceConfigurationIcon(status),
16, 16);
- }
- });
- fields.add(statusField);
-
- ListGridField subjectField = new
ListGridField(ConfigurationHistoryDataSource.Field.SUBJECT, 150);
- fields.add(subjectField);
-
- setListGridFields(fields.toArray(new ListGridField[fields.size()]));
-
- addTableAction(extendLocatorId("Delete"), MSG.common_button_delete(),
MSG.common_msg_deleteConfirm(MSG
-
.common_msg_deleteConfirm(MSG.view_configurationHistoryList_itemNamePlural())), new
AbstractTableAction(
- TableActionEnablement.ANY) {
- public void executeAction(ListGridRecord[] selection, Object actionValue) {
- // TODO: Implement this method.
-
CoreGUI.getErrorHandler().handleError(MSG.common_msg_notYetImplemented());
- }
- });
addTableAction(extendLocatorId("Compare"), MSG.common_button_compare(),
null, new AbstractTableAction(
TableActionEnablement.MULTIPLE) {
@@ -146,8 +125,10 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
addTableAction(extendLocatorId("Rollback"),
MSG.view_configurationHistoryList_rollback(), null,
new AbstractTableAction(TableActionEnablement.SINGLE) {
public void executeAction(ListGridRecord[] selection, Object actionValue)
{
- ListGridRecord record = selection[0];
- rollback(record.getAttributeAsInt(Field.ID).intValue());
+ if (selection != null && selection.length == 1) {
+ ListGridRecord record = selection[0];
+ rollback(record.getAttributeAsInt(Field.ID).intValue());
+ }
}
});
@@ -156,7 +137,23 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
@Override
protected String getDetailsLinkColumnName() {
- return Field.CREATED_TIME;
+ return Field.ID;
+ }
+
+ @Override
+ protected CellFormatter getDetailsLinkColumnCellFormatter() {
+ return new CellFormatter() {
+ public String format(Object value, ListGridRecord record, int i, int i1) {
+ Integer recordId = getId(record);
+ String detailsUrl = "#" + getBasePath() + "/" +
recordId;
+ String cellHtml = SeleniumUtility.getLocatableHref(detailsUrl,
value.toString(), null);
+ String isCurrentConfig = record.getAttribute(Field.CURRENT_CONFIG);
+ if (Boolean.parseBoolean(isCurrentConfig)) {
+ cellHtml = Canvas.imgHTML(ImageManager.getApproveIcon()) + cellHtml;
+ }
+ return cellHtml;
+ }
+ };
}
@Override
@@ -172,6 +169,7 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
public void onSuccess(Void result) {
CoreGUI.getMessageCenter().notify(
new Message(MSG.view_configurationHistoryList_rollback_success(),
Severity.Info));
+ CoreGUI.refresh();
}
@Override
@@ -181,6 +179,23 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
});
}
+ private void delete(int[] doomedIds) {
+
GWTServiceLookup.getConfigurationService().purgeResourceConfigurationUpdates(doomedIds,
true,
+ new AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void result) {
+ CoreGUI.getMessageCenter().notify(
+ new Message(MSG.view_configurationHistoryList_delete_success(),
Severity.Info));
+ CoreGUI.refresh();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+
CoreGUI.getErrorHandler().handleError(MSG.view_configurationHistoryList_delete_failure(),
caught);
+ }
+ });
+ }
+
// -------- Static Utility loaders ------------
public static ConfigurationHistoryView getHistoryOf(String locatorId, int resourceId)
{
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index 2582d0b..d2ad927 100644
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -480,11 +480,13 @@ dataSource_operationHistory_startedTime = Started Time
# Configuration History
#-------------------------------
-dataSource_configurationHistory_field_id = ID
-dataSource_configurationHistory_field_resource = Resource
-dataSource_configurationHistory_field_createdTime = Created
-dataSource_configurationHistory_field_status = Status
-dataSource_configurationHistory_field_subject = Subject
+dataSource_configurationHistory_dateSubmitted = Date Submitted
+dataSource_configurationHistory_dateCompleted = Date Completed
+dataSource_configurationHistory_updateType = Update Type
+dataSource_configurationHistory_updateType_individual = Individual
+dataSource_configurationHistory_updateType_group = Group
+dataSource_configurationHistory_currentConfig = This is the current configuration
+dataSource_configurationHistory_clickToSeeError = Double click to see error message...
dataSource_configurationHistory_error_fetchFailure = Unable to load configuration
history.
# Resource Errors
@@ -1742,10 +1744,13 @@ view_configurationDetails_somePropertiesInvalid = The following
configuration pr
# Configuration History List
view_configurationHistoryList_title = Configuration History
-view_configurationHistoryList_itemNamePlural = configuration history items
view_configurationHistoryList_rollback = Rollback
view_configurationHistoryList_rollback_success = You successfully rolled back the
resource configuration to the selected past configuration.
view_configurationHistoryList_rollback_failure = Failed to rollback the configuration.
The original configuration is still in effect.
+view_configurationHistoryList_delete_success = You successfully deleted the selected
configuration history items.
+view_configurationHistoryList_delete_failure = Failed to delete the configuration history
items.
+view_configurationHistoryList_cannotDeleteGroupItems = One or more selected configuration
history items are part of a group configuration update. \
+You must purge that parent group history item before you can delete its individual
resource history items.
# Configuration History Details
#------------------------------------------
commit 8f0490a3b644e86002422fbc2aace8e688f8ca32
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Feb 23 14:45:08 2011 -0500
part of BZ 679130 - add rollback button to resource config history view
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
index cb28a85..25bc2dd 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/ConfigurationGWTService.java
@@ -25,6 +25,11 @@ import org.rhq.core.domain.util.PageList;
*/
@RemoteServiceRelativePath("ConfigurationGWTService")
public interface ConfigurationGWTService extends RemoteService {
+
+ void purgeResourceConfigurationUpdates(int[] configUpdateIds, boolean
purgeInProgress) throws RuntimeException;
+
+ void rollbackResourceConfiguration(int resourceId, int configHistoryId) throws
RuntimeException;
+
ResourceConfigurationUpdate getLatestResourceConfigurationUpdate(int resourceId)
throws RuntimeException;
Configuration getPluginConfiguration(int resourceId) throws RuntimeException;
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDetailView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDetailView.java
index cc48ae9..136ba94 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDetailView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryDetailView.java
@@ -21,7 +21,6 @@ package
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.configur
import java.util.EnumSet;
import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.smartgwt.client.widgets.Window;
import org.rhq.core.domain.configuration.ResourceConfigurationUpdate;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
@@ -40,7 +39,7 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.LocatableVLayout;
* @author Greg Hinkle
*/
public class ConfigurationHistoryDetailView extends LocatableVLayout implements
BookmarkableView {
-
+
public ConfigurationHistoryDetailView(String locatorId) {
super(locatorId);
@@ -65,19 +64,6 @@ public class ConfigurationHistoryDetailView extends LocatableVLayout
implements
});
}
- public void displayInDialog() {
- Window window = new Window();
- window.setTitle(MSG.view_configurationHistoryDetails_dialogTitle());
- window.setWidth(800);
- window.setHeight(800);
- window.setIsModal(true);
- window.setShowModalMask(true);
- window.setCanDragResize(true);
- window.centerInPage();
- window.addItem(this);
- window.show();
- }
-
@Override
public void renderView(ViewPath viewPath) {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
index 14d74b3..d758fcb 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
@@ -21,6 +21,7 @@ package
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.configur
import java.util.ArrayList;
import java.util.List;
+import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.data.Criteria;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.grid.CellFormatter;
@@ -38,7 +39,10 @@ import
org.rhq.enterprise.gui.coregui.client.components.table.AbstractTableActio
import org.rhq.enterprise.gui.coregui.client.components.table.TableActionEnablement;
import org.rhq.enterprise.gui.coregui.client.components.table.TableSection;
import org.rhq.enterprise.gui.coregui.client.components.view.ViewName;
+import org.rhq.enterprise.gui.coregui.client.gwt.GWTServiceLookup;
import
org.rhq.enterprise.gui.coregui.client.inventory.resource.detail.configuration.ConfigurationHistoryDataSource.Field;
+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.SeleniumUtility;
/**
@@ -139,6 +143,14 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
}
});
+ addTableAction(extendLocatorId("Rollback"),
MSG.view_configurationHistoryList_rollback(), null,
+ new AbstractTableAction(TableActionEnablement.SINGLE) {
+ public void executeAction(ListGridRecord[] selection, Object actionValue)
{
+ ListGridRecord record = selection[0];
+ rollback(record.getAttributeAsInt(Field.ID).intValue());
+ }
+ });
+
super.configureTable();
}
@@ -150,10 +162,25 @@ public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryD
@Override
public Canvas getDetailsView(int id) {
ConfigurationHistoryDetailView detailView = new
ConfigurationHistoryDetailView(this.getLocatorId());
-
return detailView;
}
+ private void rollback(int configHistoryIdToRollbackTo) {
+
GWTServiceLookup.getConfigurationService().rollbackResourceConfiguration(this.resourceId.intValue(),
+ configHistoryIdToRollbackTo, new AsyncCallback<Void>() {
+ @Override
+ public void onSuccess(Void result) {
+ CoreGUI.getMessageCenter().notify(
+ new Message(MSG.view_configurationHistoryList_rollback_success(),
Severity.Info));
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+
CoreGUI.getErrorHandler().handleError(MSG.view_configurationHistoryList_rollback_failure(),
caught);
+ }
+ });
+ }
+
// -------- Static Utility loaders ------------
public static ConfigurationHistoryView getHistoryOf(String locatorId, int resourceId)
{
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
index d285b4b..9668517 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/ConfigurationGWTServiceImpl.java
@@ -47,6 +47,24 @@ public class ConfigurationGWTServiceImpl extends AbstractGWTServiceImpl
implemen
private ResourceManagerLocal resourceManager = LookupUtil.getResourceManager();
private ResourceGroupManagerLocal groupManager =
LookupUtil.getResourceGroupManager();
+ public void purgeResourceConfigurationUpdates(int[] configUpdateIds, boolean
purgeInProgress)
+ throws RuntimeException {
+ try {
+ configurationManager.purgeResourceConfigurationUpdates(getSessionSubject(),
configUpdateIds,
+ purgeInProgress);
+ } catch (Throwable t) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(t));
+ }
+ }
+
+ public void rollbackResourceConfiguration(int resourceId, int configHistoryId) throws
RuntimeException {
+ try {
+ configurationManager.rollbackResourceConfiguration(getSessionSubject(),
resourceId, configHistoryId);
+ } catch (Throwable t) {
+ throw new RuntimeException(ThrowableUtil.getAllMessages(t));
+ }
+ }
+
public ResourceConfigurationUpdate getLatestResourceConfigurationUpdate(int
resourceId) throws RuntimeException {
try {
ResourceConfigurationUpdate update =
configurationManager.getLatestResourceConfigurationUpdate(
diff --git
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
index 2e2cd19..2582d0b 100644
---
a/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
+++
b/modules/enterprise/gui/coregui/src/main/resources/org/rhq/enterprise/gui/coregui/client/Messages.properties
@@ -1743,10 +1743,12 @@ view_configurationDetails_somePropertiesInvalid = The following
configuration pr
# Configuration History List
view_configurationHistoryList_title = Configuration History
view_configurationHistoryList_itemNamePlural = configuration history items
+view_configurationHistoryList_rollback = Rollback
+view_configurationHistoryList_rollback_success = You successfully rolled back the
resource configuration to the selected past configuration.
+view_configurationHistoryList_rollback_failure = Failed to rollback the configuration.
The original configuration is still in effect.
# Configuration History Details
#------------------------------------------
-view_configurationHistoryDetails_dialogTitle = Configuration Details
view_configurationHistoryDetails_error_loadFailure = Unable to load configuration
history.
# Operation History List
commit c6e63ff13c49f901d77c33962296dd9903519729
Author: John Mazzitelli <mazz(a)redhat.com>
Date: Wed Feb 23 14:01:15 2011 -0500
this class already supports double-clicking to show details (TableSection).
no need for show details button, that is not consistent wiht the rest of the ui
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
index df13c8f..14d74b3 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/inventory/resource/detail/configuration/ConfigurationHistoryView.java
@@ -44,7 +44,7 @@ import
org.rhq.enterprise.gui.coregui.client.util.selenium.SeleniumUtility;
/**
* @author Greg Hinkle
*/
-public class ConfigurationHistoryView extends TableSection {
+public class ConfigurationHistoryView extends
TableSection<ConfigurationHistoryDataSource> {
public static final ViewName VIEW_ID = new
ViewName("RecentConfigurationChanges", MSG
.view_configurationHistoryList_title());
@@ -139,14 +139,6 @@ public class ConfigurationHistoryView extends TableSection {
}
});
- addTableAction(extendLocatorId("ShowDetail"),
MSG.common_button_showDetails(), null, new AbstractTableAction(
- TableActionEnablement.SINGLE) {
- public void executeAction(ListGridRecord[] selection, Object actionValue) {
- ListGridRecord record = selection[0];
- showDetails(record);
- }
- });
-
super.configureTable();
}