Package org.onesocialweb.gwt.client.ui.widget

Source Code of org.onesocialweb.gwt.client.ui.widget.ListSelector

/*
*  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);
    }

  }
}
TOP

Related Classes of org.onesocialweb.gwt.client.ui.widget.ListSelector

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.