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

oms3.Compound Maven / Gradle / Ivy

There is a newer version: 0.8.1
Show newest version
/*
 * $Id: Compound.java 20 2008-07-25 22:31:07Z od $
 * 
 * This software is provided 'as-is', without any express or implied
 * warranty. In no event will the authors be held liable for any damages
 * arising from the use of this software.
 * 
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 * 
 *  1. The origin of this software must not be misrepresented; you must not
 *     claim that you wrote the original software. If you use this software
 *     in a product, an acknowledgment in the product documentation would be
 *     appreciated but is not required.
 * 
 *  2. Altered source versions must be plainly marked as such, and must not be
 *     misrepresented as being the original software.
 * 
 *  3. This notice may not be removed or altered from any source
 *     distribution.
 */
package oms3;

import oms3.annotations.*;


/**
 * Abstract Compound Command.
 * 
 * @author od
 * @version $Id: Compound.java 20 2008-07-25 22:31:07Z od $ 
 */
public  class Compound {

    private Controller controller = new Controller(this);

    @Initialize
    /** Initializes all components in this compound.
     * Calls all methods tagged as {{@Initialize}} in all
     * components.
     */
    public void initializeComponents() {
        controller.callAnnotated(Initialize.class, true);
    }

    @Finalize
    /** Finalizes all components in this compound.
     * Calls all methods tagged as {{@Finalize}} in all
     * components.
     */
    public void finalizeComponents() {
        controller.callAnnotated(Finalize.class, true);
    }


    @Execute
    /** Executes the the Compound.
     * @throws ComponentException
     */
    public void execute() throws ComponentException {
        check();
        internalExec();
    }

    /** Shutting down the execution service
     * 
     */
    public static void shutdown() {
        Controller.shutdown();
    }

    public static void reload() {
        Controller.reload();
    }


    /** Connects two internal components with respect to their fields.
     *
     * from/@Out -> to/@In
     *
     * @param from command object 1
     * @param from_out output field of cmd1
     * @param to command object 2
     * @param to_in input field of cmd2
     */
    public void out2infb(Object from, String from_out, Object to, String to_in) {
        controller.connect(from, from_out, to, to_in);
    }

    /** Connects two internal components with respect to their fields.
     *
     * from/@Out -> to/@In
     *
     * @param from command object 1
     * @param from_out output field of cmd1
     * @param to command opbject 2
     * @param to_in input field of cmd2
     */
    public void out2in(Object from, String from_out, Object to, String to_in) {
        controller.connect(from, from_out, to, to_in);
    }


    /** Connects field1 of cmd1 with the same named fields in cmds
     * @param from component1
     * @param from_out field
     * @param tos other components
     */
    public void out2in(Object from, String from_out, Object... tos) {
        for (Object co : tos) {
            out2in(from, from_out, co, from_out);
        }
    }

    /** Feedback connection between two components.
     *
     * @param from the src component
     * @param from_out output field
     * @param to       dest component
     * @param to_in    in field
     */
    public void feedback(Object from, String from_out, Object to, String to_in) {
        controller.feedback(from, from_out, to, to_in);
    }

    /** Feedback connection between two components.
     *
     * @param from
     * @param from_out
     * @param tos
     */
    public void feedback(Object from, String from_out, Object... tos) {
        for (Object co : tos) {
            feedback(from, from_out, co, from_out);
        }
    }

    /** Maps a Compound Input field to a internal simple input field.
     *
     * @param in Compound input field.
     * @param to   internal Component
     * @param to_in  Input field of the internal component
     */
    public void in2in(String in, Object to, String to_in) {
        controller.mapIn(in, to, to_in);
    }

    /** Maps a compound input to an internal simple input field. Both
     * fields have the same name.
     * @param in the name of the field
     * @param to the commands to map to
     */
    public void in2in(String in, Object... to) {
        for (Object cmd : to) {
            in2in(in, cmd, in);
        }
    }

    /** Maps a field to an In and Out field
     *
     * @param o the object
     * @param field the field name
     * @param comp the component
     * @param inout the field tagged with In and Out
     */
    public void field2inout(Object o, String field, Object comp, String inout) {
        controller.mapInField(o, field, comp, inout);
        controller.mapOutField(comp, inout, o, field);
    }

    /** Maps a field to an In and Out field
     *
     * @param o the object
     * @param field the field name
     * @param comp the component
     */
    public void field2inout(Object o, String field, Object comp) {
        field2inout(o, field, comp, field);
    }

    /** Maps a object's field to an In field
     *
     * @param o the object
     * @param field the field name
     * @param to the component
     * @param to_in the In field.
     */
    public void field2in(Object o, String field, Object to, String to_in) {
        controller.mapInField(o, field, to, to_in);
    }

