Java tutorial
/* * Copyright 2010 Vodafone Group Services Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package org.onesocialweb.gwt.client.ui.widget; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.onesocialweb.gwt.client.task.DefaultTaskInfo; import org.onesocialweb.gwt.client.task.TaskMonitor; import org.onesocialweb.gwt.client.task.TaskInfo.Status; import org.onesocialweb.gwt.service.OswService; import org.onesocialweb.gwt.service.OswServiceFactory; import org.onesocialweb.gwt.service.RequestCallback; import org.onesocialweb.gwt.service.RosterItem; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.ValueChangeEvent; import com.google.gwt.event.logical.shared.ValueChangeHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.TextBox; public class ListSelector extends FlowPanel { private StyledFlowPanel wrapper = new StyledFlowPanel("wrapper"); private final RosterItem rosterItem; private List<String> listed = null; public ListSelector(final RosterItem rosterItem) { this.rosterItem = rosterItem; addStyleName("listselector"); StyledFlowPanel buttons = new StyledFlowPanel("buttons"); add(wrapper); add(buttons); final TextBox input = new TextBox(); Button add = new Button("Create new list"); buttons.add(input); buttons.add(add); // get all available lists for your complete roster OswService service = OswServiceFactory.getService(); Set<String> groups = service.getRoster().getGroups(); // try to get all the lists this person is on try { listed = rosterItem.getGroups(); } catch (NullPointerException e) { listed = new ArrayList<String>(); } // add all lists as checkboxes if (groups.size() > 0) { for (String list : groups) { if (list != null) addCheckbox(list, false); } } add.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { // add a new option to the list and check it addCheckbox(input.getText(), true); // empty the input field input.setText(""); } }); } public void addCheckbox(String list, Boolean value) { final CheckBox checkbox = new CheckBox(list); StyledFlowPanel fix = new StyledFlowPanel("fix"); checkbox.addStyleName("checkbox"); // manage checks and unchecks checkbox.addValueChangeHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { // is the item is checked? if (event.getValue() == true && !listed.contains(checkbox.getText()) && checkbox.getText() != null && checkbox.getText().length() != 0) { // set the values listed.add(checkbox.getText()); rosterItem.setGroups(listed); // disable during processing checkbox.setEnabled(false); // show task final DefaultTaskInfo task = new DefaultTaskInfo("Adding person to the list", false); TaskMonitor.getInstance().addTask(task); // save new state rosterItem.save(new RequestCallback<RosterItem>() { @Override public void onFailure() { // return to original state and notify user checkbox.setEnabled(true); checkbox.setValue(true); task.complete("Could not add person to list.", Status.failure); } @Override public void onSuccess(RosterItem result) { // enable the checkbox again checkbox.setEnabled(true); task.complete("", Status.succes); } }); } else if (event.getValue() == false && listed.contains(checkbox.getText())) { // set the values listed.remove(checkbox.getText()); rosterItem.setGroups(listed); // disable during processing checkbox.setEnabled(false); // show task final DefaultTaskInfo task = new DefaultTaskInfo("Removing person from the list", false); TaskMonitor.getInstance().addTask(task); // save new state rosterItem.save(new RequestCallback<RosterItem>() { @Override public void onFailure() { // return to original state and notify user checkbox.setEnabled(true); checkbox.setValue(true); task.complete("Could not remove person from the list.", Status.failure); } @Override public void onSuccess(RosterItem result) { // enable the checkbox again checkbox.setEnabled(true); task.complete("", Status.succes); } }); } } }); // if this person is already on the list make sure the checkbox is // checked if (listed != null && list.length() > 0 && listed.contains(list)) { checkbox.setValue(true); } else if (value == true) { // if a new checkbox is added automatically check it and fire a // change event checkbox.setValue(true); checkbox.fireEvent(new ValueChangeEvent<Boolean>(true) { }); } if (checkbox.getText() != null && checkbox.getText().length() != 0) { wrapper.add(checkbox); wrapper.add(fix); } } }