/*
* 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.groups.detail.inventory;
import java.util.Set;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.types.Alignment;
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.ResourceGroupCriteria;
import org.rhq.core.domain.resource.group.GroupCategory;
import org.rhq.core.domain.resource.group.ResourceGroup;
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 ResourceGroupMembershipView extends EnhancedVLayout {
private int resourceGroupId;
private ResourceGroup resourceGroup;
private ResourceGroupResourceSelector selector;
private ClickHandler saveButtonHandler;
private ClickHandler cancelButtonHandler;
public ResourceGroupMembershipView(int resourceGroupId) {
super();
this.resourceGroupId = resourceGroupId;
}
/**
* 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;
}
/**
* Allows an external component to hook into the cancel button. The given
* handler will be invoked when the cancel button is pressed. If <code>null</code>
* is given, then no external handler will be called.
*
* @param cancelButtonHandler
*/
public void setCancelButtonHandler(ClickHandler cancelButtonHandler) {
this.cancelButtonHandler = cancelButtonHandler;
}
@Override
protected void onDraw() {
super.onDraw();
build();
}
public void build() {
final ToolStrip toolStrip = new ToolStrip();
toolStrip.setWidth100();
//toolStrip.setExtraSpace(10);
toolStrip.setMembersMargin(5);
toolStrip.setLayoutMargin(5);
toolStrip.setAlign(Alignment.RIGHT);
IButton cancelButton = new EnhancedIButton(MSG.common_button_cancel());
cancelButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
if (ResourceGroupMembershipView.this.cancelButtonHandler != null) {
ResourceGroupMembershipView.this.cancelButtonHandler.onClick(clickEvent);
}
destroy();
}
});
toolStrip.addMember(cancelButton);
IButton saveButton = new EnhancedIButton(MSG.common_button_save(), ButtonColor.BLUE);
saveButton.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent clickEvent) {
save();
if (ResourceGroupMembershipView.this.saveButtonHandler != null) {
ResourceGroupMembershipView.this.saveButtonHandler.onClick(clickEvent);
}
}
});
toolStrip.addMember(saveButton);
ResourceGroupCriteria c = new ResourceGroupCriteria();
c.addFilterId(this.resourceGroupId);
c.fetchExplicitResources(true);
c.fetchResourceType(true);
GWTServiceLookup.getResourceGroupService().findResourceGroupsByCriteria(c,
new AsyncCallback<PageList<ResourceGroup>>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(MSG.view_group_membership_failFetch(), caught);
}
public void onSuccess(PageList<ResourceGroup> result) {
ResourceGroup group = result.get(0);
ResourceGroupMembershipView.this.resourceGroup = group;
ResourceGroupMembershipView.this.selector = new ResourceGroupResourceSelector(
group.getExplicitResources(),
(GroupCategory.COMPATIBLE == ResourceGroupMembershipView.this.resourceGroup.getGroupCategory()) ? group
.getResourceType() : null, false);
addMember(ResourceGroupMembershipView.this.selector);
addMember(toolStrip);
markForRedraw();
}
});
}
private void save() {
int[] resourceIds = getSelectedResourceIds();
GWTServiceLookup.getResourceGroupService().setAssignedResources(this.resourceGroup.getId(), resourceIds, true,
new AsyncCallback<Void>() {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler()
.handleError(
MSG.view_group_membership_saveFailure(ResourceGroupMembershipView.this.resourceGroup
.getName()), caught);
}
public void onSuccess(Void result) {
CoreGUI.getMessageCenter().notify(
new Message(MSG
.view_group_membership_saveSuccessful(ResourceGroupMembershipView.this.resourceGroup
.getName()), Message.Severity.Info));
CoreGUI.refresh();
}
});
}
private int[] getSelectedResourceIds() {
Set<Integer> selectedIds = this.selector.getSelection();
int[] selection = new int[selectedIds.size()];
int i = 0;
for (Integer id : selectedIds) {
selection[i++] = id;
}
return selection;
}
}