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

Source Code of org.onesocialweb.gwt.client.ui.widget.activity.AbstractActivityPanel$StreamListener

/*
*  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.activity;

import java.util.List;

import org.onesocialweb.gwt.client.i18n.UserInterfaceText;
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.client.ui.widget.StyledLabel;
import org.onesocialweb.gwt.service.Stream;
import org.onesocialweb.gwt.service.StreamEvent;
import org.onesocialweb.gwt.service.StreamEvent.Type;
import org.onesocialweb.gwt.util.Observer;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Widget;

public abstract class AbstractActivityPanel<T> extends FlowPanel {
 
  // internationalization
  private UserInterfaceText uiText = (UserInterfaceText) GWT.create(UserInterfaceText.class);
 
  private Stream<T> model;

  private DefaultTaskInfo task;

  private boolean update = true;
 
  private StyledLabel msg = new StyledLabel("message",
      uiText.NoActivitiesAvailable());

  public void setModel(Stream<T> model) {
    this.model = model;

    // Add a listener on the inbox
    model.registerEventHandler(new StreamListener());

    // Repaint a first time
    repaint();
  }
 
  public boolean isUpdating() {
    return update;
  }
 
  public void setUpdating(boolean shouldUpdate) {
    update = shouldUpdate;
  }

  protected abstract Widget render(T item);

  protected void repaint() {
   
    clear();
    List<T> items = model.getItems();

    if (model.isReady()) {
      if (items.size() > 0) {
        // render the items
        for (int i = items.size(); i >= 1; i--) {
          T item = items.get(i - 1);
          showItem(item);
        }
      } else {
        // if there are no results
       
        add(msg);
      }

      if (task != null) {
        task.complete("", Status.succes);
      }

    } else {
      if (task == null) {
        task = new DefaultTaskInfo(uiText.FetchingActivities(), false);
        TaskMonitor.getInstance().addTask(task);
      }
    }
  }

  private void showItem(T item) {
    remove(msg);
    Widget w = render(item);
    if (w != null) {
      insert(render(item), 0);
    }
  }

  private class StreamListener implements Observer<StreamEvent<T>> {

    @Override
    public void handleEvent(StreamEvent<T> event) {
      if (update) {
        if (event.getType().equals(Type.added)) {
          for (T item : event.getItems()) {
            showItem(item);
          }
        } else {
          repaint();
        }
      }
    }

  }

}
TOP

Related Classes of org.onesocialweb.gwt.client.ui.widget.activity.AbstractActivityPanel$StreamListener

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.