/*
* 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, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* 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 and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser 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.inventory.groups.wizard;
import java.util.EnumSet;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.form.ValuesManager;
import com.smartgwt.client.widgets.form.fields.AutoFitTextAreaItem;
import com.smartgwt.client.widgets.form.fields.CheckboxItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.TextItem;
import com.smartgwt.client.widgets.form.fields.events.ChangedEvent;
import com.smartgwt.client.widgets.form.fields.events.ChangedHandler;
import org.rhq.core.domain.criteria.ResourceGroupCriteria;
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.components.wizard.AbstractWizardStep;
import org.rhq.coregui.client.gwt.GWTServiceLookup;
import org.rhq.coregui.client.gwt.ResourceGroupGWTServiceAsync;
import org.rhq.coregui.client.util.message.Message;
/**
* @author Greg Hinkle
*/
public class GroupCreateStep extends AbstractWizardStep {
private DynamicForm form;
private ResourceGroupGWTServiceAsync groupService;
boolean canContinue = false;
public GroupCreateStep() {
groupService = GWTServiceLookup.getResourceGroupService();
}
public Canvas getCanvas() {
if (form == null) {
form = new DynamicForm();
form.setValuesManager(new ValuesManager());
form.setWidth100();
form.setNumCols(2);
TextItem name = new TextItem("name", MSG.common_title_name());
name.setRequired(true);
name.setWidth(300);
name.setLength(100);
name.addChangedHandler(new ChangedHandler() {
@Override
public void onChanged(ChangedEvent changedEvent) {
final String newGroupName = form.getValueAsString("name");
ResourceGroupCriteria criteria = new ResourceGroupCriteria();
criteria.addFilterName(newGroupName);
criteria.addFilterVisible(true);
criteria.setRestriction(ResourceGroupCriteria.Restriction.COLLECTION_ONLY);
groupService.findResourceGroupsByCriteria(criteria, new AsyncCallback<PageList<ResourceGroup>>() {
@Override
public void onFailure(Throwable throwable) {
// failure is no issue - we will catch possible upd later
}
@Override
public void onSuccess(PageList<ResourceGroup> resourceGroups) {
// criteria query may return more than we want, so search for an exact match
boolean found = false;
for (ResourceGroup group : resourceGroups) {
if (group.getName().equals(newGroupName))
found = true;
}
if (found) {
canContinue = false;
Message msg = new Message(MSG
.view_groupCreateWizard_createStep_group_exists(newGroupName),
Message.Severity.Warning, EnumSet.of(Message.Option.Transient));
CoreGUI.getMessageCenter().notify(msg);
} else {
canContinue = true;
CoreGUI.getMessageCenter().notify(
new Message(MSG.view_selector_available(MSG.common_title_name()),
Message.Severity.Blank, EnumSet.of(Message.Option.Transient)));
}
}
});
}
});
TextAreaItem description = new AutoFitTextAreaItem("description", MSG.common_title_description());
description.setWidth(300);
description.setLength(100);
CheckboxItem recursive = new CheckboxItem("recursive", MSG.view_groupCreateWizard_createStep_recursive());
form.setFields(name, description, recursive);
}
return form;
}
public boolean nextPage() {
return form.validate() && canContinue;
}
public String getName() {
return MSG.view_groupCreateWizard_createStepName();
}
public ResourceGroup getGroup() {
ResourceGroup group = new ResourceGroup(form.getValueAsString("name"));
group.setDescription(form.getValueAsString("description"));
group.setRecursive(form.getValue("recursive") != null ? true : false);
return group;
}
}