001// =================== DO NOT EDIT THIS FILE ====================
002// Generated by Modello 1.7,
003// any modifications will be overwritten.
004// ==============================================================
005
006package org.apache.archiva.redback.role.model.io.stax;
007
008  //---------------------------------/
009 //- Imported classes and packages -/
010//---------------------------------/
011
012import java.io.ByteArrayInputStream;
013import java.io.FileInputStream;
014import java.io.IOException;
015import java.io.InputStream;
016import java.io.InputStreamReader;
017import java.io.Reader;
018import java.io.StringReader;
019import java.io.StringWriter;
020import java.text.DateFormat;
021import java.text.ParsePosition;
022import java.util.Locale;
023import java.util.regex.Matcher;
024import java.util.regex.Pattern;
025import javax.xml.stream.*;
026import org.apache.archiva.redback.role.model.ModelApplication;
027import org.apache.archiva.redback.role.model.ModelOperation;
028import org.apache.archiva.redback.role.model.ModelPermission;
029import org.apache.archiva.redback.role.model.ModelResource;
030import org.apache.archiva.redback.role.model.ModelRole;
031import org.apache.archiva.redback.role.model.ModelTemplate;
032import org.apache.archiva.redback.role.model.RedbackRoleModel;
033
034/**
035 * Class RedbackRoleModelStaxReader.
036 * 
037 * @version $Revision$ $Date$
038 */
039@SuppressWarnings( "all" )
040public class RedbackRoleModelStaxReader
041{
042
043      //-----------/
044     //- Methods -/
045    //-----------/
046
047    /**
048     * Method read.
049     * 
050     * @param reader
051     * @param strict
052     * @throws IOException
053     * @throws XMLStreamException
054     * @return RedbackRoleModel
055     */
056    public RedbackRoleModel read( Reader reader, boolean strict )
057        throws IOException, XMLStreamException
058    {
059        XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader( reader );
060
061        return read( xmlStreamReader, strict );
062    } //-- RedbackRoleModel read( Reader, boolean )
063
064    /**
065     * Method read.
066     * 
067     * @param reader
068     * @throws IOException
069     * @throws XMLStreamException
070     * @return RedbackRoleModel
071     */
072    public RedbackRoleModel read( Reader reader )
073        throws IOException, XMLStreamException
074    {
075        return read( reader, true );
076    } //-- RedbackRoleModel read( Reader )
077
078    /**
079     * Method read.
080     * 
081     * @param stream
082     * @param strict
083     * @throws IOException
084     * @throws XMLStreamException
085     * @return RedbackRoleModel
086     */
087    public RedbackRoleModel read( InputStream stream, boolean strict )
088        throws IOException, XMLStreamException
089    {
090        XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader( stream );
091
092        return read( xmlStreamReader, strict );
093    } //-- RedbackRoleModel read( InputStream, boolean )
094
095    /**
096     * Method read.
097     * 
098     * @param stream
099     * @throws IOException
100     * @throws XMLStreamException
101     * @return RedbackRoleModel
102     */
103    public RedbackRoleModel read( InputStream stream )
104        throws IOException, XMLStreamException
105    {
106        return read( stream, true );
107    } //-- RedbackRoleModel read( InputStream )
108
109    /**
110     * Method read.
111     * 
112     * @param filePath
113     * @param strict
114     * @throws IOException
115     * @throws XMLStreamException
116     * @return RedbackRoleModel
117     */
118    public RedbackRoleModel read( String filePath, boolean strict )
119        throws IOException, XMLStreamException
120    {
121        java.io.File file = new java.io.File( filePath );
122        XMLStreamReader xmlStreamReader = XMLInputFactory.newInstance().createXMLStreamReader( file.toURI().toURL().toExternalForm(), new FileInputStream( file ) );
123
124        return read( xmlStreamReader, strict );
125    } //-- RedbackRoleModel read( String, boolean )
126
127    /**
128     * Method read.
129     * 
130     * @param filePath
131     * @throws IOException
132     * @throws XMLStreamException
133     * @return RedbackRoleModel
134     */
135    public RedbackRoleModel read( String filePath )
136        throws IOException, XMLStreamException
137    {
138        return read( filePath, true );
139    } //-- RedbackRoleModel read( String )
140
141    /**
142     * Method checkFieldWithDuplicate.
143     * 
144     * @param xmlStreamReader
145     * @param parsed
146     * @param alias
147     * @param tagName
148     * @throws XMLStreamException
149     * @return boolean
150     */
151    private boolean checkFieldWithDuplicate( XMLStreamReader xmlStreamReader, String tagName, String alias, java.util.Set parsed )
152        throws XMLStreamException
153    {
154        if ( !( xmlStreamReader.getLocalName().equals( tagName ) || xmlStreamReader.getLocalName().equals( alias ) ) )
155        {
156            return false;
157        }
158        if ( !parsed.add( tagName ) )
159        {
160            throw new XMLStreamException( "Duplicated tag: '" + tagName + "'", xmlStreamReader.getLocation() );
161        }
162        return true;
163    } //-- boolean checkFieldWithDuplicate( XMLStreamReader, String, String, java.util.Set )
164
165    /**
166     * Method checkUnknownElement.
167     * 
168     * @param xmlStreamReader
169     * @param strict
170     * @throws XMLStreamException
171     */
172    private void checkUnknownElement( XMLStreamReader xmlStreamReader, boolean strict )
173        throws XMLStreamException
174    {
175        if ( strict )
176        {
177            throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
178        }
179        int unrecognizedTagCount = 1;
180        while( unrecognizedTagCount != 0 )
181        {
182            xmlStreamReader.next();
183            if ( xmlStreamReader.getEventType() == XMLStreamConstants.START_ELEMENT )
184            {
185                unrecognizedTagCount++;
186            }
187            else if ( xmlStreamReader.getEventType() == XMLStreamConstants.END_ELEMENT )
188            {
189                unrecognizedTagCount--;
190            }
191        }
192    } //-- void checkUnknownElement( XMLStreamReader, boolean )
193
194    /**
195     * Method getBooleanValue.
196     * 
197     * @param s
198     * @param xmlStreamReader
199     * @param attribute
200     * @throws XMLStreamException
201     * @return boolean
202     */
203    private boolean getBooleanValue( String s, String attribute, XMLStreamReader xmlStreamReader )
204        throws XMLStreamException
205    {
206        if ( s != null )
207        {
208            return Boolean.valueOf( s ).booleanValue();
209        }
210        return false;
211    } //-- boolean getBooleanValue( String, String, XMLStreamReader )
212
213    /**
214     * Method getByteValue.
215     * 
216     * @param s
217     * @param strict
218     * @param xmlStreamReader
219     * @param attribute
220     * @throws XMLStreamException
221     * @return byte
222     */
223    private byte getByteValue( String s, String attribute, XMLStreamReader xmlStreamReader, boolean strict )
224        throws XMLStreamException
225    {
226        if ( s != null )
227        {
228            try
229            {
230                return Byte.valueOf( s ).byteValue();
231            }
232            catch ( NumberFormatException nfe )
233            {
234                if ( strict )
235                {
236                    throw new XMLStreamException( "Unable to parse element '" + attribute + "', must be a byte but was '" + s + "'", xmlStreamReader.getLocation(), nfe );
237                }
238            }
239        }
240        return 0;
241    } //-- byte getByteValue( String, String, XMLStreamReader, boolean )
242
243    /**
244     * Method getCharacterValue.
245     * 
246     * @param s
247     * @param xmlStreamReader
248     * @param attribute
249     * @throws XMLStreamException
250     * @return char
251     */
252    private char getCharacterValue( String s, String attribute, XMLStreamReader xmlStreamReader )
253        throws XMLStreamException
254    {
255        if ( s != null )
256        {
257            return s.charAt( 0 );
258        }
259        return 0;
260    } //-- char getCharacterValue( String, String, XMLStreamReader )
261
262    /**
263     * Method getDateValue.
264     * 
265     * @param s
266     * @param xmlStreamReader
267     * @param dateFormat
268     * @param attribute
269     * @throws XMLStreamException
270     * @return Date
271     */
272    private java.util.Date getDateValue( String s, String attribute, String dateFormat, XMLStreamReader xmlStreamReader )
273        throws XMLStreamException
274    {
275        if ( s != null )
276        {
277            String effectiveDateFormat = dateFormat;
278            if ( dateFormat == null )
279            {
280                effectiveDateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS";
281            }
282            if ( "long".equals( effectiveDateFormat ) )
283            {
284                try
285                {
286                    return new java.util.Date( Long.parseLong( s ) );
287                }
288                catch ( NumberFormatException e )
289                {
290                    throw new XMLStreamException( e.getMessage(), xmlStreamReader.getLocation(), e );
291                }
292            }
293            else
294            {
295                try
296                {
297                    DateFormat dateParser = new java.text.SimpleDateFormat( effectiveDateFormat, java.util.Locale.US );
298                    return dateParser.parse( s );
299                }
300                catch ( java.text.ParseException e )
301                {
302                    throw new XMLStreamException( e.getMessage(), xmlStreamReader.getLocation(), e );
303                }
304            }
305        }
306        return null;
307    } //-- java.util.Date getDateValue( String, String, String, XMLStreamReader )
308
309    /**
310     * Method getDefaultValue.
311     * 
312     * @param s
313     * @param v
314     * @return String
315     */
316    private String getDefaultValue( String s, String v )
317    {
318        if ( s == null )
319        {
320            s = v;
321        }
322        return s;
323    } //-- String getDefaultValue( String, String )
324
325    /**
326     * Method getDoubleValue.
327     * 
328     * @param s
329     * @param strict
330     * @param xmlStreamReader
331     * @param attribute
332     * @throws XMLStreamException
333     * @return double
334     */
335    private double getDoubleValue( String s, String attribute, XMLStreamReader xmlStreamReader, boolean strict )
336        throws XMLStreamException
337    {
338        if ( s != null )
339        {
340            try
341            {
342                return Double.valueOf( s ).doubleValue();
343            }
344            catch ( NumberFormatException nfe )
345            {
346                if ( strict )
347                {
348                    throw new XMLStreamException( "Unable to parse element '" + attribute + "', must be a floating point number but was '" + s + "'", xmlStreamReader.getLocation(), nfe );
349                }
350            }
351        }
352        return 0;
353    } //-- double getDoubleValue( String, String, XMLStreamReader, boolean )
354
355    /**
356     * Method getFloatValue.
357     * 
358     * @param s
359     * @param strict
360     * @param xmlStreamReader
361     * @param attribute
362     * @throws XMLStreamException
363     * @return float
364     */
365    private float getFloatValue( String s, String attribute, XMLStreamReader xmlStreamReader, boolean strict )
366        throws XMLStreamException
367    {
368        if ( s != null )
369        {
370            try
371            {
372                return Float.valueOf( s ).floatValue();
373            }
374            catch ( NumberFormatException nfe )
375            {
376                if ( strict )
377                {
378                    throw new XMLStreamException( "Unable to parse element '" + attribute + "', must be a floating point number but was '" + s + "'", xmlStreamReader.getLocation(), nfe );
379                }
380            }
381        }
382        return 0;
383    } //-- float getFloatValue( String, String, XMLStreamReader, boolean )
384
385    /**
386     * Method getIntegerValue.
387     * 
388     * @param s
389     * @param strict
390     * @param xmlStreamReader
391     * @param attribute
392     * @throws XMLStreamException
393     * @return int
394     */
395    private int getIntegerValue( String s, String attribute, XMLStreamReader xmlStreamReader, boolean strict )
396        throws XMLStreamException
397    {
398        if ( s != null )
399        {
400            try
401            {
402                return Integer.valueOf( s ).intValue();
403            }
404            catch ( NumberFormatException nfe )
405            {
406                if ( strict )
407                {
408                    throw new XMLStreamException( "Unable to parse element '" + attribute + "', must be an integer but was '" + s + "'", xmlStreamReader.getLocation(), nfe );
409                }
410            }
411        }
412        return 0;
413    } //-- int getIntegerValue( String, String, XMLStreamReader, boolean )
414
415    /**
416     * Method getLongValue.
417     * 
418     * @param s
419     * @param strict
420     * @param xmlStreamReader
421     * @param attribute
422     * @throws XMLStreamException
423     * @return long
424     */
425    private long getLongValue( String s, String attribute, XMLStreamReader xmlStreamReader, boolean strict )
426        throws XMLStreamException
427    {
428        if ( s != null )
429        {
430            try
431            {
432                return Long.valueOf( s ).longValue();
433            }
434            catch ( NumberFormatException nfe )
435            {
436                if ( strict )
437                {
438                    throw new XMLStreamException( "Unable to parse element '" + attribute + "', must be a long integer but was '" + s + "'", xmlStreamReader.getLocation(), nfe );
439                }
440            }
441        }
442        return 0;
443    } //-- long getLongValue( String, String, XMLStreamReader, boolean )
444
445    /**
446     * Method getRequiredAttributeValue.
447     * 
448     * @param s
449     * @param strict
450     * @param xmlStreamReader
451     * @param attribute
452     * @throws XMLStreamException
453     * @return String
454     */
455    private String getRequiredAttributeValue( String s, String attribute, XMLStreamReader xmlStreamReader, boolean strict )
456        throws XMLStreamException
457    {
458        if ( s == null )
459        {
460            if ( strict )
461            {
462                throw new XMLStreamException( "Missing required value for attribute '" + attribute + "'", xmlStreamReader.getLocation() );
463            }
464        }
465        return s;
466    } //-- String getRequiredAttributeValue( String, String, XMLStreamReader, boolean )
467
468    /**
469     * Method getShortValue.
470     * 
471     * @param s
472     * @param strict
473     * @param xmlStreamReader
474     * @param attribute
475     * @throws XMLStreamException
476     * @return short
477     */
478    private short getShortValue( String s, String attribute, XMLStreamReader xmlStreamReader, boolean strict )
479        throws XMLStreamException
480    {
481        if ( s != null )
482        {
483            try
484            {
485                return Short.valueOf( s ).shortValue();
486            }
487            catch ( NumberFormatException nfe )
488            {
489                if ( strict )
490                {
491                    throw new XMLStreamException( "Unable to parse element '" + attribute + "', must be a short integer but was '" + s + "'", xmlStreamReader.getLocation(), nfe );
492                }
493            }
494        }
495        return 0;
496    } //-- short getShortValue( String, String, XMLStreamReader, boolean )
497
498    /**
499     * Method getTrimmedValue.
500     * 
501     * @param s
502     * @return String
503     */
504    private String getTrimmedValue( String s )
505    {
506        if ( s != null )
507        {
508            s = s.trim();
509        }
510        return s;
511    } //-- String getTrimmedValue( String )
512
513    /**
514     * Method nextTag.
515     * 
516     * @param xmlStreamReader
517     * @throws XMLStreamException
518     * @return int
519     */
520    private int nextTag( XMLStreamReader xmlStreamReader )
521        throws XMLStreamException
522    {
523        while ( true )
524        {
525            int eventType = xmlStreamReader.next();
526            switch ( eventType )
527            {
528                case XMLStreamConstants.CHARACTERS:
529                case XMLStreamConstants.CDATA:
530                case XMLStreamConstants.SPACE:
531                case XMLStreamConstants.PROCESSING_INSTRUCTION:
532                case XMLStreamConstants.COMMENT:
533                    break;
534                case XMLStreamConstants.START_ELEMENT:
535                case XMLStreamConstants.END_ELEMENT:
536                    return eventType;
537                default:
538                    throw new XMLStreamException( "expected start or end tag", xmlStreamReader.getLocation() );
539            }
540        }
541    } //-- int nextTag( XMLStreamReader )
542
543    /**
544     * Method parseModelApplication.
545     * 
546     * @param xmlStreamReader
547     * @param strict
548     * @throws IOException
549     * @throws XMLStreamException
550     * @return ModelApplication
551     */
552    private ModelApplication parseModelApplication( XMLStreamReader xmlStreamReader, boolean strict )
553        throws IOException, XMLStreamException
554    {
555        ModelApplication modelApplication = new ModelApplication();
556        java.util.Set parsed = new java.util.HashSet();
557        while ( ( strict ? xmlStreamReader.nextTag() : nextTag( xmlStreamReader ) ) == XMLStreamConstants.START_ELEMENT )
558        {
559            if ( checkFieldWithDuplicate( xmlStreamReader, "version", null, parsed ) )
560            {
561                modelApplication.setVersion( getTrimmedValue( xmlStreamReader.getElementText() ) );
562            }
563            else if ( checkFieldWithDuplicate( xmlStreamReader, "id", null, parsed ) )
564            {
565                modelApplication.setId( getTrimmedValue( xmlStreamReader.getElementText() ) );
566            }
567            else if ( checkFieldWithDuplicate( xmlStreamReader, "description", null, parsed ) )
568            {
569                modelApplication.setDescription( getTrimmedValue( xmlStreamReader.getElementText() ) );
570            }
571            else if ( checkFieldWithDuplicate( xmlStreamReader, "longDescription", null, parsed ) )
572            {
573                modelApplication.setLongDescription( getTrimmedValue( xmlStreamReader.getElementText() ) );
574            }
575            else if ( checkFieldWithDuplicate( xmlStreamReader, "resources", null, parsed ) )
576            {
577                java.util.List resources = new java.util.ArrayList/*<ModelResource>*/();
578                modelApplication.setResources( resources );
579                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
580                {
581                    if ( "resource".equals( xmlStreamReader.getLocalName() ) )
582                    {
583                        modelApplication.addResource( parseModelResource( xmlStreamReader, strict ) );
584                    }
585                    else
586                    {
587                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
588                    }
589                }
590            }
591            else if ( checkFieldWithDuplicate( xmlStreamReader, "operations", null, parsed ) )
592            {
593                java.util.List operations = new java.util.ArrayList/*<ModelOperation>*/();
594                modelApplication.setOperations( operations );
595                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
596                {
597                    if ( "operation".equals( xmlStreamReader.getLocalName() ) )
598                    {
599                        modelApplication.addOperation( parseModelOperation( xmlStreamReader, strict ) );
600                    }
601                    else
602                    {
603                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
604                    }
605                }
606            }
607            else if ( checkFieldWithDuplicate( xmlStreamReader, "roles", null, parsed ) )
608            {
609                java.util.List roles = new java.util.ArrayList/*<ModelRole>*/();
610                modelApplication.setRoles( roles );
611                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
612                {
613                    if ( "role".equals( xmlStreamReader.getLocalName() ) )
614                    {
615                        modelApplication.addRole( parseModelRole( xmlStreamReader, strict ) );
616                    }
617                    else
618                    {
619                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
620                    }
621                }
622            }
623            else if ( checkFieldWithDuplicate( xmlStreamReader, "templates", null, parsed ) )
624            {
625                java.util.List templates = new java.util.ArrayList/*<ModelTemplate>*/();
626                modelApplication.setTemplates( templates );
627                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
628                {
629                    if ( "template".equals( xmlStreamReader.getLocalName() ) )
630                    {
631                        modelApplication.addTemplate( parseModelTemplate( xmlStreamReader, strict ) );
632                    }
633                    else
634                    {
635                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
636                    }
637                }
638            }
639            else
640            {
641                checkUnknownElement( xmlStreamReader, strict );
642            }
643        }
644        return modelApplication;
645    } //-- ModelApplication parseModelApplication( XMLStreamReader, boolean )
646
647    /**
648     * Method parseModelOperation.
649     * 
650     * @param xmlStreamReader
651     * @param strict
652     * @throws IOException
653     * @throws XMLStreamException
654     * @return ModelOperation
655     */
656    private ModelOperation parseModelOperation( XMLStreamReader xmlStreamReader, boolean strict )
657        throws IOException, XMLStreamException
658    {
659        ModelOperation modelOperation = new ModelOperation();
660        java.util.Set parsed = new java.util.HashSet();
661        while ( ( strict ? xmlStreamReader.nextTag() : nextTag( xmlStreamReader ) ) == XMLStreamConstants.START_ELEMENT )
662        {
663            if ( checkFieldWithDuplicate( xmlStreamReader, "id", null, parsed ) )
664            {
665                modelOperation.setId( getTrimmedValue( xmlStreamReader.getElementText() ) );
666            }
667            else if ( checkFieldWithDuplicate( xmlStreamReader, "name", null, parsed ) )
668            {
669                modelOperation.setName( getTrimmedValue( xmlStreamReader.getElementText() ) );
670            }
671            else if ( checkFieldWithDuplicate( xmlStreamReader, "description", null, parsed ) )
672            {
673                modelOperation.setDescription( getTrimmedValue( xmlStreamReader.getElementText() ) );
674            }
675            else if ( checkFieldWithDuplicate( xmlStreamReader, "permanent", null, parsed ) )
676            {
677                modelOperation.setPermanent( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "permanent", xmlStreamReader ) );
678            }
679            else
680            {
681                checkUnknownElement( xmlStreamReader, strict );
682            }
683        }
684        return modelOperation;
685    } //-- ModelOperation parseModelOperation( XMLStreamReader, boolean )
686
687    /**
688     * Method parseModelPermission.
689     * 
690     * @param xmlStreamReader
691     * @param strict
692     * @throws IOException
693     * @throws XMLStreamException
694     * @return ModelPermission
695     */
696    private ModelPermission parseModelPermission( XMLStreamReader xmlStreamReader, boolean strict )
697        throws IOException, XMLStreamException
698    {
699        ModelPermission modelPermission = new ModelPermission();
700        java.util.Set parsed = new java.util.HashSet();
701        while ( ( strict ? xmlStreamReader.nextTag() : nextTag( xmlStreamReader ) ) == XMLStreamConstants.START_ELEMENT )
702        {
703            if ( checkFieldWithDuplicate( xmlStreamReader, "id", null, parsed ) )
704            {
705                modelPermission.setId( getTrimmedValue( xmlStreamReader.getElementText() ) );
706            }
707            else if ( checkFieldWithDuplicate( xmlStreamReader, "name", null, parsed ) )
708            {
709                modelPermission.setName( getTrimmedValue( xmlStreamReader.getElementText() ) );
710            }
711            else if ( checkFieldWithDuplicate( xmlStreamReader, "description", null, parsed ) )
712            {
713                modelPermission.setDescription( getTrimmedValue( xmlStreamReader.getElementText() ) );
714            }
715            else if ( checkFieldWithDuplicate( xmlStreamReader, "permanent", null, parsed ) )
716            {
717                modelPermission.setPermanent( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "permanent", xmlStreamReader ) );
718            }
719            else if ( checkFieldWithDuplicate( xmlStreamReader, "operation", null, parsed ) )
720            {
721                modelPermission.setOperation( getTrimmedValue( xmlStreamReader.getElementText() ) );
722            }
723            else if ( checkFieldWithDuplicate( xmlStreamReader, "resource", null, parsed ) )
724            {
725                modelPermission.setResource( getTrimmedValue( xmlStreamReader.getElementText() ) );
726            }
727            else
728            {
729                checkUnknownElement( xmlStreamReader, strict );
730            }
731        }
732        return modelPermission;
733    } //-- ModelPermission parseModelPermission( XMLStreamReader, boolean )
734
735    /**
736     * Method parseModelResource.
737     * 
738     * @param xmlStreamReader
739     * @param strict
740     * @throws IOException
741     * @throws XMLStreamException
742     * @return ModelResource
743     */
744    private ModelResource parseModelResource( XMLStreamReader xmlStreamReader, boolean strict )
745        throws IOException, XMLStreamException
746    {
747        ModelResource modelResource = new ModelResource();
748        java.util.Set parsed = new java.util.HashSet();
749        while ( ( strict ? xmlStreamReader.nextTag() : nextTag( xmlStreamReader ) ) == XMLStreamConstants.START_ELEMENT )
750        {
751            if ( checkFieldWithDuplicate( xmlStreamReader, "id", null, parsed ) )
752            {
753                modelResource.setId( getTrimmedValue( xmlStreamReader.getElementText() ) );
754            }
755            else if ( checkFieldWithDuplicate( xmlStreamReader, "name", null, parsed ) )
756            {
757                modelResource.setName( getTrimmedValue( xmlStreamReader.getElementText() ) );
758            }
759            else if ( checkFieldWithDuplicate( xmlStreamReader, "permanent", null, parsed ) )
760            {
761                modelResource.setPermanent( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "permanent", xmlStreamReader ) );
762            }
763            else if ( checkFieldWithDuplicate( xmlStreamReader, "pattern", null, parsed ) )
764            {
765                modelResource.setPattern( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "pattern", xmlStreamReader ) );
766            }
767            else if ( checkFieldWithDuplicate( xmlStreamReader, "description", null, parsed ) )
768            {
769                modelResource.setDescription( getTrimmedValue( xmlStreamReader.getElementText() ) );
770            }
771            else
772            {
773                checkUnknownElement( xmlStreamReader, strict );
774            }
775        }
776        return modelResource;
777    } //-- ModelResource parseModelResource( XMLStreamReader, boolean )
778
779    /**
780     * Method parseModelRole.
781     * 
782     * @param xmlStreamReader
783     * @param strict
784     * @throws IOException
785     * @throws XMLStreamException
786     * @return ModelRole
787     */
788    private ModelRole parseModelRole( XMLStreamReader xmlStreamReader, boolean strict )
789        throws IOException, XMLStreamException
790    {
791        ModelRole modelRole = new ModelRole();
792        java.util.Set parsed = new java.util.HashSet();
793        while ( ( strict ? xmlStreamReader.nextTag() : nextTag( xmlStreamReader ) ) == XMLStreamConstants.START_ELEMENT )
794        {
795            if ( checkFieldWithDuplicate( xmlStreamReader, "id", null, parsed ) )
796            {
797                modelRole.setId( getTrimmedValue( xmlStreamReader.getElementText() ) );
798            }
799            else if ( checkFieldWithDuplicate( xmlStreamReader, "name", null, parsed ) )
800            {
801                modelRole.setName( getTrimmedValue( xmlStreamReader.getElementText() ) );
802            }
803            else if ( checkFieldWithDuplicate( xmlStreamReader, "description", null, parsed ) )
804            {
805                modelRole.setDescription( getTrimmedValue( xmlStreamReader.getElementText() ) );
806            }
807            else if ( checkFieldWithDuplicate( xmlStreamReader, "assignable", null, parsed ) )
808            {
809                modelRole.setAssignable( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "assignable", xmlStreamReader ) );
810            }
811            else if ( checkFieldWithDuplicate( xmlStreamReader, "permanent", null, parsed ) )
812            {
813                modelRole.setPermanent( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "permanent", xmlStreamReader ) );
814            }
815            else if ( checkFieldWithDuplicate( xmlStreamReader, "permissions", null, parsed ) )
816            {
817                java.util.List permissions = new java.util.ArrayList/*<ModelPermission>*/();
818                modelRole.setPermissions( permissions );
819                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
820                {
821                    if ( "permission".equals( xmlStreamReader.getLocalName() ) )
822                    {
823                        modelRole.addPermission( parseModelPermission( xmlStreamReader, strict ) );
824                    }
825                    else
826                    {
827                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
828                    }
829                }
830            }
831            else if ( checkFieldWithDuplicate( xmlStreamReader, "parentRoles", null, parsed ) )
832            {
833                java.util.List parentRoles = new java.util.ArrayList/*<String>*/();
834                modelRole.setParentRoles( parentRoles );
835                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
836                {
837                    if ( "parentRole".equals( xmlStreamReader.getLocalName() ) )
838                    {
839                        parentRoles.add( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "new java.util.ArrayList/*<String>*/()" ) ) );
840                    }
841                    else
842                    {
843                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
844                    }
845                }
846            }
847            else if ( checkFieldWithDuplicate( xmlStreamReader, "childRoles", null, parsed ) )
848            {
849                java.util.List childRoles = new java.util.ArrayList/*<String>*/();
850                modelRole.setChildRoles( childRoles );
851                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
852                {
853                    if ( "childRole".equals( xmlStreamReader.getLocalName() ) )
854                    {
855                        childRoles.add( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "new java.util.ArrayList/*<String>*/()" ) ) );
856                    }
857                    else
858                    {
859                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
860                    }
861                }
862            }
863            else
864            {
865                checkUnknownElement( xmlStreamReader, strict );
866            }
867        }
868        return modelRole;
869    } //-- ModelRole parseModelRole( XMLStreamReader, boolean )
870
871    /**
872     * Method parseModelTemplate.
873     * 
874     * @param xmlStreamReader
875     * @param strict
876     * @throws IOException
877     * @throws XMLStreamException
878     * @return ModelTemplate
879     */
880    private ModelTemplate parseModelTemplate( XMLStreamReader xmlStreamReader, boolean strict )
881        throws IOException, XMLStreamException
882    {
883        ModelTemplate modelTemplate = new ModelTemplate();
884        java.util.Set parsed = new java.util.HashSet();
885        while ( ( strict ? xmlStreamReader.nextTag() : nextTag( xmlStreamReader ) ) == XMLStreamConstants.START_ELEMENT )
886        {
887            if ( checkFieldWithDuplicate( xmlStreamReader, "id", null, parsed ) )
888            {
889                modelTemplate.setId( getTrimmedValue( xmlStreamReader.getElementText() ) );
890            }
891            else if ( checkFieldWithDuplicate( xmlStreamReader, "namePrefix", null, parsed ) )
892            {
893                modelTemplate.setNamePrefix( getTrimmedValue( xmlStreamReader.getElementText() ) );
894            }
895            else if ( checkFieldWithDuplicate( xmlStreamReader, "delimiter", null, parsed ) )
896            {
897                modelTemplate.setDelimiter( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), " - " ) ) );
898            }
899            else if ( checkFieldWithDuplicate( xmlStreamReader, "description", null, parsed ) )
900            {
901                modelTemplate.setDescription( getTrimmedValue( xmlStreamReader.getElementText() ) );
902            }
903            else if ( checkFieldWithDuplicate( xmlStreamReader, "assignable", null, parsed ) )
904            {
905                modelTemplate.setAssignable( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "assignable", xmlStreamReader ) );
906            }
907            else if ( checkFieldWithDuplicate( xmlStreamReader, "permanent", null, parsed ) )
908            {
909                modelTemplate.setPermanent( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "permanent", xmlStreamReader ) );
910            }
911            else if ( checkFieldWithDuplicate( xmlStreamReader, "permanentResource", null, parsed ) )
912            {
913                modelTemplate.setPermanentResource( getBooleanValue( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "false" ) ), "permanentResource", xmlStreamReader ) );
914            }
915            else if ( checkFieldWithDuplicate( xmlStreamReader, "permissions", null, parsed ) )
916            {
917                java.util.List permissions = new java.util.ArrayList/*<ModelPermission>*/();
918                modelTemplate.setPermissions( permissions );
919                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
920                {
921                    if ( "permission".equals( xmlStreamReader.getLocalName() ) )
922                    {
923                        modelTemplate.addPermission( parseModelPermission( xmlStreamReader, strict ) );
924                    }
925                    else
926                    {
927                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
928                    }
929                }
930            }
931            else if ( checkFieldWithDuplicate( xmlStreamReader, "parentRoles", null, parsed ) )
932            {
933                java.util.List parentRoles = new java.util.ArrayList/*<String>*/();
934                modelTemplate.setParentRoles( parentRoles );
935                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
936                {
937                    if ( "parentRole".equals( xmlStreamReader.getLocalName() ) )
938                    {
939                        parentRoles.add( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "new java.util.ArrayList/*<String>*/()" ) ) );
940                    }
941                    else
942                    {
943                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
944                    }
945                }
946            }
947            else if ( checkFieldWithDuplicate( xmlStreamReader, "childRoles", null, parsed ) )
948            {
949                java.util.List childRoles = new java.util.ArrayList/*<String>*/();
950                modelTemplate.setChildRoles( childRoles );
951                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
952                {
953                    if ( "childRole".equals( xmlStreamReader.getLocalName() ) )
954                    {
955                        childRoles.add( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "new java.util.ArrayList/*<String>*/()" ) ) );
956                    }
957                    else
958                    {
959                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
960                    }
961                }
962            }
963            else if ( checkFieldWithDuplicate( xmlStreamReader, "parentTemplates", null, parsed ) )
964            {
965                java.util.List parentTemplates = new java.util.ArrayList/*<String>*/();
966                modelTemplate.setParentTemplates( parentTemplates );
967                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
968                {
969                    if ( "parentTemplate".equals( xmlStreamReader.getLocalName() ) )
970                    {
971                        parentTemplates.add( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "new java.util.ArrayList/*<String>*/()" ) ) );
972                    }
973                    else
974                    {
975                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
976                    }
977                }
978            }
979            else if ( checkFieldWithDuplicate( xmlStreamReader, "childTemplates", null, parsed ) )
980            {
981                java.util.List childTemplates = new java.util.ArrayList/*<String>*/();
982                modelTemplate.setChildTemplates( childTemplates );
983                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
984                {
985                    if ( "childTemplate".equals( xmlStreamReader.getLocalName() ) )
986                    {
987                        childTemplates.add( getTrimmedValue( getDefaultValue( xmlStreamReader.getElementText(), "new java.util.ArrayList/*<String>*/()" ) ) );
988                    }
989                    else
990                    {
991                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
992                    }
993                }
994            }
995            else
996            {
997                checkUnknownElement( xmlStreamReader, strict );
998            }
999        }
1000        return modelTemplate;
1001    } //-- ModelTemplate parseModelTemplate( XMLStreamReader, boolean )
1002
1003    /**
1004     * Method parseRedbackRoleModel.
1005     * 
1006     * @param xmlStreamReader
1007     * @param strict
1008     * @throws IOException
1009     * @throws XMLStreamException
1010     * @return RedbackRoleModel
1011     */
1012    private RedbackRoleModel parseRedbackRoleModel( XMLStreamReader xmlStreamReader, boolean strict )
1013        throws IOException, XMLStreamException
1014    {
1015        RedbackRoleModel redbackRoleModel = new RedbackRoleModel();
1016        java.util.Set parsed = new java.util.HashSet();
1017        while ( ( strict ? xmlStreamReader.nextTag() : nextTag( xmlStreamReader ) ) == XMLStreamConstants.START_ELEMENT )
1018        {
1019            if ( checkFieldWithDuplicate( xmlStreamReader, "modelVersion", null, parsed ) )
1020            {
1021                redbackRoleModel.setModelVersion( getTrimmedValue( xmlStreamReader.getElementText() ) );
1022            }
1023            else if ( checkFieldWithDuplicate( xmlStreamReader, "applications", null, parsed ) )
1024            {
1025                java.util.List applications = new java.util.ArrayList/*<ModelApplication>*/();
1026                redbackRoleModel.setApplications( applications );
1027                while ( xmlStreamReader.nextTag() == XMLStreamConstants.START_ELEMENT )
1028                {
1029                    if ( "application".equals( xmlStreamReader.getLocalName() ) )
1030                    {
1031                        redbackRoleModel.addApplication( parseModelApplication( xmlStreamReader, strict ) );
1032                    }
1033                    else
1034                    {
1035                        throw new XMLStreamException( "Unrecognised tag: '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation() );
1036                    }
1037                }
1038            }
1039            else
1040            {
1041                checkUnknownElement( xmlStreamReader, strict );
1042            }
1043        }
1044        return redbackRoleModel;
1045    } //-- RedbackRoleModel parseRedbackRoleModel( XMLStreamReader, boolean )
1046
1047    /**
1048     * Method read.
1049     * 
1050     * @param xmlStreamReader
1051     * @param strict
1052     * @throws IOException
1053     * @throws XMLStreamException
1054     * @return RedbackRoleModel
1055     */
1056    private RedbackRoleModel read( XMLStreamReader xmlStreamReader, boolean strict )
1057        throws IOException, XMLStreamException
1058    {
1059        int eventType = xmlStreamReader.getEventType();
1060        String encoding = null;
1061        while ( eventType != XMLStreamConstants.END_DOCUMENT )
1062        {
1063            if ( eventType == XMLStreamConstants.START_DOCUMENT )
1064            {
1065                encoding = xmlStreamReader.getCharacterEncodingScheme();
1066            }
1067            if ( eventType == XMLStreamConstants.START_ELEMENT )
1068            {
1069                if ( strict && ! "redback-role-model".equals( xmlStreamReader.getLocalName() ) )
1070                {
1071                    throw new XMLStreamException( "Expected root element 'redback-role-model' but found '" + xmlStreamReader.getLocalName() + "'", xmlStreamReader.getLocation(), null );
1072                }
1073                RedbackRoleModel redbackRoleModel = parseRedbackRoleModel( xmlStreamReader, strict );
1074                redbackRoleModel.setModelEncoding( encoding );
1075                resolveReferences( redbackRoleModel );
1076                return redbackRoleModel;
1077            }
1078            eventType = xmlStreamReader.next();
1079        }
1080        throw new XMLStreamException( "Expected root element 'redback-role-model' but found no element at all: invalid XML document", xmlStreamReader.getLocation(), null );
1081    } //-- RedbackRoleModel read( XMLStreamReader, boolean )
1082
1083    /**
1084     * Method resolveReferences.
1085     * 
1086     * @param value
1087     */
1088    private void resolveReferences( RedbackRoleModel value )
1089    {
1090        java.util.Map refs;
1091    } //-- void resolveReferences( RedbackRoleModel )
1092
1093}