/*
* RHQ Management Platform
* Copyright 2011, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* 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.coregui.client.inventory.resource.detail.operation.history;
import java.util.List;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Label;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
import org.rhq.core.domain.configuration.definition.ConfigurationDefinition;
import org.rhq.core.domain.criteria.ResourceOperationHistoryCriteria;
import org.rhq.core.domain.operation.GroupOperationHistory;
import org.rhq.core.domain.operation.OperationDefinition;
import org.rhq.core.domain.operation.OperationRequestStatus;
import org.rhq.core.domain.operation.ResourceOperationHistory;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.composite.ResourceComposite;
import org.rhq.core.domain.util.PageList;
import org.rhq.coregui.client.CoreGUI;
import org.rhq.coregui.client.LinkManager;
import org.rhq.coregui.client.components.configuration.ConfigurationEditor;
import org.rhq.coregui.client.gwt.GWTServiceLookup;
import org.rhq.coregui.client.inventory.common.detail.operation.history.AbstractOperationHistoryDetailsView;
import org.rhq.coregui.client.util.enhanced.EnhancedVLayout;
/**
* @author Ian Springer
*/
public class ResourceOperationHistoryDetailsView extends AbstractOperationHistoryDetailsView<ResourceOperationHistory> {
private String disambiguatedResourceName;
private boolean showResourceField;
@SuppressWarnings("unused")
private ResourceComposite resourceComposite;
public ResourceOperationHistoryDetailsView() {
this(false);
}
public ResourceOperationHistoryDetailsView(ResourceComposite resourceComposite) {
this(false);
this.resourceComposite = resourceComposite;
}
public ResourceOperationHistoryDetailsView(boolean showResourceField) {
super();
this.showResourceField = showResourceField;
}
@Override
protected List<FormItem> createFields(ResourceOperationHistory operationHistory) {
List<FormItem> items = super.createFields(operationHistory);
if (this.showResourceField) {
StaticTextItem resourceItem = new StaticTextItem(ResourceOperationHistoryDataSource.Field.RESOURCE,
"Resource");
resourceItem.setValue(this.disambiguatedResourceName);
items.add(1, resourceItem);
}
GroupOperationHistory groupOperationHistory = operationHistory.getGroupOperationHistory();
if (groupOperationHistory != null) {
StaticTextItem groupOperationHistoryItem = new StaticTextItem(
ResourceOperationHistoryDataSource.Field.GROUP_OPERATION_HISTORY, "Parent Group Execution");
String groupOperationHistoryUrl = LinkManager.getGroupOperationHistoryLink(
groupOperationHistory.getGroup(), groupOperationHistory.getId());
String value = "<a href=\"" + groupOperationHistoryUrl + "\">" + groupOperationHistory.getId()
+ "</a> (on group '" + groupOperationHistory.getGroup().getName() + "')";
groupOperationHistoryItem.setValue(value);
items.add(groupOperationHistoryItem);
}
return items;
}
protected void lookupDetails(int historyId) {
ResourceOperationHistoryCriteria criteria = new ResourceOperationHistoryCriteria();
criteria.addFilterId(historyId);
criteria.fetchOperationDefinition(true);
criteria.fetchParameters(true);
criteria.fetchResults(true);
GWTServiceLookup.getOperationService().findResourceOperationHistoriesByCriteria(criteria,
new AsyncCallback<PageList<ResourceOperationHistory>>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler()
.handleError(MSG.view_operationHistoryDetails_error_fetchFailure(), caught);
}
public void onSuccess(PageList<ResourceOperationHistory> result) {
ResourceOperationHistory resourceOperationHistory = result.get(0);
if (showResourceField) {
Resource resource = resourceOperationHistory.getResource();
String url = LinkManager.getResourceLink(resource.getId());
disambiguatedResourceName = LinkManager.getHref(url, resource.getName());
}
displayDetails(resourceOperationHistory);
}
});
}
@Override
protected Canvas buildResultsSection(ResourceOperationHistory operationHistory) {
OperationRequestStatus status = operationHistory.getStatus();
if (status == OperationRequestStatus.SUCCESS || status == OperationRequestStatus.FAILURE) {
EnhancedVLayout resultsSection = new EnhancedVLayout();
Label title = new Label("<h4>" + MSG.view_operationHistoryDetails_results() + "</h4>");
title.setHeight(27);
resultsSection.addMember(title);
OperationDefinition operationDefinition = operationHistory.getOperationDefinition();
ConfigurationDefinition resultsConfigurationDefinition = operationDefinition
.getResultsConfigurationDefinition();
if (resultsConfigurationDefinition != null
&& !resultsConfigurationDefinition.getPropertyDefinitions().isEmpty()
&& operationHistory.getResults() != null) {
ConfigurationEditor editor = new ConfigurationEditor(
operationDefinition.getResultsConfigurationDefinition(), operationHistory.getResults());
editor.setPreserveTextFormatting(true);
editor.setReadOnly(true);
resultsSection.addMember(editor);
} else {
Label noResultsLabel = new Label(MSG.view_operationHistoryDetails_noResults());
noResultsLabel.setHeight(17);
resultsSection.addMember(noResultsLabel);
}
return resultsSection;
} else {
return null;
}
}
}