Changeset 7511


Ignore:
Timestamp:
01/11/11 21:13:49 (9 years ago)
Author:
aivar
Message:

Workflow updates, works with new PluginModule, hooks up to PluginScheduler.

Location:
branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow
Files:
1 added
2 deleted
5 edited
1 moved

Legend:

Unmodified
Added
Removed
  • branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow/IModule.java

    r7495 r7511  
    66package loci.workflow; 
    77 
    8 import loci.plugin.ImageWrapper; 
     8import loci.workflow.plugin.ItemWrapper; 
     9import loci.workflow.plugin.IPluginLauncher; 
    910 
    1011/** 
     
    2728     */ 
    2829    public void setName(String name); 
     30 
     31    /** 
     32     * Gets associated launcher 
     33     * 
     34     * @return launcher 
     35     */ 
     36    public IPluginLauncher getLauncher(); 
    2937 
    3038    /** 
     
    6371     * @param name 
    6472     */ 
    65     public void input(ImageWrapper image); 
     73    public void input(ItemWrapper image); 
    6674 
    6775    /** 
     
    7179     * @param name 
    7280     */ 
    73     public void input(ImageWrapper image, String name); 
     81    public void input(ItemWrapper image, String name); 
    7482 
    7583    /** 
  • branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow/IOutputListener.java

    r7432 r7511  
    66package loci.workflow; 
    77 
    8 import loci.plugin.ImageWrapper; 
     8import loci.workflow.plugin.ItemWrapper; 
    99 
    1010/** 
     
    2020     * @param image 
    2121     */ 
    22     public void outputImage(String name, ImageWrapper image); 
     22    public void outputImage(String name, ItemWrapper image); 
    2323} 
  • branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow/IWorkFlow.java

    r7495 r7511  
    7777    /** 
    7878     * Leftover, un-wired module inputs and outputs become workflow inputs and 
    79      * outputs. 
     79     * outputs.  Phase II -> III. 
    8080     */ 
    8181    void finalize(); 
     
    169169     */ 
    170170    boolean fromXML(String xml); 
     171     
     172    /** 
     173     * Stops processing. 
     174     */ 
     175    void quit(); 
     176 
     177    /** 
     178     * Clears wiring. 
     179     */ 
     180    void clear(); 
    171181} 
  • branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow/ModuleFactory.java

    r7497 r7511  
    2323    private ModuleFactory() { 
    2424        register(WorkFlow.WORKFLOW, WorkFlowFactory.getInstance()); 
    25         register(Component.COMPONENT, ComponentFactory.getInstance()); 
     25        //register(Component.COMPONENT, ComponentFactory.getInstance()); 
     26        register(PluginModule.PLUGIN, PluginModuleFactory.getInstance()); 
    2627    } 
    2728 
  • branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow/PluginModule.java

    r7495 r7511  
    1414package loci.workflow; 
    1515 
     16import java.util.Collections; 
    1617import java.util.HashMap; 
    1718import java.util.Map; 
    1819import java.util.Set; 
    1920 
    20 import loci.multiinstanceplugin.AbstractPlugin; 
    21 import loci.multiinstanceplugin.ILinkedPlugin; 
    22 import loci.multiinstanceplugin.IPlugin; 
    23 import loci.multiinstanceplugin.LinkedPlugin; 
    24 import loci.multiinstanceplugin.PluginClassException; 
    25 import loci.plugin.ImageWrapper; 
     21import loci.workflow.plugin.AbstractPlugin; 
     22import loci.workflow.plugin.ItemWrapper; 
     23import loci.workflow.plugin.IPlugin; 
     24import loci.workflow.plugin.IPluginLauncher; 
     25import loci.workflow.plugin.PluginAnnotations; 
     26import loci.workflow.plugin.PluginClassException; 
     27import loci.workflow.plugin.PluginLauncher; 
    2628import loci.plugin.annotations.Input; 
    2729import loci.plugin.annotations.Output; 
     
    3537 * @author Aivar Grislis 
    3638 */ 
    37 public class PluginComponent implements IModule { 
     39public class PluginModule implements IModule { 
    3840    public static final String PLUGIN = "plugin"; 
    39     ILinkedPlugin m_linkedPlugin; 
    40     Set<String> m_inputNames; 
    41     Set<String> m_outputNames; 
    42  
    43  
     41    public static final String CLASSNAME = "classname"; 
     42    String m_pluginClassName; 
    4443    String m_name; 
     44    PluginAnnotations m_annotations; 
     45    IPluginLauncher m_launcher; 
     46    Set<String> m_inputNames = Collections.EMPTY_SET; 
     47    Set<String> m_outputNames = Collections.EMPTY_SET; 
    4548    Map<String, IOutputListener> m_listenerMap = new HashMap<String, IOutputListener>(); 
    4649 
    47     public PluginComponent() { 
     50    public PluginModule() { 
    4851    } 
    4952 
     
    5356     * @param pluginClassName 
    5457     */ 
    55     public PluginComponent(String pluginClassName) throws PluginClassException { 
     58    public PluginModule(String pluginClassName) throws PluginClassException { 
    5659        init(pluginClassName); 
    5760    } 
     
    6265     * @param className 
    6366     */ 
    64     public PluginComponent(Class pluginClass) { 
     67    public PluginModule(Class pluginClass) { 
    6568        init(pluginClass); 
    6669    } 
     
    9699            success = true; 
    97100 
     101            System.out.println(pluginClass.toString()); 
     102 
    98103            if (!pluginClass.isAssignableFrom(AbstractPlugin.class)) { 
    99                 success = false; 
    100                 System.out.println("Plugin should extend AbstractPlugin"); 
     104                //success = false; //TODO fails this!! 
     105                System.out.println("Plugin " + pluginClassName + " should extend AbstractPlugin"); 
    101106            } 
    102107 
    103108            if (!pluginClass.isAssignableFrom(IPlugin.class)) { 
    104                 success = false; 
    105                 System.out.println("Plugin should implement IPlugin"); 
     109                //success = false; //TODO fails this!! 
     110                System.out.println("Plugin " + pluginClassName + " should implement IPlugin"); 
    106111            } 
    107112        } 
     
    121126     */ 
    122127    private void init(Class pluginClass) { 
    123         m_linkedPlugin = new LinkedPlugin(pluginClass); 
    124         m_inputNames = m_linkedPlugin.getInputNames(); 
    125         m_outputNames = m_linkedPlugin.getOutputNames(); 
     128        m_pluginClassName = pluginClass.getName(); 
     129        int lastDotIndex = m_pluginClassName.lastIndexOf('.'); 
     130        m_name = m_pluginClassName.substring(lastDotIndex + 1, m_pluginClassName.length()); 
     131 
     132        // examine annotations 
     133        m_annotations = new PluginAnnotations(pluginClass); 
     134        m_inputNames = m_annotations.getInputNames(); 
     135        m_outputNames = m_annotations.getOutputNames(); 
     136 
     137        // create launcher 
     138        m_launcher = new PluginLauncher(pluginClass, m_annotations); 
    126139    } 
    127140 
     
    142155    public void setName(String name) { 
    143156        m_name = name; 
     157    } 
     158 
     159    public IPluginLauncher getLauncher() { 
     160        return m_launcher; 
    144161    } 
    145162 
     
    153170        XMLWriter xmlHelper = new XMLWriter(xmlBuilder); 
    154171 
    155         // add workflow tag and name 
     172        // add workflow tag, name, and class name 
    156173        xmlHelper.addTag(PLUGIN); 
    157174        xmlHelper.addTagWithContent(WorkFlow.NAME, getName()); 
     175        xmlHelper.addTagWithContent(CLASSNAME, m_pluginClassName); 
    158176 
    159177        // add inputs 
     
    195213            // handle test tag and name 
    196214            // 
    197             // <testcomponent> 
     215            // <plugin> 
    198216            //   <name>A</name> 
    199217 
     
    209227            setName(tag.getContent()); 
    210228            xml = tag.getRemainder(); 
     229 
     230            // handle class name 
     231            tag = xmlHelper.getNextTag(xml); 
     232            if (!CLASSNAME.equals(tag.getName())) { 
     233                throw new XMLException("Missing <classname> for <plugin>"); 
     234            } 
     235            init(tag.getContent()); 
     236            if (true) return true; //TODO the follow code analyzes given input/output names, which are merely a descriptive nicety; could compare with annotated input/output names. 
    211237 
    212238            // handle inputs 
     
    313339     * @param image 
    314340     */ 
    315     public void input(ImageWrapper image) { 
     341    public void input(ItemWrapper image) { 
    316342        input(image, Input.DEFAULT); 
    317343    } 
     
    323349     * @param name 
    324350     */ 
    325     public void input(ImageWrapper image, String name) { 
    326         m_linkedPlugin.externalPut(name, image); //TODO inconsistency! 
     351    public void input(ItemWrapper image, String name) { 
     352        m_launcher.externalPut(name, image); //TODO order inconsistency! 
    327353    } 
    328354 
  • branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow/WorkFlow.java

    r7497 r7511  
    1616import java.util.Map; 
    1717 
    18 import loci.plugin.ImageWrapper; 
    1918import loci.plugin.annotations.Input; 
    2019import loci.plugin.annotations.Output; 
     20import loci.workflow.plugin.ItemWrapper; 
     21import loci.workflow.plugin.IPluginLauncher; 
     22import loci.workflow.plugin.PluginScheduler; 
    2123 
    2224/** 
     
    6264    } 
    6365 
     66    /** 
     67     * Gets launcher. 
     68     * 
     69     * @param launcher 
     70     */ 
     71    //TODO shouldn't a workflow have a launcher?  Perhaps we just wire all the 
     72    //  PluginModules together. 
     73    public IPluginLauncher getLauncher() { 
     74        return null; 
     75    } 
     76 
    6477    public String[] getInputNames() { 
    6578        return m_inputNames.toArray(new String[0]); 
     
    209222 
    210223                if (!INPUT.equals(tag.getName())) { 
    211                     throw new XMLException("Missing <input> within <inputs"); 
     224                    throw new XMLException("Missing <input> within <inputs>"); 
    212225                } 
    213226                String inputXML = tag.getContent(); 
     
    289302        XMLTag tag = xmlHelper.getNextTag(xml); 
    290303        if (!MODULE.equals(tag.getName())) { 
    291             throw new XMLException("Missing <component> tag"); 
     304            throw new XMLException("Missing <module> tag"); 
    292305        } 
    293306        String moduleName = tag.getContent(); 
     
    395408 
    396409    public void finalize() { 
     410        // do the wiring 
     411        for (Wire wire: m_wires) { 
     412            IPluginLauncher out = wire.getSource().getLauncher(); 
     413            String outName = wire.getSourceName(); 
     414            IPluginLauncher in = wire.getDest().getLauncher(); 
     415            String inName = wire.getDestName(); 
     416            PluginScheduler.getInstance().chain(out, outName, in, inName); 
     417        } 
     418 
     419        // promote leftover inputs and outputs to workflow inputs and outputs 
    397420        for (IModule module: m_moduleMap.values()) { 
    398421            for (String name : module.getInputNames()) { 
    399                 if (!wiredInput(module, name)) { 
     422                if (!isWiredAsInput(module, name)) { 
    400423                    wireInput(name, module, name); 
    401424                } 
    402425            } 
    403426            for (String name : module.getOutputNames()) { 
    404                 if (!wiredOutput(module, name)) { 
     427                if (!isWiredAsOutput(module, name)) { 
    405428                    wireOutput(name, module, name); 
    406429                } 
     
    409432    } 
    410433 
    411     private boolean wiredInput(IModule module, String name) { 
     434    private boolean isWiredAsInput(IModule module, String name) { 
    412435        boolean found = false; 
    413436        for (Wire wire: m_wires) { 
     
    419442    } 
    420443 
    421     private boolean wiredOutput(IModule module, String name) { 
     444    private boolean isWiredAsOutput(IModule module, String name) { 
    422445        boolean found = false; 
    423446        for (Wire wire: m_wires) { 
     
    478501    } 
    479502 
    480     public void input(ImageWrapper image) { 
     503    public void input(ItemWrapper image) { 
    481504        input(image, Input.DEFAULT); 
    482505    } 
    483506     
    484     public void input(ImageWrapper image, String name) { 
     507    public void input(ItemWrapper image, String name) { 
    485508        if (m_inputNames.contains(name)) { 
    486509            IModule dest = m_inputModules.get(name); 
     
    502525        synchronized (m_synchObject) { 
    503526            m_listeners.put(name, listener); 
     527        } 
     528    } 
     529     
     530    public void quit() { 
     531        PluginScheduler.getInstance().quit(); 
     532    } 
     533 
     534    public void clear() { 
     535        //TODO more 
     536        m_wires.clear(); 
     537        m_inputNames.clear(); 
     538        m_outputNames.clear(); 
     539        synchronized (m_synchObject) { 
     540            m_listeners.clear(); 
    504541        } 
    505542    } 
     
    510547    private class OutputListener implements IOutputListener { 
    511548 
    512         public void outputImage(String name, ImageWrapper image) { 
     549        public void outputImage(String name, ItemWrapper image) { 
    513550            // get output name associated with this source name 
    514551            String outName = m_outputModuleNames.get(name); 
Note: See TracChangeset for help on using the changeset viewer.