package org.atomnuke.fallout.config.server;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
import org.apache.commons.lang3.StringUtils;
import org.atomnuke.atombus.config.model.Binding;
import org.atomnuke.atombus.config.model.Bindings;
import org.atomnuke.atombus.config.model.MessageActor;
import org.atomnuke.atombus.config.model.MessageActors;
import org.atomnuke.atombus.config.model.MessageSource;
import org.atomnuke.atombus.config.model.MessageSources;
import org.atomnuke.atombus.config.model.ServerConfiguration;
/**
*
* @author zinic
*/
public class ServerConfigurationHandler {
private final ServerConfiguration configurationCopy;
public ServerConfigurationHandler(ServerConfiguration configurationCopy) {
this.configurationCopy = configurationCopy != null ? configurationCopy : new ServerConfiguration();
}
public ServerConfiguration getConfiguration() {
return configurationCopy;
}
public List<MessageActor> getMessageActors() {
if (configurationCopy.getActors() == null) {
final MessageActors actors = new MessageActors();
configurationCopy.setActors(actors);
}
return configurationCopy.getActors().getActor();
}
public List<MessageSource> getMessageSources() {
if (configurationCopy.getMessageSources() == null) {
final MessageSources sources = new MessageSources();
configurationCopy.setMessageSources(sources);
}
return configurationCopy.getMessageSources().getSource();
}
public List<Binding> getBindings() {
if (configurationCopy.getBindings() == null) {
final Bindings bindings = new Bindings();
configurationCopy.setBindings(bindings);
}
return configurationCopy.getBindings().getBinding();
}
public void bind(String source, String sink) {
// Bind only if we don't already have a binding
if (findBinding(source, sink) == null) {
final Binding newBinding = new Binding();
newBinding.setId(UUID.randomUUID().toString());
newBinding.setSourceActor(source);
newBinding.setSinkActor(sink);
getBindings().add(newBinding);
}
}
public Binding findBinding(String source, String sink) {
for (Binding binding : getBindings()) {
if (binding.getSourceActor().equals(source) && binding.getSinkActor().equals(sink)) {
return binding;
}
}
return null;
}
public List<Binding> findBindingsForSource(String source) {
final List<Binding> bindingsFound = new LinkedList<Binding>();
for (Binding binding : getBindings()) {
if (binding.getSourceActor().equals(source)) {
bindingsFound.add(binding);
}
}
return bindingsFound;
}
public MessageActor findMessageActor(String id) {
for (MessageActor actor : getMessageActors()) {
if (StringUtils.isNotEmpty(actor.getId()) && actor.getId().equals(id)) {
return actor;
}
}
return null;
}
public MessageSource findMessageSource(String id) {
for (MessageSource source : getMessageSources()) {
if (StringUtils.isNotEmpty(source.getActorRef()) && source.getActorRef().equals(id)) {
return source;
}
}
return null;
}
}