/* * RHQ Management Platform * Copyright (C) 2005-2010 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.inventory.resource.detail.inventory; import java.util.Set; import com.google.gwt.user.client.rpc.AsyncCallback; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.toolbar.ToolStrip; import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.util.PageList; import org.rhq.coregui.client.CoreGUI; import org.rhq.coregui.client.gwt.GWTServiceLookup; import org.rhq.coregui.client.util.enhanced.EnhancedIButton; import org.rhq.coregui.client.util.enhanced.EnhancedVLayout; import org.rhq.coregui.client.util.enhanced.EnhancedIButton.ButtonColor; import org.rhq.coregui.client.util.message.Message; /** * @author Jay Shaughnessy */ public class ResourceResourceGroupsView extends EnhancedVLayout { private int resourceId; private Resource resource; private ResourceResourceGroupSelector selector; private ClickHandler saveButtonHandler; public ResourceResourceGroupsView(int resourceId) { super(); this.resourceId = resourceId; } /** * Allows an external component to hook into the save button. The given * handler will be invoked when the save button is pressed. If <code>null</code> * is given, then no external handler will be called. * * @param saveButtonHandler */ public void setSaveButtonHandler(ClickHandler saveButtonHandler) { this.saveButtonHandler = saveButtonHandler; } @Override protected void onDraw() { super.onDraw(); build(); } public void build() { ToolStrip toolStrip = new ToolStrip(); toolStrip.setWidth100(); toolStrip.setExtraSpace(10); toolStrip.setMembersMargin(5); toolStrip.setLayoutMargin(5); IButton saveButton = new EnhancedIButton(MSG.common_button_save(), ButtonColor.BLUE); saveButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent clickEvent) { save(); if (ResourceResourceGroupsView.this.saveButtonHandler != null) { ResourceResourceGroupsView.this.saveButtonHandler.onClick(clickEvent); } } }); toolStrip.addMember(saveButton); this.addMember(toolStrip); ResourceCriteria c = new ResourceCriteria(); c.addFilterId(this.resourceId); c.fetchExplicitGroups(true); GWTServiceLookup.getResourceService().findResourcesByCriteria(c, new AsyncCallback<PageList<Resource>>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_resourceResourceGroupList_error_fetchFailure(), caught); } public void onSuccess(PageList<Resource> result) { resource = result.get(0); ResourceResourceGroupsView.this.selector = new ResourceResourceGroupSelector(resource .getExplicitGroups()); addMember(ResourceResourceGroupsView.this.selector); } }); } private void save() { int[] resourceGroupIds = getSelectedResourceGroupIds(); GWTServiceLookup.getResourceGroupService().setAssignedResourceGroupsForResource(this.resource.getId(), resourceGroupIds, true, new AsyncCallback<Void>() { public void onFailure(Throwable caught) { CoreGUI.getErrorHandler().handleError(MSG.view_resourceResourceGroupList_error_updateFailure(), caught); } public void onSuccess(Void result) { CoreGUI .getMessageCenter() .notify( new Message( MSG.view_resourceResourceGroupList_message_updateSuccess(ResourceResourceGroupsView.this.resource .getName()), Message.Severity.Info)); CoreGUI.refresh(); } }); } private int[] getSelectedResourceGroupIds() { Set<Integer> selectedIds = this.selector.getSelection(); int[] selection = new int[selectedIds.size()]; int i = 0; for (Integer id : selectedIds) { selection[i++] = id; } return selection; } }