001         package com.croftsoft.apps.quiz;
002    
003         import java.io.Serializable;
004         import java.util.*;
005    
006         import com.croftsoft.core.lang.NullArgumentException;
007         import com.croftsoft.core.text.sml.*;
008    
009         /*********************************************************************
010         * A list of question/answer pairs.
011         *
012         * @version
013         *   2001-06-10
014         * @since
015         *   2001-06-10
016         * @author
017         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
018         *********************************************************************/
019    
020         public final class  Quiz
021           implements Serializable
022         //////////////////////////////////////////////////////////////////////
023         //////////////////////////////////////////////////////////////////////
024         {
025    
026         private static final long  serialVersionUID = 1L;
027    
028         private Vector  quizItemVector;
029    
030         //////////////////////////////////////////////////////////////////////
031         //////////////////////////////////////////////////////////////////////
032    
033         public static Quiz  fromString ( String  quizString )
034         //////////////////////////////////////////////////////////////////////
035         {
036           return fromSmlNode ( SmlNodeLib.parse ( quizString ) );
037    
038         }
039    
040         public static Quiz  fromSmlNode ( SmlNode  smlNode )
041         //////////////////////////////////////////////////////////////////////
042         {
043           Vector  quizItemVector = new Vector ( );
044    
045           SmlNode  quizItemsSmlNode = smlNode.getChildNode ( "quizItems" );
046    
047           if ( quizItemsSmlNode != null )
048           {
049             int  index = 0;
050    
051             SmlNode  quizItemSmlNode;
052    
053             while ( true )
054             {
055               Object  child = quizItemsSmlNode.getChild ( index++ );
056    
057               if ( child == null )
058               {
059                 break;
060               }
061    
062               if ( child instanceof SmlNode )
063               {
064                 quizItemVector.addElement (
065                   QuizItem.fromSmlNode ( ( SmlNode ) child ) );
066               }
067             }
068           }
069    
070           return new Quiz ( quizItemVector );
071         }
072    
073         //////////////////////////////////////////////////////////////////////
074         //////////////////////////////////////////////////////////////////////
075    
076         public  Quiz ( Vector  quizItemVector )
077         //////////////////////////////////////////////////////////////////////
078         {
079           NullArgumentException.check (
080             this.quizItemVector = quizItemVector );
081         }
082    
083         public  Quiz ( )
084         //////////////////////////////////////////////////////////////////////
085         {
086           this ( new Vector ( ) );
087         }
088    
089         //////////////////////////////////////////////////////////////////////
090         //////////////////////////////////////////////////////////////////////
091    
092         public synchronized QuizItem [ ]  getQuizItems ( )
093         //////////////////////////////////////////////////////////////////////
094         {
095           QuizItem [ ]  quizItems = new QuizItem [ quizItemVector.size ( ) ];
096    
097           quizItemVector.copyInto ( quizItems );
098    
099           return quizItems;
100         }
101    
102         //////////////////////////////////////////////////////////////////////
103         //////////////////////////////////////////////////////////////////////
104    
105         public synchronized void  add ( QuizItem  quizItem )
106         //////////////////////////////////////////////////////////////////////
107         {
108           quizItemVector.addElement ( quizItem );
109         }
110    
111         //////////////////////////////////////////////////////////////////////
112         //////////////////////////////////////////////////////////////////////
113    
114         public SmlNode  toSmlNode ( )
115         //////////////////////////////////////////////////////////////////////
116         {
117           SmlNode  rootSmlNode = new SmlNode ( "Quiz" );
118    
119           QuizItem [ ]  quizItems = getQuizItems ( );
120    
121           if ( quizItems != null )
122           {
123             SmlNode  quizItemsSmlNode = new SmlNode ( "quizItems" );
124    
125             rootSmlNode.add ( quizItemsSmlNode );
126    
127             for ( int  i = 0; i < quizItems.length; i++ )
128             {
129               quizItemsSmlNode.add ( quizItems [ i ].toSmlNode ( ) );
130             }
131           }
132    
133           return rootSmlNode;       
134         }
135    
136         public String  toString ( )
137         //////////////////////////////////////////////////////////////////////
138         {
139           return toSmlNode ( ).toString ( 0, 0 );
140         }
141    
142         //////////////////////////////////////////////////////////////////////
143         //////////////////////////////////////////////////////////////////////
144         }