    /** Maps an object's field to a component's In field with the same name
     *
     * @param o the object
     * @param field the field name
     * @param to the component.
     */
    public void field2in(Object o, String field, Object to) {
        field = field.trim();
        if (field.indexOf(' ') > 0) {           // maybe multiple field names given
            String[] fields = field.split("\\s+");
            for (String f : fields) {
                field2in(o, f, to, f);
            }
        } else {
            field2in(o, field, to, field);
        }
    }


    /** Maps a component's Out field to an object field.
     *
     * @param from the component
     * @param from_out the component's out field
     * @param o the object
     * @param field the object's field
     */
    public void out2field(Object from, String from_out, Object o, String field) {
        controller.mapOutField(from, from_out, o, field);
    }

    /** Maps a component Out field to an object's field. Both field have the
     *  same name.
     *
     * @param from the component
     * @param from_out the component's Out field.
     * @param o the object
     */
    public void out2field(Object from, String from_out, Object o) {
        out2field(from, from_out, o, from_out);
    }

     /**
     * Maps a Compound Output field to a internal simple output field.
     *
     * @param out Compount output field.
     * @param to   internal Component
     * @param to_out  output field of the internal component
     */
    public void out2out(String out, Object to, String to_out) {
        controller.mapOut(out, to, to_out);
    }

    /**
     * Map output
     * maps a compound output to an internal simple output field. Both
     * fields have the same name.
     *
     * @param out tha name of the field
     * @param to the component source.
     */
    public void out2out(String out, Object to) {
        out2out(out, to, out);
    }

    public void val2in(boolean val, Object to, String field) {
        controller.mapInVal(new Boolean(val), to, field);
    }
    
    public void val2in(char val, Object to, String field) {
        controller.mapInVal(new Character(val), to, field);
    }

    public void val2in(byte val, Object to, String field) {
        controller.mapInVal(new Byte(val), to, field);
    }
    public void val2in(short val, Object to, String field) {
        controller.mapInVal(new Short(val), to, field);
    }
    public void val2in(int val, Object to, String field) {
        controller.mapInVal(new Integer(val), to, field);
    }
    public void val2in(long val, Object to, String field) {
        controller.mapInVal(new Long(val), to, field);
    }

    public void val2in(float val, Object to, String field) {
        controller.mapInVal(new Float(val), to, field);
    }
    public void val2in(double val, Object to, String field) {
        controller.mapInVal(new Double(val), to, field);
    }

    public void val2in(Object val, Object to, String field) {
        controller.mapInVal(val, to, field);
    }



    // deprecated methods starting here.
    
    @Deprecated
    public void connect(Object from, String from_out, Object to, String to_in) {
        controller.connect(from, from_out, to, to_in);
    }

    @Deprecated
    public void connect(Object from, String from_out, Object... tos) {
        for (Object co : tos) {
            connect(from, from_out, co, from_out);
        }
    }

    @Deprecated
    public void mapIn(String in, Object to, String to_in) {
        controller.mapIn(in, to, to_in);
    }

    @Deprecated
    public void mapIn(String in, Object... to) {
        for (Object cmd : to) {
            mapIn(in, cmd, in);
        }
    }

    @Deprecated
    public void mapInField(Object o, String out, Object from, String from_out) {
        controller.mapInField(o, out, from, from_out);
    }

    @Deprecated
    public void mapInField(Object o, String out, Object from) {
        controller.mapInField(o, out, from, out);
    }
    
    @Deprecated
    public void mapOutField(Object o, String out, Object from, String from_out) {
        controller.mapOutField(o, out, from, from_out);
    }

    @Deprecated
    public void mapOutField(Object o, String out, Object from) {
        controller.mapOutField(o, out, from, out);
    }

    @Deprecated
    public void mapOut(String out, Object from, String from_out) {
        controller.mapOut(out, from, from_out);
    }

    @Deprecated
    public void mapOut(String out, Object from) {
        mapOut(out, from, out);
    }


    /**
     * Check for valid internals within the compound
     */
    protected  void check() {
        controller.sanityCheck();
    }

    /**
     * Internal execution.
     * 
     * @throws ComponentException
     */
    protected void internalExec() throws ComponentException {
        controller.internalExec();
    }

    /**
     * Add a ExecutionListener that tracks execution
     *
     * @param l the Listener to add
     */
    public void addListener(Notification.Listener l) {
        controller.getNotification().addListener(l);
    }

    /**
     * Remove a ExecutionListener that tracks execution
     * @param l the Listener to remove
     */
    public void removeListerer(Notification.Listener l) {
        controller.getNotification().removeListener(l);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy