/* * RHQ Management Platform * Copyright (C) 2005-2013 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.coregui.client.bundle.group; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.data.Criteria; import com.smartgwt.client.types.ListGridFieldType; import com.smartgwt.client.widgets.Canvas; import com.smartgwt.client.widgets.events.DoubleClickEvent; import com.smartgwt.client.widgets.events.DoubleClickHandler; 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.core.domain.authz.Permission; import org.rhq.core.domain.bundle.BundleGroup; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.IconEnum; import org.rhq.coregui.client.LinkManager; import org.rhq.coregui.client.components.table.AbstractTableAction; import org.rhq.coregui.client.components.table.TableActionEnablement; import org.rhq.coregui.client.components.table.TableSection; import org.rhq.coregui.client.components.view.HasViewName; import org.rhq.coregui.client.components.view.ViewName; import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.util.ErrorHandler; import org.rhq.coregui.client.util.StringUtility; import org.rhq.coregui.client.util.enhanced.EnhancedIButton.ButtonColor; import org.rhq.coregui.client.util.message.Message; import org.rhq.coregui.client.util.message.Message.Severity; /** * Shows a list of bundle groups in the system. The list gives you some actions but proper permissions are required. * * @author Jay Shaughnessy */ public class BundleGroupsListView extends TableSection<BundleGroupsDataSource> implements HasViewName { public static final ViewName VIEW_ID = new ViewName("BundleGroups", MSG.common_title_bundleGroups(), IconEnum.BUNDLE_GROUP); private final Set<Permission> globalPermissions; /** * Creates a new list view. * * @param globalPermissions if null, no buttons will be active, otherwise normal authz in place */ public BundleGroupsListView(Set<Permission> globalPermissions) { this(null, globalPermissions); } public BundleGroupsListView(Criteria criteria, Set<Permission> globalpermissions) { super(MSG.common_title_bundleGroups(), criteria); this.globalPermissions = (null != globalpermissions) ? globalpermissions : new HashSet<Permission>(); setTitleIcon(IconEnum.BUNDLE_GROUP.getIcon24x24Path()); setDataSource(new BundleGroupsDataSource()); } @Override protected void configureTable() { ListGridField idField = new ListGridField(BundleGroupsDataSource.FIELD_ID, MSG.common_title_id()); idField.setType(ListGridFieldType.INTEGER); idField.setWidth("50"); ListGridField nameField = new ListGridField(BundleGroupsDataSource.FIELD_NAME, MSG.common_title_name()); nameField.setWidth("33%"); nameField.setCellFormatter(new CellFormatter() { public String format(Object value, ListGridRecord record, int i, int i1) { return "<a href=\"" + record.getAttribute(BundleGroupsDataSource.FIELD_NAMELINK) + "\">" + StringUtility.escapeHtml(String.valueOf(value)) + "</a>"; } }); ListGridField descField = new ListGridField(BundleGroupsDataSource.FIELD_DESCRIPTION, MSG.common_title_description()); descField.setWidth("*"); descField.setCellFormatter(new CellFormatter() { public String format(Object value, ListGridRecord record, int i, int i1) { return StringUtility.escapeHtml(String.valueOf(value)); } }); setListGridFields(idField, nameField, descField); setListGridDoubleClickHandler(new DoubleClickHandler() { @Override public void onDoubleClick(DoubleClickEvent event) { ListGrid listGrid = (ListGrid) event.getSource(); ListGridRecord[] selectedRows = listGrid.getSelectedRecords(); if (selectedRows != null && selectedRows.length == 1) { String selectedId = selectedRows[0].getAttribute(BundleGroupsDataSource.FIELD_ID); CoreGUI.goToView(LinkManager.getBundleGroupLink(Integer.valueOf(selectedId))); } } }); boolean hasAuthz = globalPermissions.contains(Permission.MANAGE_BUNDLE_GROUPS); addTableAction(MSG.common_button_new(), null, ButtonColor.BLUE, new AbstractTableAction( (hasAuthz) ? TableActionEnablement.ALWAYS : TableActionEnablement.NEVER) { public void executeAction(ListGridRecord[] selection, Object actionValue) { newDetails(); } }); addTableAction(MSG.common_button_delete(), MSG.view_bundleGroup_deleteConfirm(), ButtonColor.RED, new AbstractTableAction((hasAuthz) ? TableActionEnablement.ANY : TableActionEnablement.NEVER) { public void executeAction(ListGridRecord[] selections, Object actionValue) { if (selections == null || selections.length == 0) { return; } BundleGroupsDataSource ds = getDataSource(); final ArrayList<String> doomedNames = new ArrayList<String>(selections.length); int[] doomedIds = new int[selections.length]; int i = 0; for (ListGridRecord selection : selections) { BundleGroup object = ds.copyValues(selection); doomedNames.add(object.getName()); doomedIds[i++] = object.getId(); } GWTServiceLookup.getBundleService().deleteBundleGroups(doomedIds, new AsyncCallback<Void>() { public void onFailure(Throwable caught) { String names = doomedNames.toString(); String error = ErrorHandler.getAllMessages(caught); Message m = new Message(MSG.view_bundleGroup_deletesFailure(), names + "<br/>\n" + error, Severity.Error); CoreGUI.getMessageCenter().notify(m); } public void onSuccess(Void result) { Message m = new Message(MSG.view_bundleGroup_deletesSuccessful(), doomedNames.toString(), Severity.Info); CoreGUI.getMessageCenter().notify(m); CoreGUI.refresh(); } }); } }); } @Override public void newDetails() { // protect against the fact that we may not have a basepath set if we have not been navigated to directly // (for example, we may be in a section stack) if (null != getBasePath()) { super.newDetails(); } else { CoreGUI.goToView(LinkManager.getBundleGroupLink(0)); } } @Override public Canvas getDetailsView(Integer bundleGroupId) { return new BundleGroupEditView(globalPermissions, bundleGroupId); } @Override public ViewName getViewName() { return VIEW_ID; } }