Changeset 7431


Ignore:
Timestamp:
12/17/10 02:00:51 (9 years ago)
Author:
aivar
Message:

Workflow passes unit test: Create a workflow programmatically and export to XML. Create a workflow from that first XML and then export a second XML. Both XML versions should be identical.

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

Legend:

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

    r7430 r7431  
    7777 
    7878        try { 
     79            // handle workflow tag and name 
     80            // 
     81            // <workflow> 
     82            //   <name>workFlow1</name> 
     83         
    7984            XMLTag tag = xmlHelper.getNextTag(xml); 
    8085            if (!WORKFLOW.equals(tag.getName())) { 
     
    8893            setName(tag.getContent()); 
    8994            xml = tag.getRemainder(); 
     95             
     96            // handle components 
     97            // 
     98            //  <components> 
     99            //    <component> 
     100            //      <name>A</name> 
     101            //      <testA>whatever</testA> 
     102            //    </component> 
     103            //    <component> 
     104            //      <name>B</name> 
     105            //      <testB>whatever</testB> 
     106            //    </component> 
     107            //  </components> 
     108 
    90109            tag = xmlHelper.getNextTag(xml); 
    91110            if (!COMPONENTS.equals(tag.getName())) { 
     
    117136            } 
    118137 
     138            // handle chains 
     139            // 
     140            //  <chains> 
     141            //    <chain> 
     142            //      <src> 
     143            //        <component>A</component> 
     144            //        <name>OUTPUT</name> 
     145            //      </src> 
     146            //      <dest> 
     147            //        <component>B</component> 
     148            //        <name>INPUT</name> 
     149            //      </dest> 
     150            //    </chain> 
     151            //  </chains> 
     152 
    119153            tag = xmlHelper.getNextTag(xml); 
    120154            if (!CHAINS.equals(tag.getName())) { 
     
    135169                String chainXML = tag.getContent(); 
    136170                tag = xmlHelper.getNextTag(chainXML); 
     171                chainXML = tag.getRemainder(); 
    137172                if (!SRC.equals(tag.getName())) { 
    138173                    throw new XMLException("Missing <src> within <chain>"); 
    139174                } 
     175                String srcXML = tag.getContent(); 
     176                ComponentAndName srcCAN = parseComponentAndName(xmlHelper, srcXML); 
    140177                 
    141  
     178                tag = xmlHelper.getNextTag(chainXML); 
     179                if (!DEST.equals(tag.getName())) { 
     180                    throw new XMLException("Missing <dest> within <chain>"); 
     181                } 
     182                String dstXML = tag.getContent(); 
     183                ComponentAndName dstCAN = parseComponentAndName(xmlHelper, dstXML); 
     184 
     185                // do the chaining 
     186                chain(srcCAN.getComponent(), srcCAN.getName(), dstCAN.getComponent(), dstCAN.getName()); 
     187            } 
     188             
     189            // handle inputs 
     190            // 
     191            //  <inputs> 
     192            //    <input> 
     193            //      <name>RED</name> 
     194            //      <dest> 
     195            //        <component>A</component> 
     196            //        <name>ONE</name> 
     197            //      </dest> 
     198            //   </input> 
     199            // </inputs> 
     200 
     201            tag = xmlHelper.getNextTag(xml); 
     202            if (!INPUTS.equals(tag.getName())) { 
     203                throw new XMLException("Missing <inputs> within <workflow>"); 
     204            } 
     205            String inputsXML = tag.getContent(); 
     206            xml = tag.getRemainder(); 
     207            while (!inputsXML.isEmpty()) { 
     208                tag = xmlHelper.getNextTag(inputsXML); 
     209                inputsXML = tag.getRemainder(); 
     210 
     211                if (tag.getName().isEmpty()) { //TODO don't think these are necessary 
     212                    break; 
     213                } 
     214 
     215                if (!INPUT.equals(tag.getName())) { 
     216                    throw new XMLException("Missing <input> within <inputs"); 
     217                } 
     218                String inputXML = tag.getContent(); 
     219 
     220                tag = xmlHelper.getNextTag(inputXML); 
     221                inputXML = tag.getRemainder(); 
     222 
     223                if (!NAME.equals(tag.getName())) { 
     224                    throw new XMLException("Missing <name> within <input>"); 
     225                } 
     226                String inName = tag.getContent(); 
     227 
     228                tag = xmlHelper.getNextTag(inputXML); 
     229                if (!DEST.equals(tag.getName())) { 
     230                    throw new XMLException("Missing <dest> within <input>"); 
     231                } 
     232                String destXML = tag.getContent(); 
     233                ComponentAndName destCAN = parseComponentAndName(xmlHelper, destXML); 
     234 
     235                chainInput(inName, destCAN.getComponent(), destCAN.getName()); 
     236            } 
     237 
     238 
     239            // handle outputs 
     240            //  <outputs> 
     241            //    <output> 
     242            //      <name>OUTPUT</name> 
     243            //      <src> 
     244            //        <component>B</component> 
     245            //        <name>OUTPUT</name> 
     246            //      </src> 
     247            //    </output> 
     248            //  </outputs> 
     249            tag = xmlHelper.getNextTag(xml); 
     250            if (!OUTPUTS.equals(tag.getName())) { 
     251                throw new XMLException("Missing <outputs> within <workflow>"); 
     252            } 
     253            String outputsXML = tag.getContent(); 
     254            xml = tag.getRemainder(); 
     255            while (!outputsXML.isEmpty()) { 
     256                tag = xmlHelper.getNextTag(outputsXML); 
     257                outputsXML = tag.getRemainder(); 
     258 
     259                if (tag.getName().isEmpty()) { //TODO don't think these are necessary 
     260                    break; 
     261                } 
     262 
     263                if (!OUTPUT.equals(tag.getName())) { 
     264                    throw new XMLException("Missing <output> within <outputs>"); 
     265                } 
     266                String outputXML = tag.getContent(); 
     267 
     268                tag = xmlHelper.getNextTag(outputXML); 
     269                outputXML = tag.getRemainder(); 
     270 
     271                if (!NAME.equals(tag.getName())) { 
     272                    throw new XMLException("Missing <name> within <output>"); 
     273                } 
     274                String outName = tag.getContent(); 
     275 
     276                tag = xmlHelper.getNextTag(outputXML); 
     277                if (!SRC.equals(tag.getName())) { 
     278                    throw new XMLException("Missing <src> within <output>"); 
     279                } 
     280                String srcXML = tag.getContent(); 
     281                ComponentAndName srcCAN = parseComponentAndName(xmlHelper, srcXML); 
     282 
     283                chainOutput(outName, srcCAN.getComponent(), srcCAN.getName()); 
    142284            } 
    143285            success = true; 
     
    147289        } 
    148290        return success; 
     291    } 
     292     
     293    private ComponentAndName parseComponentAndName(XMLHelper xmlHelper, String xml) throws XMLException { 
     294        XMLTag tag = xmlHelper.getNextTag(xml); 
     295        if (!COMPONENT.equals(tag.getName())) { 
     296            throw new XMLException("Missing <component> tag"); 
     297        } 
     298        String componentName = tag.getContent(); 
     299        xml = tag.getRemainder(); 
     300        tag = xmlHelper.getNextTag(xml); 
     301        if (!NAME.equals(tag.getName())) { 
     302            throw new XMLException("Missing <name> tag"); 
     303        } 
     304        String name = tag.getContent(); 
     305 
     306        return new ComponentAndName(m_componentMap.get(componentName), name); 
    149307    } 
    150308 
     
    165323            xmlHelper.addEndTag(COMPONENT); 
    166324        } 
    167         for (IComponent component: m_componentMap.values()) { 
    168             xmlHelper.addTag(COMPONENT); 
    169             xmlHelper.addTagWithContent(NAME, component.getName()); 
    170             xmlHelper.addEndTag(COMPONENT); 
    171         } 
    172         xmlHelper.addTag(COMPONENT); 
    173         xmlHelper.addEndTag(COMPONENT); 
    174325        xmlHelper.addEndTag(COMPONENTS); 
    175326 
     
    198349            xmlHelper.addTagWithContent(COMPONENT, m_inputComponents.get(name).getName()); 
    199350            xmlHelper.addTagWithContent(NAME, m_inputComponentNames.get(name)); 
    200             xmlHelper.addEndTag(SRC); 
     351            xmlHelper.addEndTag(DEST); 
    201352            xmlHelper.addEndTag(INPUT); 
    202353        } 
     
    334485     */ 
    335486    private class Chain { 
    336         IComponent m_source; 
    337         String m_sourceName; 
    338         IComponent m_dest; 
    339         String m_destName; 
     487        final IComponent m_source; 
     488        final String m_sourceName; 
     489        final IComponent m_dest; 
     490        final String m_destName; 
    340491 
    341492        Chain(IComponent source, String sourceName, IComponent dest, String destName) { 
     
    362513        } 
    363514    } 
     515 
     516    /** 
     517     * Keeps track of IComponent and name. 
     518     */ 
     519    private class ComponentAndName { 
     520        final IComponent m_component; 
     521        final String m_name; 
     522         
     523        ComponentAndName(IComponent component, String name) { 
     524            m_component = component; 
     525            m_name = name; 
     526        } 
     527         
     528        public IComponent getComponent() { 
     529            return m_component; 
     530        } 
     531         
     532        public String getName() { 
     533            return m_name; 
     534        } 
     535    } 
    364536} 
  • branches/maven/projects/deep-zoom-plugin/src/test/java/loci/workflow/XMLTest.java

    r7430 r7431  
    6969 
    7070        String xml1 = workFlow1.toXML(); 
    71         System.out.println("workFlow XML:\n" + xml1); 
     71        System.out.println("workFlow1 XML:\n" + xml1); 
    7272 
    7373        WorkFlow workFlow2 = new WorkFlow(); 
     
    7575        String xml2 = workFlow2.toXML(); 
    7676 
     77        System.out.println("workFlow2 XML:\n" + xml2); 
     78 
    7779        assertTrue(xml1.equals(xml2)); 
    7880    } 
Note: See TracChangeset for help on using the changeset viewer.