/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.camel.component.zookeepermaster.group;
import java.io.Closeable;
import java.io.IOException;
import java.util.List;
import java.util.Map;
public interface Group<T extends NodeState> extends Closeable {
/**
* Are we connected with the cluster?
*/
boolean isConnected();
/**
* Start this member
*/
void start();
/**
* A member should be closed to release acquired resources used
* to monitor the group membership.
*
* When the member is closed, any memberships registered via this
* Group will be removed from the group.
*/
void close() throws IOException;
/**
* Registers a listener which will be called
* when the cluster membership changes or
* the group is connected or disconnected.
*/
void add(GroupListener<T> listener);
/**
* Removes a previously added listener.
*/
void remove(GroupListener<T> listener);
/**
* Update the state of this group member.
* If the state is null, the member will leave the group.
*
* This method can be called even if the group is not started,
* in which case the state will be stored and updated
* when the group becomes started.
*
* @param state the new state of this group member
*/
void update(T state);
/**
* Get the list of members connected to this group.
*/
Map<String, T> members();
/**
* Check if we are the master.
*/
boolean isMaster();
/**
* Retrieve the master node.
*/
T master();
/**
* Retrieve the list of slaves.
*/
List<T> slaves();
/**
* Gets the last state.
* <p/>
* This can be used by clients to access that last state, such as when the clients is being added
* as a {@link #add(GroupListener) listener} but wants to retrieve the last state to be up to date when the
* client is added.
*
* @return the state, or <tt>null</tt> if no last state yet.
*/
T getLastState();
}