Package org.jboss.errai.workspaces.client.modules.shoutbox

Source Code of org.jboss.errai.workspaces.client.modules.shoutbox.ShoutboxModule

/*
* Copyright 2009 JBoss, a divison Red Hat, Inc
*
* 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.jboss.errai.workspaces.client.modules.shoutbox;

import org.jboss.errai.bus.client.ErraiBus;
import org.jboss.errai.bus.client.api.Message;
import org.jboss.errai.bus.client.framework.MessageBus;
import org.jboss.errai.bus.client.api.MessageCallback;
import org.jboss.errai.workspaces.client.modules.Module;

import java.util.ArrayList;
import java.util.List;

/**
* The ShoutboxService matches offers (provider) with demands (client)
* and handles the offer life-cycle and client notifications.
*/


public class ShoutboxModule implements Module
{
  public static final String INBOX = "errai.shoutbox.inbox";
 
  private final MessageBus bus = ErraiBus.get();

  private List<Offer> offers = new ArrayList<Offer>();



  public void start()
  {
      // listen for control messages
    bus.subscribe(INBOX,
        new MessageCallback()
        {
          public void callback(Message message)
          {
            System.out.println("Shoutbox service: "+ message.getCommandType());

            switch (ShoutboxCmd.valueOf(message.getCommandType()))
            {
              case SUBMIT_OFFER:
                handleSubmitOffer(message);
                break;
              case RETRACT_OFFER:
                handleRetractOffer(message);
                break;
              case ENGAGE_OFFER:
                handleEngageOffer(message);
                break;
              case RETIRE_OFFER:
                handleRetireOffer(message);
                break;
              default:
                throw new IllegalArgumentException("Unknown command " +message.getCommandType());
            }

            // validate/match all offers
            List<String> toBeRemoved = new ArrayList<String>();

            int before = offers.size();

            for(Offer o : offers)
            {
              if(!o.hasClients() && o.getProvider() == null)
                toBeRemoved.add(o.getSubject());

              o.match();

            }

            // cleanup
            for(String s : toBeRemoved)
            {
              Offer o = containsOffer(s);
              offers.remove(o);
            }

            System.out.println("Offers:  " +before+"/"+offers.size());
          }
        }
    );
  }


  public void stop()
  {
   
  }

  /**
   * provider submits an offer
   */
  private void handleSubmitOffer(Message message)
  {
    String subjectMatter = message.get(String.class, ShoutboxCmdParts.SUBJECT);
    Offer offer = containsOffer(subjectMatter);

    if(null==offer)
    {
      offer = new Offer(subjectMatter, Offer.State.OPEN);
      offers.add(offer);
    }

    // update/set provider
    if(offer.getProvider()==null)
      offer.setProvider(message.get(String.class, ShoutboxCmdParts.PROVIDER));
   
  }

  /**
   * provider retracts an offer  
   */
  private void handleRetractOffer(Message message)
  {
    String subjectMatter = message.get(String.class, ShoutboxCmdParts.SUBJECT);
    Offer offer = containsOffer(subjectMatter);

    if(offer!=null)
    {
      offer.setProvider(null);
   
  }

  /**
   * client engages an offer  
   */
  private void handleEngageOffer(Message message)
  {
    String subjectMatter = message.get(String.class, ShoutboxCmdParts.SUBJECT);
    String client = message.get(String.class, ShoutboxCmdParts.CLIENT);

    Offer offer = containsOffer(subjectMatter);

    if(null==offer) // create a pending offer
    {
      offer = new Offer(subjectMatter, Offer.State.PENDING);
      offers.add(offer);
    }

    // update/set client
    offer.addClient(client);

  }

  /**
   * client retires an offer  
   */
  private void handleRetireOffer(Message message)
  {
    String subjectMatter = message.get(String.class, ShoutboxCmdParts.SUBJECT);
    String client = message.get(String.class, ShoutboxCmdParts.CLIENT);

    Offer offer = containsOffer(subjectMatter);

    if(offer!=null)
    {
      offer.removeClient(client);
    }   
  }

  private Offer containsOffer(String subjectMatter)
  {
    Offer match = null;
    for(Offer o : offers)
    {
      if(subjectMatter.equals(o.getSubject()))
      {
        match=o;
        break;
      }
    }
    return match;
  }
}
TOP

Related Classes of org.jboss.errai.workspaces.client.modules.shoutbox.ShoutboxModule

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.