Changeset 7497


Ignore:
Timestamp:
01/10/11 20:11:55 (9 years ago)
Author:
aivar
Message:

Fleshed out WorkFlow.finalize. ModuleFactory now has a register method that lets you associate a tag name with a IModuleFactory.

Location:
branches/maven/projects/deep-zoom-plugin/src
Files:
4 edited

Legend:

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

    r7495 r7497  
    55 
    66package loci.workflow; 
     7 
     8import java.util.HashMap; 
     9import java.util.Map; 
    710 
    811import loci.util.xmllight.XMLParser; 
     
    1417 * @author Aivar Grislis 
    1518 */ 
    16 public class ModuleFactory { 
     19public class ModuleFactory implements IModuleFactory { 
    1720    private static ModuleFactory s_instance; 
     21    private Map<String, IModuleFactory> m_factories = new HashMap<String, IModuleFactory>(); 
    1822     
    1923    private ModuleFactory() { 
     24        register(WorkFlow.WORKFLOW, WorkFlowFactory.getInstance()); 
     25        register(Component.COMPONENT, ComponentFactory.getInstance()); 
    2026    } 
    2127 
     
    3238    } 
    3339 
     40    public void register(String tagName, IModuleFactory factory) { 
     41        m_factories.put(tagName, factory); 
     42    } 
     43 
    3444    /** 
    3545     * Creates a component from XML. 
     
    3848     * @return 
    3949     */ 
    40     public static IModule create(String xml) throws XMLException { 
     50    public IModule create(String xml) throws XMLException { 
    4151        IModule module = null; 
    4252        XMLParser xmlHelper = new XMLParser(); 
    4353        XMLTag tag = xmlHelper.getNextTag(xml); 
    44         if (WorkFlow.WORKFLOW.equals(tag.getName())) { 
    45             module = WorkFlowFactory.getInstance().create(xml); 
    46  
    47         } 
    48         else if (Component.COMPONENT.equals(tag.getName())) { 
    49             module = ComponentFactory.getInstance().create(xml); 
     54        IModuleFactory factory = m_factories.get(tag.getName()); 
     55        if (null != factory) { 
     56            module = factory.create(xml); 
    5057        } 
    5158        else { 
  • branches/maven/projects/deep-zoom-plugin/src/main/java/loci/workflow/WorkFlow.java

    r7495 r7497  
    4040    public static final String OUTPUT = "output"; 
    4141 
    42     static IModuleFactory s_moduleFactory; 
     42    IModuleFactory m_moduleFactory = ModuleFactory.getInstance(); 
    4343    String m_name; 
    4444    Map<String, IModule> m_moduleMap = new HashMap<String, IModule>(); 
     
    6868    public String[] getOutputNames() { 
    6969        return m_outputNames.toArray(new String[0]); 
    70     } 
    71  
    72     public void setModuleFactory(IModuleFactory moduleFactory) { 
    73         s_moduleFactory = moduleFactory; 
    7470    } 
    7571 
     
    131127                } 
    132128                System.out.println("module XML is [" + tag.getRemainder() + "]"); 
    133                 if (null == s_moduleFactory) { 
    134                     System.out.println("Module Factory is null"); 
    135                 } 
    136                 IModule module = s_moduleFactory.create(tag.getRemainder()); 
     129                IModule module = m_moduleFactory.create(tag.getRemainder()); 
    137130                add(module); 
    138131            } 
     
    288281        } 
    289282        catch (XMLException e) { 
    290             System.out.println("XML Exception"); 
     283            System.out.println("XML Exception " + e.getMessage()); 
    291284        } 
    292285        return success; 
     
    402395 
    403396    public void finalize() { 
     397        for (IModule module: m_moduleMap.values()) { 
     398            for (String name : module.getInputNames()) { 
     399                if (!wiredInput(module, name)) { 
     400                    wireInput(name, module, name); 
     401                } 
     402            } 
     403            for (String name : module.getOutputNames()) { 
     404                if (!wiredOutput(module, name)) { 
     405                    wireOutput(name, module, name); 
     406                } 
     407            } 
     408        } 
     409    } 
     410 
     411    private boolean wiredInput(IModule module, String name) { 
     412        boolean found = false; 
     413        for (Wire wire: m_wires) { 
     414            if (wire.getDest().equals(module) && wire.getDestName().equals(name)) { 
     415                found = true; 
     416            } 
     417        } 
     418        return found; 
     419    } 
     420 
     421    private boolean wiredOutput(IModule module, String name) { 
     422        boolean found = false; 
     423        for (Wire wire: m_wires) { 
     424            if (wire.getSource().equals(module) && wire.getSourceName().equals(name)) { 
     425                found = true; 
     426            } 
     427        } 
     428        return found; 
    404429    } 
    405430 
  • branches/maven/projects/deep-zoom-plugin/src/test/java/loci/workflow/SerializeDeserializeTest.java

    r7495 r7497  
    5252 
    5353        TestComponentFactory componentFactory = TestComponentFactory.getInstance(); 
     54        ModuleFactory.getInstance().register(TestComponent.TESTCOMPONENT, componentFactory); 
    5455 
    5556        WorkFlow workFlow1 = new WorkFlow(); 
    5657        workFlow1.setName("workFlow1"); 
    57         workFlow1.setModuleFactory(componentFactory); 
     58       // workFlow1.setModuleFactory(componentFactory); 
    5859        workFlow1.add(testComponentA); 
    5960        workFlow1.add(testComponentB); 
     
    7475        assertTrue(xml1.equals(xml2)); 
    7576    } 
     77 
     78    public void testFinalize() 
     79    { 
     80        TestComponent testComponentA = new TestComponent(); 
     81        testComponentA.setName("A"); 
     82        testComponentA.setInputNames(new String[] { "ONE", "TWO" }); 
     83        testComponentA.setOutputNames(new String[] { Output.DEFAULT }); 
     84        TestComponent testComponentB = new TestComponent(); 
     85        testComponentB.setName("B"); 
     86        testComponentB.setInputNames(new String[] { Input.DEFAULT } ); 
     87        testComponentB.setOutputNames(new String[] { Output.DEFAULT }); 
     88 
     89 
     90        WorkFlow workFlow1 = new WorkFlow(); 
     91        workFlow1.setName("workFlow1"); 
     92        workFlow1.add(testComponentA); 
     93        workFlow1.add(testComponentB); 
     94        workFlow1.wire(testComponentA, testComponentB); 
     95        workFlow1.finalize(); 
     96 
     97        assertTrue(workFlow1.getInputNames().length == 2); 
     98        assertTrue(workFlow1.getInputNames()[0].equals("ONE")); 
     99        assertTrue(workFlow1.getInputNames()[1].equals("TWO")); 
     100        assertTrue(workFlow1.getOutputNames().length == 1); 
     101        assertTrue(workFlow1.getOutputNames()[0].equals("OUTPUT")); 
     102    } 
    76103} 
  • branches/maven/projects/deep-zoom-plugin/src/test/java/loci/workflow/TestComponentFactory.java

    r7495 r7497  
    55 
    66package loci.workflow; 
    7  
    8 import loci.util.xmllight.XMLParser; 
    9 import loci.util.xmllight.XMLException; 
    10 import loci.util.xmllight.XMLTag; 
    117 
    128/** 
     
    2723    } 
    2824 
    29     public IModule create(String xml) throws XMLException { 
    30         IModule component = null; 
    31         XMLParser xmlHelper = new XMLParser(); 
    32         XMLTag tag = xmlHelper.getNextTag(xml); 
    33         if (WorkFlow.WORKFLOW.equals(tag.getName())) { 
    34             component = WorkFlowFactory.getInstance().create(xml); 
    35  
    36         } 
    37         else if (TestComponent.TESTCOMPONENT.equals(tag.getName())) { 
    38             component = new TestComponent(); 
    39             component.fromXML(xml); 
    40         } 
    41         else { 
    42             throw new XMLException("Invalid tag " + tag.getName()); 
    43         } 
     25    public IModule create(String xml) { 
     26        IModule component = new TestComponent(); 
     27        component.fromXML(xml); 
    4428        return component; 
    4529    } 
Note: See TracChangeset for help on using the changeset viewer.