All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.codeartisans.java.sos.messagebus.MessageBus Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2009, Paul Merlin. All Rights Reserved.
 * Copyright (c) 2010, Fabien Barbero. All Rights Reserved.
 *
 * 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.codeartisans.java.sos.messagebus;

public interface MessageBus
{

    /**
     * Publish given message to all instances of Subscriber.
     * @param            Subscriber mark type, for type safety
     * @param message       Message, must not be null
     */
     void publish( Message message );

    /**
     * @param            Subscriber mark type, for type safety
     * @param messageType   MessageType
     * @param subscriber    Subscriber
     * @return              Subscribtion
     */
     Subscribtion subscribe( MessageType messageType, S subscriber );

    /**
     * Unregister Subscriber's Subscribtion for a MessageType.
     *
     * Unsubscription can be done by Subscription instances themselves too, you'd better stick
     * to one way per application layer to avoid spaghetti code.
     *
     * @param            Subscriber mark type, for type safety
     * @param messageType   MessageType
     * @param subscriber    Subscriber
     */
     void unsubscribe( MessageType messageType, S subscriber );

    /**
     * @param            Subscriber mark type, for type safety
     * @param type          MessageType
     * @param veto          Veto
     * @return              VetoRegistration
     */
     VetoRegistration registerVeto( MessageType type, Veto veto );

    /**
     * Unregister Veto's VetoRegistration for a MessageType.
     *
     * Unsubscription can be done by VetoRegistration instances themselves too, you'd better stick
     * to one way per application layer to avoid spaghetti code.
     *
     * @param            Subscriber mark type, for type safety
     * @param type          MessageType
     * @param veto          Veto
     */
     void unregisterVeto( MessageType type, Veto veto );

    /**
     * @param            Subscriber mark type, for type safety
     * @param messageType   MessageType
     * @param id            Subscriber's ID
     * @return              Subscriber
     */
     S getSubscriber( MessageType messageType, int id );

    /**
     * @param            Subscriber mark type, for type safety
     * @param type          MessageType
     * @return              Whether the MessageBus has Subscriber instances for the given MessageType
     */
     boolean hasSubscribers( MessageType type );

    /**
     * @param            Subscriber mark type, for type safety
     * @param type          MessageType
     * @return              How many Subscriber instances the MessageBus has for the given MessageType
     */
     int countSubscribers( MessageType type );

}