/* * RHQ Management Platform * Copyright (C) 2005-2014 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., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.coregui.client.bundle.deployment; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.types.Alignment; import com.smartgwt.client.types.AutoFitWidthApproach; import com.smartgwt.client.types.DateDisplayFormat; import com.smartgwt.client.types.ExpansionMode; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.types.SelectionStyle; import com.smartgwt.client.types.SortDirection; import com.smartgwt.client.types.VerticalAlignment; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.DoubleClickEvent; import com.smartgwt.client.widgets.events.DoubleClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.fields.StaticTextItem; import com.smartgwt.client.widgets.form.fields.TextAreaItem; import com.smartgwt.client.widgets.form.fields.events.ChangeEvent; import com.smartgwt.client.widgets.form.fields.events.ChangeHandler; 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.RecordClickEvent; import com.smartgwt.client.widgets.grid.events.RecordClickHandler; import org.rhq.core.domain.bundle.BundleDeploymentStatus; import org.rhq.core.domain.bundle.BundleResourceDeployment; import org.rhq.core.domain.bundle.BundleResourceDeploymentHistory; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.ErrorMessageWindow; import org.rhq.coregui.client.components.table.TimestampCellFormatter; import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.util.enhanced.EnhancedVLayout; /** * @author Greg Hinkle */ public class BundleResourceDeploymentHistoryListView extends EnhancedVLayout { private BundleResourceDeployment resourceDeployment; private HashMap<String, String> statusIcons; private ListGrid grid; public BundleResourceDeploymentHistoryListView(BundleResourceDeployment resourceDeployment) { super(); setWidth100(); setHeight100(); this.resourceDeployment = resourceDeployment; statusIcons = new HashMap<String, String>(); statusIcons.put(BundleDeploymentStatus.PENDING.name(), "subsystems/bundle/install-loader.gif"); statusIcons.put(BundleDeploymentStatus.IN_PROGRESS.name(), "subsystems/bundle/install-loader.gif"); statusIcons.put(BundleDeploymentStatus.FAILURE.name(), "subsystems/bundle/Error_11.png"); statusIcons.put(BundleDeploymentStatus.MIXED.name(), "subsystems/bundle/Warning_11.png"); statusIcons.put(BundleDeploymentStatus.SUCCESS.name(), "subsystems/bundle/Ok_11.png"); // bundle deployment history statuses are success/failure/warn/info - two of which have the same names/icons // as bundle-deployment-status. however, there is no "warn" or "info" in bundle-deployment-status, so add them here statusIcons.put(BundleResourceDeploymentHistory.Status.WARN.name(), "subsystems/bundle/Warning_11.png"); statusIcons.put(BundleResourceDeploymentHistory.Status.INFO.name(), "subsystems/bundle/Info_11.png"); } @Override protected void onInit() { super.onInit(); grid = new ListGrid(); grid.setWidth100(); grid.setHeight100(); grid.setSelectionType(SelectionStyle.SINGLE); grid.setCanExpandRecords(true); grid.setExpansionMode(ExpansionMode.DETAIL_FIELD); grid.setDetailField("message"); grid.setSortField("timestamp"); grid.setSortDirection(SortDirection.ASCENDING); grid.setEmptyMessage(MSG.common_msg_loading()); ListGridField action = new ListGridField("action", MSG.view_bundle_deploy_action()); action.setAutoFitWidth(true); action.setAutoFitWidthApproach(AutoFitWidthApproach.BOTH); ListGridField message = new ListGridField("info", MSG.common_severity_info()); message.setWidth("60%"); ListGridField user = new ListGridField("user", MSG.common_title_user()); user.setHidden(true); ListGridField timestamp = new ListGridField("timestamp", MSG.common_title_timestamp()); TimestampCellFormatter.prepareDateField(timestamp); timestamp.setWidth("40%"); ListGridField status = new ListGridField("status", MSG.common_title_status()); status.setValueIcons(statusIcons); status.setValueIconHeight(11); status.setValueIconWidth(11); status.setShowValueIconOnly(true); status.setAutoFitWidth(true); status.setAutoFitWidthApproach(AutoFitWidthApproach.BOTH); ListGridField details = new ListGridField("attachment", MSG.common_title_details()); details.setWidth(50); details.setAlign(Alignment.CENTER); details.setType(ListGridFieldType.ICON); details.setIconHeight(11); details.setIconWidth(11); details.setCellFormatter(new CellFormatter() { @Override public String format(Object o, ListGridRecord listGridRecord, int i, int i1) { return "<img src=\"images/subsystems/bundle/Details_11.png\"/>"; } }); details.addRecordClickHandler(new RecordClickHandler() { @Override public void onRecordClick(RecordClickEvent recordClickEvent) { showDetails((ListGridRecord) recordClickEvent.getRecord()); } }); grid.setFields(action, message, timestamp, status, user, details); grid.addDoubleClickHandler(new DoubleClickHandler() { @Override public void onDoubleClick(DoubleClickEvent event) { showDetails(grid.getSelectedRecord()); } }); addMember(grid); loadData(); } private void loadData() { GWTServiceLookup.getBundleService(30000).getBundleResourceDeploymentHistories(resourceDeployment.getId(), new AsyncCallback<List<BundleResourceDeploymentHistory>>() { @Override public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_bundle_tree_loadFailure(), caught); grid.setShowEmptyMessage(false); } @Override public void onSuccess(List<BundleResourceDeploymentHistory> result) { grid.setData(buildRecords(result)); grid.setShowEmptyMessage(false); } }); } private void showDetails(ListGridRecord record) { DynamicForm form = new DynamicForm(); form.setHeight100(); form.setWidth100(); form.setPadding(20); StaticTextItem status = new StaticTextItem("status", MSG.common_title_status()); status.setValueIcons(statusIcons); status.setValueIconHeight(11); status.setValueIconWidth(11); status.setShowValueIconOnly(true); StaticTextItem user = new StaticTextItem("user", MSG.common_title_user()); StaticTextItem timestamp = new StaticTextItem("timestamp", MSG.common_title_timestamp()); timestamp.setDateFormatter(DateDisplayFormat.TOLOCALESTRING); StaticTextItem action = new StaticTextItem("action", MSG.view_bundle_deploy_action()); StaticTextItem info = new StaticTextItem("info", MSG.common_severity_info()); StaticTextItem category = new StaticTextItem("category", MSG.common_title_category()); StaticTextItem message = new StaticTextItem("message", MSG.common_title_message()); message.setTitleVAlign(VerticalAlignment.TOP); TextAreaItem detail = new TextAreaItem("attachment", MSG.common_title_details()); detail.setTitleVAlign(VerticalAlignment.TOP); detail.setMinHeight(100); detail.setHeight("100%"); detail.setWidth("100%"); detail.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { event.cancel(); // we want the user to interact with the text to copy it, but not to edit it } }); form.setItems(timestamp, action, category, user, status, info, message, detail); form.editRecord(record); Window win = new ErrorMessageWindow(MSG.view_bundle_deploy_installDetails(), form); win.setWidth(500); win.show(); } private static ListGridRecord[] buildRecords(List<BundleResourceDeploymentHistory> histories) { ArrayList<ListGridRecord> records = new ArrayList<ListGridRecord>(); for (BundleResourceDeploymentHistory history : histories) { ListGridRecord record = new ListGridRecord(); record.setAttribute("id", history.getId()); record.setAttribute("action", history.getAction()); record.setAttribute("info", history.getInfo()); if (history.getCategory() != null) { record.setAttribute("category", history.getCategory().toString()); } record.setAttribute("message", history.getMessage()); record.setAttribute("attachment", history.getAttachment()); record.setAttribute("status", history.getStatus().name()); record.setAttribute("timestamp", new Date(history.getAuditTime())); record.setAttribute("user", history.getSubjectName()); records.add(record); } return records.toArray(new ListGridRecord[records.size()]); } }