Java Examples for net.kuujo.vertigo.hook.IOHook

The following java examples will help you to understand the usage of net.kuujo.vertigo.hook.IOHook. These source code samples are taken from different open source projects.

Example 1
Project: vertigo-master  File: ContextBuilder.java View source code
/**
   * Builds a network context from a network definition.
   *
   * @param network The network definition.
   * @param cluster The cluster to which the network belongs.
   * @return A new network context.
   * @throws MalformedNetworkException If the network is malformed.
   */
public static NetworkContext buildContext(NetworkConfig network, String cluster) {
    DefaultNetworkContext.Builder context = DefaultNetworkContext.Builder.newBuilder();
    // Set basic network configuration options.
    context.setName(network.getName());
    context.setVersion(UUID.randomUUID().toString());
    context.setAddress(String.format("%s.%s", cluster, network.getName()));
    context.setConfig(network);
    context.setCluster(cluster);
    context.setStatusAddress(String.format("%s.%s.__status", cluster, network.getName()));
    // Set up network components without inputs. Inputs are stored in a map so
    // that they can be set up after all component instances have been set up.
    Map<String, ComponentContext<?>> components = new HashMap<>();
    for (ComponentConfig<?> component : network.getComponents()) {
        if (component.getType().equals(ComponentConfig.Type.MODULE)) {
            // Set up basic module configuration options.
            DefaultModuleContext.Builder module = DefaultModuleContext.Builder.newBuilder();
            module.setName(component.getName());
            String address = String.format(COMPONENT_ADDRESS_PATTERN, cluster, network.getName(), component.getName());
            module.setAddress(address);
            module.setStatusAddress(String.format("%s.__status", address));
            module.setModule(((ModuleConfig) component).getModule());
            module.setConfig(component.getConfig());
            module.setGroup(component.getGroup());
            module.setHooks(component.getHooks());
            // Set up module instances.
            List<InstanceContext> instances = new ArrayList<>();
            for (int i = 1; i <= component.getInstances(); i++) {
                DefaultInstanceContext.Builder instance = DefaultInstanceContext.Builder.newBuilder();
                instance.setAddress(String.format("%s-%d", address, i));
                instance.setStatusAddress(String.format("%s-%d.__status", address, i));
                instance.setNumber(i);
                instance.setInput(DefaultInputContext.Builder.newBuilder().build());
                instance.setOutput(DefaultOutputContext.Builder.newBuilder().build());
                instances.add(instance.build());
            }
            module.setInstances(instances);
            components.put(component.getName(), module.build());
        } else {
            // Set up basic verticle configuration options.
            DefaultVerticleContext.Builder verticle = DefaultVerticleContext.Builder.newBuilder();
            verticle.setName(component.getName());
            String address = String.format(COMPONENT_ADDRESS_PATTERN, cluster, network.getName(), component.getName());
            verticle.setAddress(address);
            verticle.setStatusAddress(String.format("%s.__status", address));
            verticle.setMain(((VerticleConfig) component).getMain());
            verticle.setWorker(((VerticleConfig) component).isWorker());
            verticle.setMultiThreaded(((VerticleConfig) component).isMultiThreaded());
            verticle.setConfig(component.getConfig());
            verticle.setGroup(component.getGroup());
            verticle.setHooks(component.getHooks());
            // Set up module instances.
            List<InstanceContext> instances = new ArrayList<>();
            for (int i = 1; i <= component.getInstances(); i++) {
                DefaultInstanceContext.Builder instance = DefaultInstanceContext.Builder.newBuilder();
                instance.setAddress(String.format("%s-%d", address, i));
                instance.setStatusAddress(String.format("%s-%d.__status", address, i));
                instance.setNumber(i);
                instance.setInput(DefaultInputContext.Builder.newBuilder().build());
                instance.setOutput(DefaultOutputContext.Builder.newBuilder().build());
                instances.add(instance.build());
            }
            verticle.setInstances(instances);
            components.put(component.getName(), verticle.build());
        }
    }
    // resolving ordering issues in many-to-many component relationships.
    for (ConnectionConfig connection : network.getConnections()) {
        ComponentContext<?> source = components.get(connection.getSource().getComponent());
        ComponentContext<?> target = components.get(connection.getTarget().getComponent());
        // be rebuilt.
        if (source != null && target != null) {
            for (InstanceContext sourceInstance : source.instances()) {
                // Check if the port already exists on the source's output.
                DefaultOutputPortContext.Builder output = null;
                for (OutputPortContext port : sourceInstance.output().ports()) {
                    if (port.name().equals(connection.getSource().getPort())) {
                        output = DefaultOutputPortContext.Builder.newBuilder(port);
                        break;
                    }
                }
                // If the output port doesn't already exist then add it.
                if (output == null) {
                    OutputPortContext port = DefaultOutputPortContext.Builder.newBuilder().setAddress(String.format("out:%s@%s.%s.%s[%d]", connection.getSource().getPort(), cluster, network.getName(), source.name(), sourceInstance.number())).setName(connection.getSource().getPort()).build();
                    DefaultOutputContext.Builder.newBuilder(sourceInstance.output()).addPort(port).build();
                    output = DefaultOutputPortContext.Builder.newBuilder(port);
                }
                // Set up an output stream from the output port.
                DefaultOutputStreamContext.Builder outStream = DefaultOutputStreamContext.Builder.newBuilder();
                outStream.setAddress(String.format("out:%s@%s.%s.%s[%d]->in:%s@%s.%s.%s[]", connection.getSource().getPort(), cluster, network.getName(), source.name(), sourceInstance.number(), connection.getTarget().getPort(), cluster, network.getName(), target.name()));
                outStream.setSelector(connection.getSelector());
                // For each target instance, add a unique input connection for the output.
                for (InstanceContext targetInstance : target.instances()) {
                    // Check if the port already exists on the target's input.
                    DefaultInputPortContext.Builder input = null;
                    for (InputPortContext port : targetInstance.input().ports()) {
                        if (port.name().equals(connection.getTarget().getPort())) {
                            input = DefaultInputPortContext.Builder.newBuilder(port);
                            break;
                        }
                    }
                    // If the input port doesn't already exist then add it.
                    if (input == null) {
                        InputPortContext port = DefaultInputPortContext.Builder.newBuilder().setAddress(String.format("in:%s@%s.%s.%s[%d]", connection.getTarget().getPort(), cluster, network.getName(), target.name(), targetInstance.number())).setName(connection.getTarget().getPort()).build();
                        DefaultInputContext.Builder.newBuilder(targetInstance.input()).addPort(port).build();
                        input = DefaultInputPortContext.Builder.newBuilder(port);
                    }
                    // Add an input connection to the input port.
                    DefaultInputConnectionContext.Builder inConnection = DefaultInputConnectionContext.Builder.newBuilder();
                    String address = String.format("out:%s@%s.%s.%s[%d]->in:%s@%s.%s.%s[%d]", connection.getSource().getPort(), cluster, network.getName(), source.name(), sourceInstance.number(), connection.getTarget().getPort(), cluster, network.getName(), target.name(), targetInstance.number());
                    inConnection.setAddress(address);
                    inConnection.setSource(DefaultConnectionContext.DefaultSourceContext.Builder.newBuilder().setComponent(connection.getSource().getComponent()).setPort(connection.getSource().getPort()).setInstance(sourceInstance.number()).build());
                    inConnection.setTarget(DefaultConnectionContext.DefaultTargetContext.Builder.newBuilder().setComponent(connection.getTarget().getComponent()).setPort(connection.getTarget().getPort()).setInstance(targetInstance.number()).build());
                    // Add input level hooks to the input.
                    inConnection.setHooks(connection.getTarget().getHooks());
                    // Add connection level hooks to the input.
                    for (IOHook hook : connection.getHooks()) {
                        inConnection.addHook(hook);
                    }
                    // Add the connection to the target input port.
                    input.addConnection(inConnection.build()).build();
                    // Add the new output connection to the output stream. This creates a one-to-many
                    // relationship between output connections and input connections, and input
                    // connections maintain a many-to-one relationship with output connections.
                    DefaultOutputConnectionContext.Builder outConnection = DefaultOutputConnectionContext.Builder.newBuilder();
                    outConnection.setAddress(address);
                    outConnection.setSource(DefaultConnectionContext.DefaultSourceContext.Builder.newBuilder().setComponent(connection.getSource().getComponent()).setPort(connection.getSource().getPort()).build());
                    outConnection.setTarget(DefaultConnectionContext.DefaultTargetContext.Builder.newBuilder().setComponent(connection.getTarget().getComponent()).setPort(connection.getTarget().getPort()).build());
                    // Add output level hooks to the output.
                    outConnection.setHooks(connection.getSource().getHooks());
                    // Add connection level hooks to the output.
                    for (IOHook hook : connection.getHooks()) {
                        outConnection.addHook(hook);
                    }
                    outStream.addConnection(outConnection.build());
                }
                // Add the connection to the source instance's out port.
                output.addStream(outStream.build()).build();
            }
        }
    }
    // Set the components on the network context and build the final context.
    context.setComponents(components.values());
    return context.build();
}