001// =================== DO NOT EDIT THIS FILE ====================
002// Generated by Modello 2.3.0,
003// any modifications will be overwritten.
004// ==============================================================
005
006package org.codehaus.modello.test.features.io.jdom;
007
008  //---------------------------------/
009 //- Imported classes and packages -/
010//---------------------------------/
011
012import java.io.OutputStream;
013import java.io.OutputStreamWriter;
014import java.io.Writer;
015import java.text.DateFormat;
016import java.util.ArrayList;
017import java.util.Arrays;
018import java.util.Collection;
019import java.util.Iterator;
020import java.util.List;
021import java.util.ListIterator;
022import java.util.Locale;
023import java.util.Map;
024import java.util.Properties;
025import org.codehaus.modello.test.features.Action;
026import org.codehaus.modello.test.features.AnnotationTest;
027import org.codehaus.modello.test.features.ArrayFeatures;
028import org.codehaus.modello.test.features.AssociationFeatures;
029import org.codehaus.modello.test.features.BaseClass;
030import org.codehaus.modello.test.features.BidiInList;
031import org.codehaus.modello.test.features.BidiInSet;
032import org.codehaus.modello.test.features.Bidirectional;
033import org.codehaus.modello.test.features.ContentTest;
034import org.codehaus.modello.test.features.DueTo;
035import org.codehaus.modello.test.features.Features;
036import org.codehaus.modello.test.features.File;
037import org.codehaus.modello.test.features.InterfacesFeature;
038import org.codehaus.modello.test.features.JavaFeatures;
039import org.codehaus.modello.test.features.NodeItem;
040import org.codehaus.modello.test.features.Reference;
041import org.codehaus.modello.test.features.SimpleInterface;
042import org.codehaus.modello.test.features.SimpleTypes;
043import org.codehaus.modello.test.features.SubClassLevel1;
044import org.codehaus.modello.test.features.SubClassLevel2;
045import org.codehaus.modello.test.features.SubClassLevel3;
046import org.codehaus.modello.test.features.SubInterface;
047import org.codehaus.modello.test.features.SuperThing;
048import org.codehaus.modello.test.features.Thing;
049import org.codehaus.modello.test.features.Thingy;
050import org.codehaus.modello.test.features.XdocFeatures;
051import org.codehaus.modello.test.features.XmlAttributes;
052import org.codehaus.modello.test.features.XmlContent;
053import org.codehaus.modello.test.features.XmlContentLong;
054import org.codehaus.modello.test.features.XmlContentLongWithAttributes;
055import org.codehaus.modello.test.features.XmlFeatures;
056import org.codehaus.modello.test.features.XmlFieldsOrder;
057import org.codehaus.modello.test.features.XmlFieldsOrderParent;
058import org.codehaus.modello.test.features.XmlFieldsOrderParent2;
059import org.codehaus.modello.test.features.XmlTransientFields;
060import org.codehaus.modello.test.features.XsdFeatures;
061import org.codehaus.modello.test.features.other.PackageNameFeature;
062import org.codehaus.modello.test.features.other.SubInterfaceInPackage;
063import org.codehaus.plexus.util.xml.Xpp3Dom;
064import org.jdom2.Content;
065import org.jdom2.DefaultJDOMFactory;
066import org.jdom2.Document;
067import org.jdom2.Element;
068import org.jdom2.JDOMFactory;
069import org.jdom2.Namespace;
070import org.jdom2.Parent;
071import org.jdom2.Text;
072import org.jdom2.output.Format;
073import org.jdom2.output.XMLOutputter;
074
075/**
076 * Class ModelloFeaturesTestJDOMWriter.
077 * 
078 * @version $Revision$ $Date$
079 */
080@SuppressWarnings( "all" )
081public class ModelloFeaturesTestJDOMWriter
082{
083
084      //--------------------------/
085     //- Class/Member Variables -/
086    //--------------------------/
087
088    /**
089     * Field factory.
090     */
091    private final JDOMFactory factory;
092
093    /**
094     * Field lineSeparator.
095     */
096    private final String lineSeparator;
097
098
099      //----------------/
100     //- Constructors -/
101    //----------------/
102
103    public ModelloFeaturesTestJDOMWriter()
104    {
105        this( new DefaultJDOMFactory() );
106    } //-- org.codehaus.modello.test.features.io.jdom.ModelloFeaturesTestJDOMWriter()
107
108    public ModelloFeaturesTestJDOMWriter(JDOMFactory factory)
109    {
110        this.factory = factory;
111        this.lineSeparator = "\n";
112    } //-- org.codehaus.modello.test.features.io.jdom.ModelloFeaturesTestJDOMWriter(JDOMFactory)
113
114
115      //-----------/
116     //- Methods -/
117    //-----------/
118
119    /**
120     * Method findAndReplaceSimpleElement.
121     * 
122     * @param counter a counter object.
123     * @param defaultValue a defaultValue object.
124     * @param text a text object.
125     * @param name a name object.
126     * @param parent a parent object.
127     * @return Element
128     */
129    protected Element findAndReplaceSimpleElement( Counter counter, Element parent, String name, String text, String defaultValue )
130    {
131        if ( ( defaultValue != null ) && ( text != null ) && defaultValue.equals( text ) )
132        {
133            Element element =  parent.getChild( name, parent.getNamespace() );
134            // if exist and is default value or if doesn't exist.. just keep the way it is..
135            if ( ( element != null && defaultValue.equals( element.getText() ) ) || element == null )
136            {
137                return element;
138            }
139        }
140        boolean shouldExist = ( text != null ) && ( text.trim().length() > 0 );
141        Element element = updateElement( counter, parent, name );
142        if ( shouldExist )
143        {
144            element.setText( text );
145        }
146        return element;
147    } //-- Element findAndReplaceSimpleElement( Counter, Element, String, String, String )
148
149    /**
150     * Method findAndReplaceSimpleLists.
151     * 
152     * @param counter a counter object.
153     * @param childName a childName object.
154     * @param parentName a parentName object.
155     * @param list a list object.
156     * @param parent a parent object.
157     * @return Element
158     */
159    protected Element findAndReplaceSimpleLists( Counter counter, Element parent, java.util.Collection list, String parentName, String childName )
160    {
161        boolean shouldExist = ( list != null ) && ( list.size() > 0 );
162        Element element = updateElement( counter, parent, parentName );
163        if ( shouldExist )
164        {
165            Iterator it = list.iterator();
166            Counter innerCount = new Counter( counter.getDepth() + 1 );
167            while ( it.hasNext() )
168            {
169                String value = (String) it.next();
170                Element el = factory.element( childName, element.getNamespace() );
171                insertAtPreferredLocation( element, el, innerCount );
172                el.setText( value );
173                innerCount.increaseCount();
174            }
175            }
176            return element;
177    } //-- Element findAndReplaceSimpleLists( Counter, Element, java.util.Collection, String, String )
178
179    /**
180     * Method findAndReplaceXpp3DOM.
181     * 
182     * @param counter a counter object.
183     * @param dom a dom object.
184     * @param name a name object.
185     * @param parent a parent object.
186     * @return Element
187     */
188    protected Element findAndReplaceXpp3DOM( Counter counter, Element parent, String name, Xpp3Dom dom )
189    {
190        boolean shouldExist = ( dom != null ) && ( dom.getChildCount() > 0 || dom.getValue() != null );
191        Element element = updateElement( counter, parent, name );
192        if ( shouldExist )
193        {
194            replaceXpp3DOM( element, dom, new Counter( counter.getDepth() + 1 ) );
195        }
196        return element;
197    } //-- Element findAndReplaceXpp3DOM( Counter, Element, String, Xpp3Dom )
198
199    /**
200     * Method insertAtPreferredLocation.
201     * 
202     * @param parent a parent object.
203     * @param counter a counter object.
204     * @param child a child object.
205     */
206    protected void insertAtPreferredLocation( Element parent, Element child, Counter counter )
207    {
208        int contentIndex = 0;
209        int elementCounter = 0;
210        Iterator it = parent.getContent().iterator();
211        Text lastText = null;
212        int offset = 0;
213        while ( it.hasNext() && elementCounter <= counter.getCurrentIndex() )
214        {
215            Object next = it.next();
216            offset = offset + 1;
217            if ( next instanceof Element )
218            {
219                elementCounter = elementCounter + 1;
220                contentIndex = contentIndex + offset;
221                offset = 0;
222            }
223            if ( next instanceof Text && it.hasNext() )
224            {
225                lastText = (Text) next;
226            }
227        }
228        if ( lastText != null && lastText.getTextTrim().length() == 0 )
229        {
230            lastText = (Text) lastText.clone();
231        }
232        else
233        {
234            String starter = lineSeparator;
235            for ( int i = 0; i < counter.getDepth(); i++ )
236            {
237                starter = starter + "    "; //TODO make settable?
238            }
239            lastText = factory.text( starter );
240        }
241        if ( parent.getContentSize() == 0 )
242        {
243            Text finalText = (Text) lastText.clone();
244            finalText.setText( finalText.getText().substring( 0, finalText.getText().length() - "    ".length() ) );
245            parent.addContent( contentIndex, finalText );
246        }
247        parent.addContent( contentIndex, child );
248        parent.addContent( contentIndex, lastText );
249    } //-- void insertAtPreferredLocation( Element, Element, Counter )
250
251    /**
252     * Method iterate2Reference.
253     * 
254     * @param counter a counter object.
255     * @param childTag a childTag object.
256     * @param list a list object.
257     * @param parent a parent object.
258     */
259    protected void iterate2Reference( Counter counter, Element parent, java.util.Collection list, java.lang.String childTag )
260    {
261        Iterator it = list.iterator();
262        while ( it.hasNext() )
263        {
264            Reference value = (Reference) it.next();
265            updateReference( value, childTag, counter, parent );
266        }
267    } //-- void iterate2Reference( Counter, Element, java.util.Collection, java.lang.String )
268
269    /**
270     * Method iterateBidiInList.
271     * 
272     * @param counter a counter object.
273     * @param childTag a childTag object.
274     * @param parentTag a parentTag object.
275     * @param list a list object.
276     * @param parent a parent object.
277     */
278    protected void iterateBidiInList( Counter counter, Element parent, java.util.Collection list, java.lang.String parentTag, java.lang.String childTag )
279    {
280        boolean shouldExist = ( list != null ) && ( list.size() > 0 );
281        Element element = updateElement( counter, parent, parentTag );
282        if ( shouldExist )
283        {
284            Iterator it = list.iterator();
285            Counter innerCount = new Counter( counter.getDepth() + 1 );
286            while ( it.hasNext() )
287            {
288                BidiInList value = (BidiInList) it.next();
289                updateBidiInList( value, childTag, innerCount, element );
290                innerCount.increaseCount();
291            }
292        }
293    } //-- void iterateBidiInList( Counter, Element, java.util.Collection, java.lang.String, java.lang.String )
294
295    /**
296     * Method iterateBidiInSet.
297     * 
298     * @param counter a counter object.
299     * @param childTag a childTag object.
300     * @param parentTag a parentTag object.
301     * @param list a list object.
302     * @param parent a parent object.
303     */
304    protected void iterateBidiInSet( Counter counter, Element parent, java.util.Collection list, java.lang.String parentTag, java.lang.String childTag )
305    {
306        boolean shouldExist = ( list != null ) && ( list.size() > 0 );
307        Element element = updateElement( counter, parent, parentTag );
308        if ( shouldExist )
309        {
310            Iterator it = list.iterator();
311            Counter innerCount = new Counter( counter.getDepth() + 1 );
312            while ( it.hasNext() )
313            {
314                BidiInSet value = (BidiInSet) it.next();
315                updateBidiInSet( value, childTag, innerCount, element );
316                innerCount.increaseCount();
317            }
318        }
319    } //-- void iterateBidiInSet( Counter, Element, java.util.Collection, java.lang.String, java.lang.String )
320
321    /**
322     * Method iterateReference.
323     * 
324     * @param counter a counter object.
325     * @param childTag a childTag object.
326     * @param parentTag a parentTag object.
327     * @param list a list object.
328     * @param parent a parent object.
329     */
330    protected void iterateReference( Counter counter, Element parent, java.util.Collection list, java.lang.String parentTag, java.lang.String childTag )
331    {
332        boolean shouldExist = ( list != null ) && ( list.size() > 0 );
333        Element element = updateElement( counter, parent, parentTag );
334        if ( shouldExist )
335        {
336            Iterator it = list.iterator();
337            Counter innerCount = new Counter( counter.getDepth() + 1 );
338            while ( it.hasNext() )
339            {
340                Reference value = (Reference) it.next();
341                updateReference( value, childTag, innerCount, element );
342                innerCount.increaseCount();
343            }
344        }
345    } //-- void iterateReference( Counter, Element, java.util.Collection, java.lang.String, java.lang.String )
346
347    /**
348     * Method iterateThingy.
349     * 
350     * @param counter a counter object.
351     * @param childTag a childTag object.
352     * @param parentTag a parentTag object.
353     * @param list a list object.
354     * @param parent a parent object.
355     */
356    protected void iterateThingy( Counter counter, Element parent, java.util.Collection list, java.lang.String parentTag, java.lang.String childTag )
357    {
358        boolean shouldExist = ( list != null ) && ( list.size() > 0 );
359        Element element = updateElement( counter, parent, parentTag );
360        if ( shouldExist )
361        {
362            Iterator it = list.iterator();
363            Counter innerCount = new Counter( counter.getDepth() + 1 );
364            while ( it.hasNext() )
365            {
366                Thingy value = (Thingy) it.next();
367                updateThingy( value, childTag, innerCount, element );
368                innerCount.increaseCount();
369            }
370        }
371    } //-- void iterateThingy( Counter, Element, java.util.Collection, java.lang.String, java.lang.String )
372
373    /**
374     * Method replaceXpp3DOM.
375     * 
376     * @param parent a parent object.
377     * @param counter a counter object.
378     * @param parentDom a parentDom object.
379     */
380    protected void replaceXpp3DOM( Element parent, Xpp3Dom parentDom, Counter counter )
381    {
382        for( String attributeName : parentDom.getAttributeNames() )
383        {
384            String[] attrDetails = attributeName.split( ":", 2 );
385            if ( attrDetails.length == 2 )
386            {
387                parent.setAttribute( attrDetails[1], parentDom.getAttribute( attributeName ), parent.getNamespace( attrDetails[0] ) );
388            }
389            else 
390            {
391                parent.setAttribute( attributeName, parentDom.getAttribute( attributeName ) );
392            }
393        }
394        if ( parentDom.getChildCount() > 0 )
395        {
396            Xpp3Dom[] childs = parentDom.getChildren();
397            Collection domChilds = new ArrayList();
398            for ( int i = 0; i < childs.length; i++ )
399            {
400                domChilds.add( childs[i] );
401            }
402            ListIterator it = parent.getChildren().listIterator();
403            while ( it.hasNext() )
404            {
405                Element elem = (Element) it.next();
406                Iterator it2 = domChilds.iterator();
407                Xpp3Dom corrDom = null;
408                while ( it2.hasNext() )
409                {
410                    Xpp3Dom dm = (Xpp3Dom) it2.next();
411                    if ( dm.getName().equals( elem.getName() ) )
412                    {
413                        corrDom = dm;
414                        break;
415                    }
416                }
417                if ( corrDom != null )
418                {
419                    domChilds.remove( corrDom );
420                    replaceXpp3DOM( elem, corrDom, new Counter( counter.getDepth() + 1 ) );
421                    counter.increaseCount();
422                }
423                else
424                {
425                    it.remove();
426                }
427            }
428            Iterator it2 = domChilds.iterator();
429            while ( it2.hasNext() )
430            {
431                Xpp3Dom dm = (Xpp3Dom) it2.next();
432                Element elem = factory.element( dm.getName(), parent.getNamespace() );
433                insertAtPreferredLocation( parent, elem, counter );
434                counter.increaseCount();
435                replaceXpp3DOM( elem, dm, new Counter( counter.getDepth() + 1 ) );
436            }
437        }
438         else if ( parentDom.getValue() != null )
439        {
440            parent.setText( parentDom.getValue() );
441        }
442    } //-- void replaceXpp3DOM( Element, Xpp3Dom, Counter )
443
444    /**
445     * Method updateAction.
446     * 
447     * @param action a action object.
448     * @param element a element object.
449     * @param counter a counter object.
450     * @param xmlTag a xmlTag object.
451     */
452    protected void updateAction( Action action, String xmlTag, Counter counter, Element element )
453    {
454        if ( action != null )
455        {
456            Element root = updateElement( counter, element, xmlTag );
457            Counter innerCount = new Counter( counter.getDepth() + 1 );
458            if ( action.getDev() != null )
459            {
460                root.setAttribute( "dev", action.getDev() );
461            }
462            root.setText( action.getAction() );
463        }
464    } //-- void updateAction( Action, String, Counter, Element )
465
466    /**
467     * Method updateAnnotationTest.
468     * 
469     * @param annotationTest a annotationTest object.
470     * @param element a element object.
471     * @param counter a counter object.
472     * @param xmlTag a xmlTag object.
473     */
474    protected void updateAnnotationTest( AnnotationTest annotationTest, String xmlTag, Counter counter, Element element )
475    {
476        if ( annotationTest != null )
477        {
478            Element root = updateElement( counter, element, xmlTag );
479            Counter innerCount = new Counter( counter.getDepth() + 1 );
480            if ( annotationTest.getAnyField() != null )
481            {
482                updateElement( innerCount, root,  "anyField" ).setText( annotationTest.getAnyField() );
483            }
484        }
485    } //-- void updateAnnotationTest( AnnotationTest, String, Counter, Element )
486
487    /**
488     * Method updateArrayFeatures.
489     * 
490     * @param arrayFeatures a arrayFeatures object.
491     * @param element a element object.
492     * @param counter a counter object.
493     * @param xmlTag a xmlTag object.
494     */
495    protected void updateArrayFeatures( ArrayFeatures arrayFeatures, String xmlTag, Counter counter, Element element )
496    {
497        if ( arrayFeatures != null )
498        {
499            Element root = updateElement( counter, element, xmlTag );
500            Counter innerCount = new Counter( counter.getDepth() + 1 );
501        }
502    } //-- void updateArrayFeatures( ArrayFeatures, String, Counter, Element )
503
504    /**
505     * Method updateAssociationFeatures.
506     * 
507     * @param associationFeatures a associationFeatures object.
508     * @param element a element object.
509     * @param counter a counter object.
510     * @param xmlTag a xmlTag object.
511     */
512    protected void updateAssociationFeatures( AssociationFeatures associationFeatures, String xmlTag, Counter counter, Element element )
513    {
514        if ( associationFeatures != null )
515        {
516            Element root = updateElement( counter, element, xmlTag );
517            Counter innerCount = new Counter( counter.getDepth() + 1 );
518            iterateReference( innerCount, root, associationFeatures.getListReferences(),"listReferences","listReference" );
519            iterateReference( innerCount, root, associationFeatures.getSetReferences(),"setReferences","setReference" );
520            findAndReplaceSimpleLists( innerCount, root, associationFeatures.getListStrings(), "listStrings", "listString" );
521            findAndReplaceSimpleLists( innerCount, root, associationFeatures.getSetStrings(), "setStrings", "setString" );
522            if ( ( associationFeatures.getProperties() != null ) && ( associationFeatures.getProperties().size() > 0 ) )
523            {
524                Element listElement = updateElement( innerCount, root, "properties" );
525                Iterator it = associationFeatures.getProperties().keySet().iterator();
526                Counter propertiesCounter = new Counter( innerCount.getDepth() + 1 );
527                while ( it.hasNext() )
528                {
529                    String key = (String) it.next();
530                    findAndReplaceSimpleElement( propertiesCounter, listElement, key, (String) associationFeatures.getProperties().get( key ), null );
531                }
532            }
533            if ( associationFeatures.getBidi() != null )
534            {
535                updateBidirectional( associationFeatures.getBidi(), "bidi", innerCount, root );
536            }
537            iterateBidiInList( innerCount, root, associationFeatures.getListOfBidis(),"listOfBidis","listOfBidi" );
538            iterateBidiInSet( innerCount, root, associationFeatures.getSetOfBidis(),"setOfBidis","setOfBidi" );
539        }
540    } //-- void updateAssociationFeatures( AssociationFeatures, String, Counter, Element )
541
542    /**
543     * Method updateBaseClass.
544     * 
545     * @param baseClass a baseClass object.
546     * @param element a element object.
547     * @param counter a counter object.
548     * @param xmlTag a xmlTag object.
549     */
550    protected void updateBaseClass( BaseClass baseClass, String xmlTag, Counter counter, Element element )
551    {
552        if ( baseClass != null )
553        {
554            Element root = updateElement( counter, element, xmlTag );
555            Counter innerCount = new Counter( counter.getDepth() + 1 );
556            if ( baseClass.getBaseElement() != 0 )
557            {
558                updateElement( innerCount, root,  "baseElement" ).setText( String.valueOf( baseClass.getBaseElement() ) );
559            }
560            if ( baseClass.getBaseAttribute() != 0 )
561            {
562                root.setAttribute( "baseAttribute", String.valueOf( baseClass.getBaseAttribute() ) );
563            }
564        }
565    } //-- void updateBaseClass( BaseClass, String, Counter, Element )
566
567    /**
568     * Method updateBidiInList.
569     * 
570     * @param bidiInList a bidiInList object.
571     * @param element a element object.
572     * @param counter a counter object.
573     * @param xmlTag a xmlTag object.
574     */
575    protected void updateBidiInList( BidiInList bidiInList, String xmlTag, Counter counter, Element element )
576    {
577        if ( bidiInList != null )
578        {
579            Element root = updateElement( counter, element, xmlTag );
580            Counter innerCount = new Counter( counter.getDepth() + 1 );
581            if ( bidiInList.getParent() != null )
582            {
583                updateAssociationFeatures( bidiInList.getParent(), "parent", innerCount, root );
584            }
585        }
586    } //-- void updateBidiInList( BidiInList, String, Counter, Element )
587
588    /**
589     * Method updateBidiInSet.
590     * 
591     * @param bidiInSet a bidiInSet object.
592     * @param element a element object.
593     * @param counter a counter object.
594     * @param xmlTag a xmlTag object.
595     */
596    protected void updateBidiInSet( BidiInSet bidiInSet, String xmlTag, Counter counter, Element element )
597    {
598        if ( bidiInSet != null )
599        {
600            Element root = updateElement( counter, element, xmlTag );
601            Counter innerCount = new Counter( counter.getDepth() + 1 );
602            if ( bidiInSet.getParent() != null )
603            {
604                updateAssociationFeatures( bidiInSet.getParent(), "parent", innerCount, root );
605            }
606        }
607    } //-- void updateBidiInSet( BidiInSet, String, Counter, Element )
608
609    /**
610     * Method updateBidirectional.
611     * 
612     * @param bidirectional a bidirectional object.
613     * @param element a element object.
614     * @param counter a counter object.
615     * @param xmlTag a xmlTag object.
616     */
617    protected void updateBidirectional( Bidirectional bidirectional, String xmlTag, Counter counter, Element element )
618    {
619        if ( bidirectional != null )
620        {
621            Element root = updateElement( counter, element, xmlTag );
622            Counter innerCount = new Counter( counter.getDepth() + 1 );
623            if ( bidirectional.getParent() != null )
624            {
625                updateAssociationFeatures( bidirectional.getParent(), "parent", innerCount, root );
626            }
627        }
628    } //-- void updateBidirectional( Bidirectional, String, Counter, Element )
629
630    /**
631     * Method updateContentTest.
632     * 
633     * @param contentTest a contentTest object.
634     * @param element a element object.
635     * @param counter a counter object.
636     * @param xmlTag a xmlTag object.
637     */
638    protected void updateContentTest( ContentTest contentTest, String xmlTag, Counter counter, Element element )
639    {
640        if ( contentTest != null )
641        {
642            Element root = updateElement( counter, element, xmlTag );
643            Counter innerCount = new Counter( counter.getDepth() + 1 );
644            if ( contentTest.getAttr() != null )
645            {
646                root.setAttribute( "attr", contentTest.getAttr() );
647            }
648            if ( contentTest.getAttr2() != 0 )
649            {
650                root.setAttribute( "attr2", String.valueOf( contentTest.getAttr2() ) );
651            }
652            root.setText( contentTest.getContent() );
653        }
654    } //-- void updateContentTest( ContentTest, String, Counter, Element )
655
656    /**
657     * Method updateDueTo.
658     * 
659     * @param dueTo a dueTo object.
660     * @param element a element object.
661     * @param counter a counter object.
662     * @param xmlTag a xmlTag object.
663     */
664    protected void updateDueTo( DueTo dueTo, String xmlTag, Counter counter, Element element )
665    {
666        if ( dueTo != null )
667        {
668            Element root = updateElement( counter, element, xmlTag );
669            Counter innerCount = new Counter( counter.getDepth() + 1 );
670            if ( dueTo.getName() != null )
671            {
672                root.setAttribute( "name", dueTo.getName() );
673            }
674            if ( dueTo.getEmail() != null )
675            {
676                root.setAttribute( "email", dueTo.getEmail() );
677            }
678        }
679    } //-- void updateDueTo( DueTo, String, Counter, Element )
680
681    /**
682     * Method updateElement.
683     * 
684     * @param counter a counter object.
685     * @param name a name object.
686     * @param parent a parent object.
687     * @return Element
688     */
689    protected Element updateElement( Counter counter, Element parent, String name )
690    {
691        Element element = factory.element( name, parent.getNamespace() );
692        insertAtPreferredLocation( parent, element, counter );
693        counter.increaseCount();
694        return element;
695    } //-- Element updateElement( Counter, Element, String )
696
697    /**
698     * Method updateFeatures.
699     * 
700     * @param features a features object.
701     * @param document a document object.
702     * @param counter a counter object.
703     * @param xmlTag a xmlTag object.
704     */
705    protected void updateFeatures( Features features, String xmlTag, Counter counter, Document document )
706    {
707        if ( features != null )
708        {
709            Element root = factory.element( xmlTag, "http://codehaus-plexus.github.io/FEATURES/1.0.0" );
710            Namespace xsins = Namespace.getNamespace( "xsi", "http://www.w3.org/2001/XMLSchema-instance" );
711            root.setAttribute( "schemaLocation", "http://codehaus-plexus.github.io/FEATURES/1.0.0 http://codehaus-plexus.github.io/features-1.0.0.xsd", xsins );
712            document.setRootElement( root );
713            Counter innerCount = new Counter( counter.getDepth() + 1 );
714            if ( features.getVersionField() != null )
715            {
716                updateElement( innerCount, root,  "versionField" ).setText( features.getVersionField() );
717            }
718            if ( features.getComment() != null )
719            {
720                updateElement( innerCount, root,  "comment" ).setText( features.getComment() );
721            }
722            if ( features.getDescription() != null )
723            {
724                updateElement( innerCount, root,  "description" ).setText( features.getDescription() );
725            }
726            if ( features.getRequired() != null )
727            {
728                updateElement( innerCount, root,  "required" ).setText( features.getRequired() );
729            }
730            if ( features.getIdentifier() != null )
731            {
732                updateElement( innerCount, root,  "identifier" ).setText( features.getIdentifier() );
733            }
734            if ( features.getIdentifierPart2() != null )
735            {
736                updateReference( features.getIdentifierPart2(), "identifierPart2", innerCount, root );
737            }
738            if ( features.getSimpleTypes() != null )
739            {
740                updateSimpleTypes( features.getSimpleTypes(), "simpleTypes", innerCount, root );
741            }
742            if ( features.getDefaultValues() != null )
743            {
744                updateSimpleTypes( features.getDefaultValues(), "defaultValues", innerCount, root );
745            }
746            if ( features.getArrays() != null )
747            {
748                updateArrayFeatures( features.getArrays(), "arrays", innerCount, root );
749            }
750            if ( features.getAssociationFeatures() != null )
751            {
752                updateAssociationFeatures( features.getAssociationFeatures(), "associationFeatures", innerCount, root );
753            }
754            if ( features.getJavaFeatures() != null )
755            {
756                updateJavaFeatures( features.getJavaFeatures(), "javaFeatures", innerCount, root );
757            }
758            if ( features.getXmlFeatures() != null )
759            {
760                updateXmlFeatures( features.getXmlFeatures(), "xmlFeatures", innerCount, root );
761            }
762            if ( features.getXdocFeatures() != null )
763            {
764                updateXdocFeatures( features.getXdocFeatures(), "xdocFeatures", innerCount, root );
765            }
766            if ( features.getNode() != null )
767            {
768                updateNodeItem( features.getNode(), "node", innerCount, root );
769            }
770            if ( features.getCloneable() != null )
771            {
772                updateThing( features.getCloneable(), "cloneable", innerCount, root );
773            }
774            if ( features.getFile() != null )
775            {
776                updateFile( features.getFile(), "file", innerCount, root );
777            }
778            if ( features.getAction() != null )
779            {
780                updateAction( features.getAction(), "action", innerCount, root );
781            }
782        }
783    } //-- void updateFeatures( Features, String, Counter, Document )
784
785    /**
786     * Method updateFile.
787     * 
788     * @param file a file object.
789     * @param element a element object.
790     * @param counter a counter object.
791     * @param xmlTag a xmlTag object.
792     */
793    protected void updateFile( File file, String xmlTag, Counter counter, Element element )
794    {
795        if ( file != null )
796        {
797            Element root = updateElement( counter, element, xmlTag );
798            Counter innerCount = new Counter( counter.getDepth() + 1 );
799            if ( file.getFile() != null )
800            {
801                updateElement( innerCount, root,  "file" ).setText( file.getFile() );
802            }
803        }
804    } //-- void updateFile( File, String, Counter, Element )
805
806    /**
807     * Method updateInterfacesFeature.
808     * 
809     * @param interfacesFeature a interfacesFeature object.
810     * @param element a element object.
811     * @param counter a counter object.
812     * @param xmlTag a xmlTag object.
813     */
814    protected void updateInterfacesFeature( InterfacesFeature interfacesFeature, String xmlTag, Counter counter, Element element )
815    {
816        if ( interfacesFeature != null )
817        {
818            Element root = updateElement( counter, element, xmlTag );
819            Counter innerCount = new Counter( counter.getDepth() + 1 );
820            if ( interfacesFeature.getId() != null )
821            {
822                updateElement( innerCount, root,  "id" ).setText( interfacesFeature.getId() );
823            }
824        }
825    } //-- void updateInterfacesFeature( InterfacesFeature, String, Counter, Element )
826
827    /**
828     * Method updateJavaFeatures.
829     * 
830     * @param javaFeatures a javaFeatures object.
831     * @param element a element object.
832     * @param counter a counter object.
833     * @param xmlTag a xmlTag object.
834     */
835    protected void updateJavaFeatures( JavaFeatures javaFeatures, String xmlTag, Counter counter, Element element )
836    {
837        if ( javaFeatures != null )
838        {
839            Element root = updateElement( counter, element, xmlTag );
840            Counter innerCount = new Counter( counter.getDepth() + 1 );
841            if ( javaFeatures.getInterfaces() != null )
842            {
843                updateInterfacesFeature( javaFeatures.getInterfaces(), "interfaces", innerCount, root );
844            }
845            if ( javaFeatures.getPackageName() != null )
846            {
847                updatePackageNameFeature( javaFeatures.getPackageName(), "packageName", innerCount, root );
848            }
849            if ( javaFeatures.getBase() != null )
850            {
851                updateBaseClass( javaFeatures.getBase(), "base", innerCount, root );
852            }
853            if ( javaFeatures.getSubClass() != null )
854            {
855                updateSubClassLevel1( javaFeatures.getSubClass(), "subClass", innerCount, root );
856            }
857            if ( javaFeatures.getSubClass2() != null )
858            {
859                updateSubClassLevel2( javaFeatures.getSubClass2(), "subClass2", innerCount, root );
860            }
861            if ( javaFeatures.getSubClass3() != null )
862            {
863                updateSubClassLevel3( javaFeatures.getSubClass3(), "subClass3", innerCount, root );
864            }
865            if ( javaFeatures.getAnnotation() != null )
866            {
867                updateAnnotationTest( javaFeatures.getAnnotation(), "annotation", innerCount, root );
868            }
869        }
870    } //-- void updateJavaFeatures( JavaFeatures, String, Counter, Element )
871
872    /**
873     * Method updateNodeItem.
874     * 
875     * @param nodeItem a nodeItem object.
876     * @param element a element object.
877     * @param counter a counter object.
878     * @param xmlTag a xmlTag object.
879     */
880    protected void updateNodeItem( NodeItem nodeItem, String xmlTag, Counter counter, Element element )
881    {
882        if ( nodeItem != null )
883        {
884            Element root = updateElement( counter, element, xmlTag );
885            Counter innerCount = new Counter( counter.getDepth() + 1 );
886            if ( nodeItem.getValue() != null )
887            {
888                updateElement( innerCount, root,  "value" ).setText( nodeItem.getValue() );
889            }
890            if ( nodeItem.getChild() != null )
891            {
892                updateNodeItem( nodeItem.getChild(), "child", innerCount, root );
893            }
894        }
895    } //-- void updateNodeItem( NodeItem, String, Counter, Element )
896
897    /**
898     * Method updatePackageNameFeature.
899     * 
900     * @param packageNameFeature a packageNameFeature object.
901     * @param element a element object.
902     * @param counter a counter object.
903     * @param xmlTag a xmlTag object.
904     */
905    protected void updatePackageNameFeature( PackageNameFeature packageNameFeature, String xmlTag, Counter counter, Element element )
906    {
907        if ( packageNameFeature != null )
908        {
909            Element root = updateElement( counter, element, xmlTag );
910            Counter innerCount = new Counter( counter.getDepth() + 1 );
911            if ( packageNameFeature.getReference() != null )
912            {
913                updateReference( packageNameFeature.getReference(), "reference", innerCount, root );
914            }
915        }
916    } //-- void updatePackageNameFeature( PackageNameFeature, String, Counter, Element )
917
918    /**
919     * Method updateReference.
920     * 
921     * @param reference a reference object.
922     * @param element a element object.
923     * @param counter a counter object.
924     * @param xmlTag a xmlTag object.
925     */
926    protected void updateReference( Reference reference, String xmlTag, Counter counter, Element element )
927    {
928        if ( reference != null )
929        {
930            Element root = updateElement( counter, element, xmlTag );
931            Counter innerCount = new Counter( counter.getDepth() + 1 );
932            if ( reference.getId() != null )
933            {
934                updateElement( innerCount, root,  "id" ).setText( reference.getId() );
935            }
936        }
937    } //-- void updateReference( Reference, String, Counter, Element )
938
939    /**
940     * Method updateSimpleTypes.
941     * 
942     * @param simpleTypes a simpleTypes object.
943     * @param element a element object.
944     * @param counter a counter object.
945     * @param xmlTag a xmlTag object.
946     */
947    protected void updateSimpleTypes( SimpleTypes simpleTypes, String xmlTag, Counter counter, Element element )
948    {
949        if ( simpleTypes != null )
950        {
951            Element root = updateElement( counter, element, xmlTag );
952            Counter innerCount = new Counter( counter.getDepth() + 1 );
953            if ( simpleTypes.isPrimitiveBoolean() != true )
954            {
955                updateElement( innerCount, root,  "primitiveBoolean" ).setText( String.valueOf( simpleTypes.isPrimitiveBoolean() ) );
956            }
957            if ( simpleTypes.getPrimitiveChar() != 'H' )
958            {
959                updateElement( innerCount, root,  "primitiveChar" ).setText( String.valueOf( simpleTypes.getPrimitiveChar() ) );
960            }
961            if ( simpleTypes.getPrimitiveByte() != 12 )
962            {
963                updateElement( innerCount, root,  "primitiveByte" ).setText( String.valueOf( simpleTypes.getPrimitiveByte() ) );
964            }
965            if ( simpleTypes.getPrimitiveShort() != 1212 )
966            {
967                updateElement( innerCount, root,  "primitiveShort" ).setText( String.valueOf( simpleTypes.getPrimitiveShort() ) );
968            }
969            if ( simpleTypes.getPrimitiveInt() != 121212 )
970            {
971                updateElement( innerCount, root,  "primitiveInt" ).setText( String.valueOf( simpleTypes.getPrimitiveInt() ) );
972            }
973            if ( simpleTypes.getPrimitiveLong() != 1234567890123L )
974            {
975                updateElement( innerCount, root,  "primitiveLong" ).setText( String.valueOf( simpleTypes.getPrimitiveLong() ) );
976            }
977            if ( simpleTypes.getPrimitiveFloat() != 12.12f )
978            {
979                updateElement( innerCount, root,  "primitiveFloat" ).setText( String.valueOf( simpleTypes.getPrimitiveFloat() ) );
980            }
981            if ( simpleTypes.getPrimitiveDouble() != 12.12 )
982            {
983                updateElement( innerCount, root,  "primitiveDouble" ).setText( String.valueOf( simpleTypes.getPrimitiveDouble() ) );
984            }
985            if ( ( simpleTypes.getObjectString() != null ) && !simpleTypes.getObjectString().equals( "default value" ) )
986            {
987                updateElement( innerCount, root,  "objectString" ).setText( simpleTypes.getObjectString() );
988            }
989            if ( ( simpleTypes.getObjectDate() != null ) && !simpleTypes.getObjectDate().equals( new java.util.Date( 1356383532012L ) ) )
990            {
991                updateElement( innerCount, root,  "objectDate" ).setText( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", java.util.Locale.US ).format( simpleTypes.getObjectDate() ) );
992            }
993            if ( simpleTypes.isPrimitiveBooleanNoDefault() != false )
994            {
995                updateElement( innerCount, root,  "primitiveBooleanNoDefault" ).setText( String.valueOf( simpleTypes.isPrimitiveBooleanNoDefault() ) );
996            }
997            if ( simpleTypes.getPrimitiveCharNoDefault() != '\0' )
998            {
999                updateElement( innerCount, root,  "primitiveCharNoDefault" ).setText( String.valueOf( simpleTypes.getPrimitiveCharNoDefault() ) );
1000            }
1001            if ( simpleTypes.getPrimitiveByteNoDefault() != 0 )
1002            {
1003                updateElement( innerCount, root,  "primitiveByteNoDefault" ).setText( String.valueOf( simpleTypes.getPrimitiveByteNoDefault() ) );
1004            }
1005            if ( simpleTypes.getPrimitiveShortNoDefault() != 0 )
1006            {
1007                updateElement( innerCount, root,  "primitiveShortNoDefault" ).setText( String.valueOf( simpleTypes.getPrimitiveShortNoDefault() ) );
1008            }
1009            if ( simpleTypes.getPrimitiveIntNoDefault() != 0 )
1010            {
1011                updateElement( innerCount, root,  "primitiveIntNoDefault" ).setText( String.valueOf( simpleTypes.getPrimitiveIntNoDefault() ) );
1012            }
1013            if ( simpleTypes.getPrimitiveLongNoDefault() != 0L )
1014            {
1015                updateElement( innerCount, root,  "primitiveLongNoDefault" ).setText( String.valueOf( simpleTypes.getPrimitiveLongNoDefault() ) );
1016            }
1017            if ( simpleTypes.getPrimitiveFloatNoDefault() != 0.0f )
1018            {
1019                updateElement( innerCount, root,  "primitiveFloatNoDefault" ).setText( String.valueOf( simpleTypes.getPrimitiveFloatNoDefault() ) );
1020            }
1021            if ( simpleTypes.getPrimitiveDoubleNoDefault() != 0.0 )
1022            {
1023                updateElement( innerCount, root,  "primitiveDoubleNoDefault" ).setText( String.valueOf( simpleTypes.getPrimitiveDoubleNoDefault() ) );
1024            }
1025            if ( simpleTypes.getObjectStringNoDefault() != null )
1026            {
1027                updateElement( innerCount, root,  "objectStringNoDefault" ).setText( simpleTypes.getObjectStringNoDefault() );
1028            }
1029            if ( simpleTypes.getObjectDateNoDefault() != null )
1030            {
1031                updateElement( innerCount, root,  "objectDateNoDefault" ).setText( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", java.util.Locale.US ).format( simpleTypes.getObjectDateNoDefault() ) );
1032            }
1033            findAndReplaceXpp3DOM( innerCount, root, "dom", (Xpp3Dom) simpleTypes.getDom() );
1034            if ( simpleTypes.getContent() != null )
1035            {
1036                updateContentTest( simpleTypes.getContent(), "content", innerCount, root );
1037            }
1038        }
1039    } //-- void updateSimpleTypes( SimpleTypes, String, Counter, Element )
1040
1041    /**
1042     * Method updateSubClassLevel1.
1043     * 
1044     * @param subClassLevel1 a subClassLevel1 object.
1045     * @param element a element object.
1046     * @param counter a counter object.
1047     * @param xmlTag a xmlTag object.
1048     */
1049    protected void updateSubClassLevel1( SubClassLevel1 subClassLevel1, String xmlTag, Counter counter, Element element )
1050    {
1051        if ( subClassLevel1 != null )
1052        {
1053            Element root = updateElement( counter, element, xmlTag );
1054            Counter innerCount = new Counter( counter.getDepth() + 1 );
1055            if ( subClassLevel1.getSubElement1() != 0L )
1056            {
1057                updateElement( innerCount, root,  "subElement1" ).setText( String.valueOf( subClassLevel1.getSubElement1() ) );
1058            }
1059            if ( subClassLevel1.getSubAttribute1() != 0L )
1060            {
1061                root.setAttribute( "subAttribute1", String.valueOf( subClassLevel1.getSubAttribute1() ) );
1062            }
1063            if ( subClassLevel1.getBaseElement() != 0 )
1064            {
1065                updateElement( innerCount, root,  "baseElement" ).setText( String.valueOf( subClassLevel1.getBaseElement() ) );
1066            }
1067            if ( subClassLevel1.getBaseAttribute() != 0 )
1068            {
1069                root.setAttribute( "baseAttribute", String.valueOf( subClassLevel1.getBaseAttribute() ) );
1070            }
1071        }
1072    } //-- void updateSubClassLevel1( SubClassLevel1, String, Counter, Element )
1073
1074    /**
1075     * Method updateSubClassLevel2.
1076     * 
1077     * @param subClassLevel2 a subClassLevel2 object.
1078     * @param element a element object.
1079     * @param counter a counter object.
1080     * @param xmlTag a xmlTag object.
1081     */
1082    protected void updateSubClassLevel2( SubClassLevel2 subClassLevel2, String xmlTag, Counter counter, Element element )
1083    {
1084        if ( subClassLevel2 != null )
1085        {
1086            Element root = updateElement( counter, element, xmlTag );
1087            Counter innerCount = new Counter( counter.getDepth() + 1 );
1088            if ( subClassLevel2.getSubElement2() != 0.0f )
1089            {
1090                updateElement( innerCount, root,  "subElement2" ).setText( String.valueOf( subClassLevel2.getSubElement2() ) );
1091            }
1092            if ( subClassLevel2.getSubAttribute2() != 0.0f )
1093            {
1094                root.setAttribute( "subAttribute2", String.valueOf( subClassLevel2.getSubAttribute2() ) );
1095            }
1096            if ( subClassLevel2.getSubElement1() != 0L )
1097            {
1098                updateElement( innerCount, root,  "subElement1" ).setText( String.valueOf( subClassLevel2.getSubElement1() ) );
1099            }
1100            if ( subClassLevel2.getSubAttribute1() != 0L )
1101            {
1102                root.setAttribute( "subAttribute1", String.valueOf( subClassLevel2.getSubAttribute1() ) );
1103            }
1104            if ( subClassLevel2.getBaseElement() != 0 )
1105            {
1106                updateElement( innerCount, root,  "baseElement" ).setText( String.valueOf( subClassLevel2.getBaseElement() ) );
1107            }
1108            if ( subClassLevel2.getBaseAttribute() != 0 )
1109            {
1110                root.setAttribute( "baseAttribute", String.valueOf( subClassLevel2.getBaseAttribute() ) );
1111            }
1112        }
1113    } //-- void updateSubClassLevel2( SubClassLevel2, String, Counter, Element )
1114
1115    /**
1116     * Method updateSubClassLevel3.
1117     * 
1118     * @param subClassLevel3 a subClassLevel3 object.
1119     * @param element a element object.
1120     * @param counter a counter object.
1121     * @param xmlTag a xmlTag object.
1122     */
1123    protected void updateSubClassLevel3( SubClassLevel3 subClassLevel3, String xmlTag, Counter counter, Element element )
1124    {
1125        if ( subClassLevel3 != null )
1126        {
1127            Element root = updateElement( counter, element, xmlTag );
1128            Counter innerCount = new Counter( counter.getDepth() + 1 );
1129            if ( subClassLevel3.getSubElement3() != 0.0 )
1130            {
1131                updateElement( innerCount, root,  "subElement3" ).setText( String.valueOf( subClassLevel3.getSubElement3() ) );
1132            }
1133            if ( subClassLevel3.getSubAttribute3() != 0.0 )
1134            {
1135                root.setAttribute( "subAttribute3", String.valueOf( subClassLevel3.getSubAttribute3() ) );
1136            }
1137            if ( subClassLevel3.getSubElement2() != 0.0f )
1138            {
1139                updateElement( innerCount, root,  "subElement2" ).setText( String.valueOf( subClassLevel3.getSubElement2() ) );
1140            }
1141            if ( subClassLevel3.getSubAttribute2() != 0.0f )
1142            {
1143                root.setAttribute( "subAttribute2", String.valueOf( subClassLevel3.getSubAttribute2() ) );
1144            }
1145            if ( subClassLevel3.getSubElement1() != 0L )
1146            {
1147                updateElement( innerCount, root,  "subElement1" ).setText( String.valueOf( subClassLevel3.getSubElement1() ) );
1148            }
1149            if ( subClassLevel3.getSubAttribute1() != 0L )
1150            {
1151                root.setAttribute( "subAttribute1", String.valueOf( subClassLevel3.getSubAttribute1() ) );
1152            }
1153            if ( subClassLevel3.getBaseElement() != 0 )
1154            {
1155                updateElement( innerCount, root,  "baseElement" ).setText( String.valueOf( subClassLevel3.getBaseElement() ) );
1156            }
1157            if ( subClassLevel3.getBaseAttribute() != 0 )
1158            {
1159                root.setAttribute( "baseAttribute", String.valueOf( subClassLevel3.getBaseAttribute() ) );
1160            }
1161        }
1162    } //-- void updateSubClassLevel3( SubClassLevel3, String, Counter, Element )
1163
1164    /**
1165     * Method updateSuperThing.
1166     * 
1167     * @param superThing a superThing object.
1168     * @param element a element object.
1169     * @param counter a counter object.
1170     * @param xmlTag a xmlTag object.
1171     */
1172    protected void updateSuperThing( SuperThing superThing, String xmlTag, Counter counter, Element element )
1173    {
1174        if ( superThing != null )
1175        {
1176            Element root = updateElement( counter, element, xmlTag );
1177            Counter innerCount = new Counter( counter.getDepth() + 1 );
1178        }
1179    } //-- void updateSuperThing( SuperThing, String, Counter, Element )
1180
1181    /**
1182     * Method updateThing.
1183     * 
1184     * @param thing a thing object.
1185     * @param element a element object.
1186     * @param counter a counter object.
1187     * @param xmlTag a xmlTag object.
1188     */
1189    protected void updateThing( Thing thing, String xmlTag, Counter counter, Element element )
1190    {
1191        if ( thing != null )
1192        {
1193            Element root = updateElement( counter, element, xmlTag );
1194            Counter innerCount = new Counter( counter.getDepth() + 1 );
1195            if ( thing.isSomeBoolean() != false )
1196            {
1197                updateElement( innerCount, root,  "someBoolean" ).setText( String.valueOf( thing.isSomeBoolean() ) );
1198            }
1199            if ( thing.getSomeChar() != '\0' )
1200            {
1201                updateElement( innerCount, root,  "someChar" ).setText( String.valueOf( thing.getSomeChar() ) );
1202            }
1203            if ( thing.getSomeByte() != 0 )
1204            {
1205                updateElement( innerCount, root,  "someByte" ).setText( String.valueOf( thing.getSomeByte() ) );
1206            }
1207            if ( thing.getSomeShort() != 0 )
1208            {
1209                updateElement( innerCount, root,  "someShort" ).setText( String.valueOf( thing.getSomeShort() ) );
1210            }
1211            if ( thing.getSomeInt() != 0 )
1212            {
1213                updateElement( innerCount, root,  "someInt" ).setText( String.valueOf( thing.getSomeInt() ) );
1214            }
1215            if ( thing.getSomeLong() != 0L )
1216            {
1217                updateElement( innerCount, root,  "someLong" ).setText( String.valueOf( thing.getSomeLong() ) );
1218            }
1219            if ( thing.getSomeFloat() != 0.0f )
1220            {
1221                updateElement( innerCount, root,  "someFloat" ).setText( String.valueOf( thing.getSomeFloat() ) );
1222            }
1223            if ( thing.getSomeDouble() != 0.0 )
1224            {
1225                updateElement( innerCount, root,  "someDouble" ).setText( String.valueOf( thing.getSomeDouble() ) );
1226            }
1227            if ( thing.getSomeString() != null )
1228            {
1229                updateElement( innerCount, root,  "someString" ).setText( thing.getSomeString() );
1230            }
1231            if ( thing.getSomeDate() != null )
1232            {
1233                updateElement( innerCount, root,  "someDate" ).setText( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", java.util.Locale.US ).format( thing.getSomeDate() ) );
1234            }
1235            findAndReplaceXpp3DOM( innerCount, root, "someDom", (Xpp3Dom) thing.getSomeDom() );
1236            if ( ( thing.getSomeProperties() != null ) && ( thing.getSomeProperties().size() > 0 ) )
1237            {
1238                Element listElement = updateElement( innerCount, root, "someProperties" );
1239                Iterator it = thing.getSomeProperties().keySet().iterator();
1240                Counter propertiesCounter = new Counter( innerCount.getDepth() + 1 );
1241                while ( it.hasNext() )
1242                {
1243                    String key = (String) it.next();
1244                    findAndReplaceSimpleElement( propertiesCounter, listElement, key, (String) thing.getSomeProperties().get( key ), null );
1245                }
1246            }
1247            findAndReplaceSimpleLists( innerCount, root, thing.getSomeStringList(), "someStringList", "someStringList" );
1248            findAndReplaceSimpleLists( innerCount, root, thing.getSomeStringSet(), "someStringSet", "someStringSet" );
1249            if ( thing.getDeepThingy() != null )
1250            {
1251                updateThingy( thing.getDeepThingy(), "deepThingy", innerCount, root );
1252            }
1253            iterateThingy( innerCount, root, thing.getDeepThingyList(),"deepThingyList","deepThingyList" );
1254            iterateThingy( innerCount, root, thing.getDeepThingySet(),"deepThingySet","deepThingySet" );
1255            if ( thing.getShallowThingy() != null )
1256            {
1257                updateThingy( thing.getShallowThingy(), "shallowThingy", innerCount, root );
1258            }
1259            iterateThingy( innerCount, root, thing.getShallowThingyList(),"shallowThingyList","shallowThingyList" );
1260            iterateThingy( innerCount, root, thing.getShallowThingySet(),"shallowThingySet","shallowThingySet" );
1261        }
1262    } //-- void updateThing( Thing, String, Counter, Element )
1263
1264    /**
1265     * Method updateThingy.
1266     * 
1267     * @param thingy a thingy object.
1268     * @param element a element object.
1269     * @param counter a counter object.
1270     * @param xmlTag a xmlTag object.
1271     */
1272    protected void updateThingy( Thingy thingy, String xmlTag, Counter counter, Element element )
1273    {
1274        if ( thingy != null )
1275        {
1276            Element root = updateElement( counter, element, xmlTag );
1277            Counter innerCount = new Counter( counter.getDepth() + 1 );
1278            root.setText( thingy.getSomeContent() );
1279        }
1280    } //-- void updateThingy( Thingy, String, Counter, Element )
1281
1282    /**
1283     * Method updateXdocFeatures.
1284     * 
1285     * @param xdocFeatures a xdocFeatures object.
1286     * @param element a element object.
1287     * @param counter a counter object.
1288     * @param xmlTag a xmlTag object.
1289     */
1290    protected void updateXdocFeatures( XdocFeatures xdocFeatures, String xmlTag, Counter counter, Element element )
1291    {
1292        if ( xdocFeatures != null )
1293        {
1294            Element root = updateElement( counter, element, xmlTag );
1295            Counter innerCount = new Counter( counter.getDepth() + 1 );
1296            if ( xdocFeatures.getField() != null )
1297            {
1298                updateElement( innerCount, root,  "field" ).setText( xdocFeatures.getField() );
1299            }
1300            if ( xdocFeatures.getXdocSeparatorNone() != null )
1301            {
1302                updateElement( innerCount, root,  "xdocSeparatorNone" ).setText( xdocFeatures.getXdocSeparatorNone() );
1303            }
1304            if ( xdocFeatures.getXdocSeparatorBlank() != null )
1305            {
1306                updateElement( innerCount, root,  "xdocSeparatorBlank" ).setText( xdocFeatures.getXdocSeparatorBlank() );
1307            }
1308        }
1309    } //-- void updateXdocFeatures( XdocFeatures, String, Counter, Element )
1310
1311    /**
1312     * Method updateXmlAttributes.
1313     * 
1314     * @param xmlAttributes a xmlAttributes object.
1315     * @param element a element object.
1316     * @param counter a counter object.
1317     * @param xmlTag a xmlTag object.
1318     */
1319    protected void updateXmlAttributes( XmlAttributes xmlAttributes, String xmlTag, Counter counter, Element element )
1320    {
1321        if ( xmlAttributes != null )
1322        {
1323            Element root = updateElement( counter, element, xmlTag );
1324            Counter innerCount = new Counter( counter.getDepth() + 1 );
1325            if ( xmlAttributes.isPrimitiveBoolean() != true )
1326            {
1327                root.setAttribute( "primitiveBoolean", String.valueOf( xmlAttributes.isPrimitiveBoolean() ) );
1328            }
1329            if ( xmlAttributes.getPrimitiveChar() != 'H' )
1330            {
1331                root.setAttribute( "primitiveChar", String.valueOf( xmlAttributes.getPrimitiveChar() ) );
1332            }
1333            if ( xmlAttributes.getPrimitiveByte() != 12 )
1334            {
1335                root.setAttribute( "primitiveByte", String.valueOf( xmlAttributes.getPrimitiveByte() ) );
1336            }
1337            if ( xmlAttributes.getPrimitiveShort() != 1212 )
1338            {
1339                root.setAttribute( "primitiveShort", String.valueOf( xmlAttributes.getPrimitiveShort() ) );
1340            }
1341            if ( xmlAttributes.getPrimitiveInt() != 121212 )
1342            {
1343                root.setAttribute( "primitiveInt", String.valueOf( xmlAttributes.getPrimitiveInt() ) );
1344            }
1345            if ( xmlAttributes.getPrimitiveLong() != 1234567890123L )
1346            {
1347                root.setAttribute( "primitiveLong", String.valueOf( xmlAttributes.getPrimitiveLong() ) );
1348            }
1349            if ( xmlAttributes.getPrimitiveFloat() != 12.12f )
1350            {
1351                root.setAttribute( "primitiveFloat", String.valueOf( xmlAttributes.getPrimitiveFloat() ) );
1352            }
1353            if ( xmlAttributes.getPrimitiveDouble() != 12.12 )
1354            {
1355                root.setAttribute( "primitiveDouble", String.valueOf( xmlAttributes.getPrimitiveDouble() ) );
1356            }
1357            if ( ( xmlAttributes.getObjectString() != null ) && !xmlAttributes.getObjectString().equals( "default value" ) )
1358            {
1359                root.setAttribute( "objectString", xmlAttributes.getObjectString() );
1360            }
1361            if ( xmlAttributes.getObjectDate() != null )
1362            {
1363                root.setAttribute( "objectDate", new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS", java.util.Locale.US ).format( xmlAttributes.getObjectDate() ) );
1364            }
1365            if ( ( xmlAttributes.getAttribute() != null ) && !xmlAttributes.getAttribute().equals( "default" ) )
1366            {
1367                root.setAttribute( "tag-name", xmlAttributes.getAttribute() );
1368            }
1369        }
1370    } //-- void updateXmlAttributes( XmlAttributes, String, Counter, Element )
1371
1372    /**
1373     * Method updateXmlContent.
1374     * 
1375     * @param xmlContent a xmlContent object.
1376     * @param element a element object.
1377     * @param counter a counter object.
1378     * @param xmlTag a xmlTag object.
1379     */
1380    protected void updateXmlContent( XmlContent xmlContent, String xmlTag, Counter counter, Element element )
1381    {
1382        if ( xmlContent != null )
1383        {
1384            Element root = updateElement( counter, element, xmlTag );
1385            Counter innerCount = new Counter( counter.getDepth() + 1 );
1386            if ( xmlContent.getLongContent() != null )
1387            {
1388                updateXmlContentLong( xmlContent.getLongContent(), "content.long", innerCount, root );
1389            }
1390            if ( xmlContent.getLongContentWithAttributes() != null )
1391            {
1392                updateXmlContentLongWithAttributes( xmlContent.getLongContentWithAttributes(), "content.long-with-attributes", innerCount, root );
1393            }
1394        }
1395    } //-- void updateXmlContent( XmlContent, String, Counter, Element )
1396
1397    /**
1398     * Method updateXmlContentLong.
1399     * 
1400     * @param xmlContentLong a xmlContentLong object.
1401     * @param element a element object.
1402     * @param counter a counter object.
1403     * @param xmlTag a xmlTag object.
1404     */
1405    protected void updateXmlContentLong( XmlContentLong xmlContentLong, String xmlTag, Counter counter, Element element )
1406    {
1407        if ( xmlContentLong != null )
1408        {
1409            Element root = updateElement( counter, element, xmlTag );
1410            Counter innerCount = new Counter( counter.getDepth() + 1 );
1411            root.setText( String.valueOf( xmlContentLong.getContent() ) );
1412        }
1413    } //-- void updateXmlContentLong( XmlContentLong, String, Counter, Element )
1414
1415    /**
1416     * Method updateXmlContentLongWithAttributes.
1417     * 
1418     * @param xmlContentLongWithAttributes a
1419     * xmlContentLongWithAttributes object.
1420     * @param element a element object.
1421     * @param counter a counter object.
1422     * @param xmlTag a xmlTag object.
1423     */
1424    protected void updateXmlContentLongWithAttributes( XmlContentLongWithAttributes xmlContentLongWithAttributes, String xmlTag, Counter counter, Element element )
1425    {
1426        if ( xmlContentLongWithAttributes != null )
1427        {
1428            Element root = updateElement( counter, element, xmlTag );
1429            Counter innerCount = new Counter( counter.getDepth() + 1 );
1430            if ( xmlContentLongWithAttributes.getAttr() != null )
1431            {
1432                root.setAttribute( "attr", xmlContentLongWithAttributes.getAttr() );
1433            }
1434            if ( xmlContentLongWithAttributes.getAttr2() != 0 )
1435            {
1436                root.setAttribute( "attr2", String.valueOf( xmlContentLongWithAttributes.getAttr2() ) );
1437            }
1438            root.setText( String.valueOf( xmlContentLongWithAttributes.getContent() ) );
1439        }
1440    } //-- void updateXmlContentLongWithAttributes( XmlContentLongWithAttributes, String, Counter, Element )
1441
1442    /**
1443     * Method updateXmlFeatures.
1444     * 
1445     * @param xmlFeatures a xmlFeatures object.
1446     * @param element a element object.
1447     * @param counter a counter object.
1448     * @param xmlTag a xmlTag object.
1449     */
1450    protected void updateXmlFeatures( XmlFeatures xmlFeatures, String xmlTag, Counter counter, Element element )
1451    {
1452        if ( xmlFeatures != null )
1453        {
1454            Element root = updateElement( counter, element, xmlTag );
1455            Counter innerCount = new Counter( counter.getDepth() + 1 );
1456            if ( xmlFeatures.getAttributes() != null )
1457            {
1458                updateXmlAttributes( xmlFeatures.getAttributes(), "attributes", innerCount, root );
1459            }
1460            if ( xmlFeatures.getAttributesDefault() != null )
1461            {
1462                updateXmlAttributes( xmlFeatures.getAttributesDefault(), "attributesDefault", innerCount, root );
1463            }
1464            if ( xmlFeatures.getContent() != null )
1465            {
1466                updateXmlContent( xmlFeatures.getContent(), "content", innerCount, root );
1467            }
1468            if ( xmlFeatures.getFieldTrim() != null )
1469            {
1470                updateElement( innerCount, root,  "fieldTrim" ).setText( xmlFeatures.getFieldTrim() );
1471            }
1472            if ( xmlFeatures.getFieldNoTrim() != null )
1473            {
1474                updateElement( innerCount, root,  "fieldNoTrim" ).setText( xmlFeatures.getFieldNoTrim() );
1475            }
1476            findAndReplaceXpp3DOM( innerCount, root, "dom", (Xpp3Dom) xmlFeatures.getDom() );
1477            findAndReplaceXpp3DOM( innerCount, root, "domNoTrim", (Xpp3Dom) xmlFeatures.getDomNoTrim() );
1478            if ( xmlFeatures.getFieldName() != null )
1479            {
1480                updateElement( innerCount, root,  "tag-name" ).setText( xmlFeatures.getFieldName() );
1481            }
1482            if ( xmlFeatures.getFieldNameAttribute() != null )
1483            {
1484                root.setAttribute( "tag-name.attribute", xmlFeatures.getFieldNameAttribute() );
1485            }
1486            if ( xmlFeatures.getDateXmlFormat() != null )
1487            {
1488                updateElement( innerCount, root,  "dateXmlFormat" ).setText( new java.text.SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss", java.util.Locale.US ).format( xmlFeatures.getDateXmlFormat() ) );
1489            }
1490            if ( xmlFeatures.getDateLong() != null )
1491            {
1492                updateElement( innerCount, root,  "dateLong" ).setText( String.valueOf( xmlFeatures.getDateLong().getTime() ) );
1493            }
1494            iterate2Reference( innerCount, root, xmlFeatures.getXmlItemsStyleFlats(), "xmlItemsStyleFlat" );
1495            iterateReference( innerCount, root, xmlFeatures.getXmlAssociationTagNames(),"xmlAssociationTagNames","association.tag-name" );
1496            iterateReference( innerCount, root, xmlFeatures.getXmlTagNameAssociation(),"field.tag-names","field.tag-name" );
1497            iterateReference( innerCount, root, xmlFeatures.getXmlTagNameAssociationTagNames(),"field.tag-name","association.tag-name" );
1498            iterate2Reference( innerCount, root, xmlFeatures.getXmlFlatAssociationTagNames(), "association.tag-name" );
1499            if ( ( xmlFeatures.getExplodeProperties() != null ) && ( xmlFeatures.getExplodeProperties().size() > 0 ) )
1500            {
1501                Element listElement = updateElement( innerCount, root, "explodeProperties" );
1502                Iterator it = xmlFeatures.getExplodeProperties().keySet().iterator();
1503                Counter propertiesCounter = new Counter( innerCount.getDepth() + 1 );
1504                while ( it.hasNext() )
1505                {
1506                    String key = (String) it.next();
1507                    Element propTag = updateElement( propertiesCounter, listElement, "explodeProperty" );
1508                    Counter propertyCounter = new Counter( propertiesCounter.getDepth() + 1 );
1509                    findAndReplaceSimpleElement( propertyCounter, propTag, "key", key, null );
1510                    findAndReplaceSimpleElement( propertyCounter, propTag, "value", (String) xmlFeatures.getExplodeProperties().get( key ), null );
1511                }
1512            }
1513            if ( ( xmlFeatures.getInlineProperties() != null ) && ( xmlFeatures.getInlineProperties().size() > 0 ) )
1514            {
1515                Element listElement = updateElement( innerCount, root, "inlineProperties" );
1516                Iterator it = xmlFeatures.getInlineProperties().keySet().iterator();
1517                Counter propertiesCounter = new Counter( innerCount.getDepth() + 1 );
1518                while ( it.hasNext() )
1519                {
1520                    String key = (String) it.next();
1521                    findAndReplaceSimpleElement( propertiesCounter, listElement, key, (String) xmlFeatures.getInlineProperties().get( key ), null );
1522                }
1523            }
1524            if ( xmlFeatures.getXmlTransientFields() != null )
1525            {
1526                updateXmlTransientFields( xmlFeatures.getXmlTransientFields(), "xmlTransientFields", innerCount, root );
1527            }
1528            if ( xmlFeatures.getXmlFieldsOrder() != null )
1529            {
1530                updateXmlFieldsOrder( xmlFeatures.getXmlFieldsOrder(), "xmlFieldsOrder", innerCount, root );
1531            }
1532            if ( xmlFeatures.getXsdFeatures() != null )
1533            {
1534                updateXsdFeatures( xmlFeatures.getXsdFeatures(), "xsdFeatures", innerCount, root );
1535            }
1536        }
1537    } //-- void updateXmlFeatures( XmlFeatures, String, Counter, Element )
1538
1539    /**
1540     * Method updateXmlFieldsOrder.
1541     * 
1542     * @param xmlFieldsOrder a xmlFieldsOrder object.
1543     * @param element a element object.
1544     * @param counter a counter object.
1545     * @param xmlTag a xmlTag object.
1546     */
1547    protected void updateXmlFieldsOrder( XmlFieldsOrder xmlFieldsOrder, String xmlTag, Counter counter, Element element )
1548    {
1549        if ( xmlFieldsOrder != null )
1550        {
1551            Element root = updateElement( counter, element, xmlTag );
1552            Counter innerCount = new Counter( counter.getDepth() + 1 );
1553            if ( xmlFieldsOrder.getField1() != null )
1554            {
1555                updateElement( innerCount, root,  "field1" ).setText( xmlFieldsOrder.getField1() );
1556            }
1557            if ( xmlFieldsOrder.getField() != null )
1558            {
1559                updateElement( innerCount, root,  "field-2" ).setText( xmlFieldsOrder.getField() );
1560            }
1561            if ( xmlFieldsOrder.getField3() != null )
1562            {
1563                updateElement( innerCount, root,  "field3" ).setText( xmlFieldsOrder.getField3() );
1564            }
1565            if ( xmlFieldsOrder.getField4() != null )
1566            {
1567                updateElement( innerCount, root,  "field4" ).setText( xmlFieldsOrder.getField4() );
1568            }
1569            if ( xmlFieldsOrder.getField5() != null )
1570            {
1571                updateElement( innerCount, root,  "field5" ).setText( xmlFieldsOrder.getField5() );
1572            }
1573            if ( xmlFieldsOrder.getField6() != null )
1574            {
1575                updateElement( innerCount, root,  "field6" ).setText( xmlFieldsOrder.getField6() );
1576            }
1577            if ( xmlFieldsOrder.getField7() != null )
1578            {
1579                updateElement( innerCount, root,  "field7" ).setText( xmlFieldsOrder.getField7() );
1580            }
1581        }
1582    } //-- void updateXmlFieldsOrder( XmlFieldsOrder, String, Counter, Element )
1583
1584    /**
1585     * Method updateXmlFieldsOrderParent.
1586     * 
1587     * @param xmlFieldsOrderParent a xmlFieldsOrderParent object.
1588     * @param element a element object.
1589     * @param counter a counter object.
1590     * @param xmlTag a xmlTag object.
1591     */
1592    protected void updateXmlFieldsOrderParent( XmlFieldsOrderParent xmlFieldsOrderParent, String xmlTag, Counter counter, Element element )
1593    {
1594        if ( xmlFieldsOrderParent != null )
1595        {
1596            Element root = updateElement( counter, element, xmlTag );
1597            Counter innerCount = new Counter( counter.getDepth() + 1 );
1598            if ( xmlFieldsOrderParent.getField() != null )
1599            {
1600                updateElement( innerCount, root,  "field-2" ).setText( xmlFieldsOrderParent.getField() );
1601            }
1602            if ( xmlFieldsOrderParent.getField4() != null )
1603            {
1604                updateElement( innerCount, root,  "field4" ).setText( xmlFieldsOrderParent.getField4() );
1605            }
1606            if ( xmlFieldsOrderParent.getField5() != null )
1607            {
1608                updateElement( innerCount, root,  "field5" ).setText( xmlFieldsOrderParent.getField5() );
1609            }
1610            if ( xmlFieldsOrderParent.getField7() != null )
1611            {
1612                updateElement( innerCount, root,  "field7" ).setText( xmlFieldsOrderParent.getField7() );
1613            }
1614        }
1615    } //-- void updateXmlFieldsOrderParent( XmlFieldsOrderParent, String, Counter, Element )
1616
1617    /**
1618     * Method updateXmlFieldsOrderParent2.
1619     * 
1620     * @param xmlFieldsOrderParent2 a xmlFieldsOrderParent2 object.
1621     * @param element a element object.
1622     * @param counter a counter object.
1623     * @param xmlTag a xmlTag object.
1624     */
1625    protected void updateXmlFieldsOrderParent2( XmlFieldsOrderParent2 xmlFieldsOrderParent2, String xmlTag, Counter counter, Element element )
1626    {
1627        if ( xmlFieldsOrderParent2 != null )
1628        {
1629            Element root = updateElement( counter, element, xmlTag );
1630            Counter innerCount = new Counter( counter.getDepth() + 1 );
1631            if ( xmlFieldsOrderParent2.getField() != null )
1632            {
1633                updateElement( innerCount, root,  "field-2" ).setText( xmlFieldsOrderParent2.getField() );
1634            }
1635        }
1636    } //-- void updateXmlFieldsOrderParent2( XmlFieldsOrderParent2, String, Counter, Element )
1637
1638    /**
1639     * Method updateXmlTransientFields.
1640     * 
1641     * @param xmlTransientFields a xmlTransientFields object.
1642     * @param element a element object.
1643     * @param counter a counter object.
1644     * @param xmlTag a xmlTag object.
1645     */
1646    protected void updateXmlTransientFields( XmlTransientFields xmlTransientFields, String xmlTag, Counter counter, Element element )
1647    {
1648        if ( xmlTransientFields != null )
1649        {
1650            Element root = updateElement( counter, element, xmlTag );
1651            Counter innerCount = new Counter( counter.getDepth() + 1 );
1652            if ( xmlTransientFields.getPersistentField() != null )
1653            {
1654                updateElement( innerCount, root,  "persistentField" ).setText( xmlTransientFields.getPersistentField() );
1655            }
1656        }
1657    } //-- void updateXmlTransientFields( XmlTransientFields, String, Counter, Element )
1658
1659    /**
1660     * Method updateXsdFeatures.
1661     * 
1662     * @param xsdFeatures a xsdFeatures object.
1663     * @param element a element object.
1664     * @param counter a counter object.
1665     * @param xmlTag a xmlTag object.
1666     */
1667    protected void updateXsdFeatures( XsdFeatures xsdFeatures, String xmlTag, Counter counter, Element element )
1668    {
1669        if ( xsdFeatures != null )
1670        {
1671            Element root = updateElement( counter, element, xmlTag );
1672            Counter innerCount = new Counter( counter.getDepth() + 1 );
1673            if ( xsdFeatures.getAttribute() != null )
1674            {
1675                root.setAttribute( "attribute", xsdFeatures.getAttribute() );
1676            }
1677        }
1678    } //-- void updateXsdFeatures( XsdFeatures, String, Counter, Element )
1679
1680    /**
1681     * Method write.
1682     * 
1683     * @param features a features object.
1684     * @param writer a writer object.
1685     * @throws java.io.IOException java.io.IOException if any.
1686     */
1687    public void write( Features features, OutputStreamWriter writer )
1688        throws java.io.IOException
1689    {
1690        Format format = Format.getRawFormat()
1691            .setEncoding( writer.getEncoding() )
1692            .setLineSeparator( System.getProperty( "line.separator" ) );
1693        write( features, writer, format );
1694    } //-- void write( Features, OutputStreamWriter )
1695
1696    /**
1697     * Method write.
1698     * 
1699     * @param features a features object.
1700     * @param jdomFormat a jdomFormat object.
1701     * @param writer a writer object.
1702     * @throws java.io.IOException java.io.IOException if any.
1703     */
1704    public void write( Features features, Writer writer, Format jdomFormat )
1705        throws java.io.IOException
1706    {
1707        Document document = factory.document( null );
1708        updateFeatures( features, "features-demo", new Counter( 0 ), document );
1709        XMLOutputter outputter = new XMLOutputter();
1710        outputter.setFormat( jdomFormat );
1711        outputter.output( document, writer );
1712    } //-- void write( Features, Writer, Format )
1713
1714
1715      //-----------------/
1716     //- Inner Classes -/
1717    //-----------------/
1718
1719    /**
1720     * Class Counter.
1721     * 
1722     * @version $Revision$ $Date$
1723     */
1724    public static class Counter
1725    {
1726
1727          //--------------------------/
1728         //- Class/Member Variables -/
1729        //--------------------------/
1730
1731        /**
1732         * Field currentIndex.
1733         */
1734        private int currentIndex = 0;
1735
1736        /**
1737         * Field level.
1738         */
1739        private int level;
1740
1741
1742          //----------------/
1743         //- Constructors -/
1744        //----------------/
1745
1746        public Counter(int depthLevel)
1747        {
1748            level = depthLevel;
1749        } //-- org.codehaus.modello.test.features.io.jdom.Counter(int)
1750
1751
1752          //-----------/
1753         //- Methods -/
1754        //-----------/
1755
1756        /**
1757         * Method getCurrentIndex.
1758         * 
1759         * @return int
1760         */
1761        public int getCurrentIndex()
1762        {
1763            return currentIndex;
1764        } //-- int getCurrentIndex()
1765
1766        /**
1767         * Method getDepth.
1768         * 
1769         * @return int
1770         */
1771        public int getDepth()
1772        {
1773            return level;
1774        } //-- int getDepth()
1775
1776        /**
1777         * Method increaseCount.
1778         */
1779        public void increaseCount()
1780        {
1781            currentIndex = currentIndex + 1;
1782        } //-- void increaseCount()
1783
1784    }
1785
1786}