package org.nuunframework.nuun.cqrs;
import java.lang.reflect.Constructor;
import java.util.Collection;
import org.axonframework.commandhandling.CommandBus;
import org.axonframework.commandhandling.gateway.CommandGateway;
import org.nuunframework.kernel.api.topology.Instance;
import org.nuunframework.kernel.api.topology.ObjectGraph;
import org.nuunframework.kernel.api.topology.ObjectGraphFactory;
import org.nuunframework.kernel.api.topology.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.inject.AbstractModule;
class AxonModule extends AbstractModule
{
Logger logger = LoggerFactory.getLogger(AxonModule.class);
ObjectGraphFactory objectGraphFactory = new DefaultCqrsObjectGraph();
public AxonModule()
{
}
@Override
protected void configure()
{
ObjectGraph og = objectGraphFactory.generate();
Collection<Instance> commandGateways = og.instancesAssignableFrom(CommandGateway.class);
for (Instance gate : commandGateways)
{
Collection<Reference> referencesAssignableFrom = gate.referencesAssignableFrom(CommandBus.class);
for (Reference bus : referencesAssignableFrom)
{
String gateName = gate.name();
String busName = bus.target().name();
try
{
Constructor<?>[] constructors = gate.type().getConstructors();
for (Constructor<?> constructor : constructors)
{
System.err.println(" " + constructor);
}
}
catch (SecurityException e)
{
e.printStackTrace();
}
}
}
}
@SuppressWarnings("unchecked")
private <T> T newInstance(Class<?> klass)
{
T instance = null;
try
{
instance = (T) klass.newInstance();
}
catch (InstantiationException e)
{
logger.error("Error when instantiating class " + klass, e);
}
catch (IllegalAccessException e)
{
logger.error("Error when instantiating class " + klass, e);
}
return instance;
}
public static void main(String[] args)
{
new AxonModule().configure();
}
}