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 }