package exercise.writer; /** * This class is used to Parse a Multiple Choice Question file into * it's component parts that can be used to construct a Multiple Choice * Entry Module. * @author Grant K. Olds * @version * @since JDK1.2 */ import java.lang.*; import java.util.*; public class MultipleChoiceEntryParser extends QuestionEntryParser { final static int A = 0; final static int B = 1; final static int C = 2; final static int D = 3; final static int E = 4; final static int F = 5; final static int G = 6; final static int H = 7; final static int I = 8; final static int J = 9; private StringBuffer [] choiceArray; private StringBuffer [] feedbackArray; private StringBuffer correctFeedback; private int [] answerArray; MultipleChoiceEntryParser() { } MultipleChoiceEntryParser( String fileContents ) { file = new StringTokenizer ( fileContents ); } public void parseFile(){} /** * Returns the choiceArray * @return the choice Array null string array otherwise. */ public String [] getChoiceArray() { String [] temp = new String[10]; for(int i = 0; i < 10; i++) { if( choiceArray[i] != null ) temp[i] = choiceArray[i].toString(); } return temp; } /** * Returns the correct Feedback * @return the correct Feedback null string otherwise. */ public String getCorrectFeedback() { return correctFeedback.toString(); } /** * Returns the feedback Array * @return the feedback string array null string array otherwise. */ public String [] getFeedbackArray() { String [] temp = new String[10]; for(int i = 0; i < 10; i++) { if( feedbackArray[i] != null ) temp[i] = feedbackArray[i].toString(); } return temp; } /** * Returns the answer Array * @return the answer array null int array otherwise. */ public int [] getAnswerArray() { return answerArray; } public void parseFile ( String fileContents ) { file = new StringTokenizer ( fileContents ); String currToken = new String(); while ( file.hasMoreTokens () ) { currToken = file.nextToken(); if ( currToken.equals( "Section:" ) ) { //assign all the tokens to the section string until you reach //Exercise. currToken = file.nextToken(); section = new StringBuffer(); while ( currToken.compareTo( "Exercise:") != 0 ) { section.append ( currToken ); currToken = file.nextToken(); } } // assign all tokens to the exercise strint until you reach // "Question:" if ( currToken.equals( "Exercise:" ) ) { exercise = new StringBuffer (); currToken = file.nextToken(); while ( currToken.compareTo( "Question:") != 0 ) { exercise.append ( currToken ); currToken = file.nextToken(); } } if ( currToken.equals( "Question:" ) ) { question = new StringBuffer(); currToken = file.nextToken(); while ( currToken.compareTo( "ChoiceBegin") != 0 ) { question.append( currToken ).append(" "); currToken = file.nextToken(); } } if ( currToken.equals ( "ChoiceBegin" ) ) { choiceArray = new StringBuffer[10]; currToken = file.nextToken(); while ( currToken.compareTo( "ChoiceEnd" ) != 0 ) { if ( currToken.equals ( "ChoiceA:") ) { choiceArray[A] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceB:")) ) { choiceArray[A].append( currToken ).append(" "); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceB:") ) { choiceArray[B] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceC:")) ) { choiceArray[B].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceC:")) { choiceArray[C] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceD:")) ) { choiceArray[C].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceD:")) { choiceArray[D] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceE:")) ) { choiceArray[D].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceE:")) { choiceArray[E] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceF:")) ) { choiceArray[E].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceF:")) { choiceArray[F] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceG:")) ) { choiceArray[F].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceG:")) { choiceArray[G] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceH:")) ) { choiceArray[G].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceH:")) { choiceArray[H] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceI:")) ) { choiceArray[H].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceI:")) { choiceArray[I] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd" ) ) && !(currToken.equals("ChoiceJ:")) ) { choiceArray[I].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "ChoiceJ:")) { choiceArray[J] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "ChoiceEnd:" )) ) { choiceArray[J].append( currToken ).append( " " ); currToken = file.nextToken(); } } }//end while Choice End }//if choiceBegin if ( currToken.equals ("AnswerBegin") ) { answerArray = new int[10]; for( int i = 0; i < 10; i++ ) { answerArray[i] = -1; } while ( ! ( currToken.equals ( "AnswerEnd" ))) { currToken = file.nextToken(); if ( currToken.equals ( "A" ) ) { answerArray[A] = A; } else if ( currToken.equals ( "B" ) ) { answerArray[B] = B; } else if ( currToken.equals ( "C" ) ) { answerArray[C] = C; } else if ( currToken.equals ( "D" ) ) { answerArray[D] = D; } else if ( currToken.equals ( "E" ) ) { answerArray[E] = E; } else if ( currToken.equals ( "F" ) ) { answerArray[F] = F; } else if ( currToken.equals ( "G" ) ) { answerArray[G] = G; } else if ( currToken.equals ( "H" ) ) { answerArray[H] = H; } else if ( currToken.equals ( "I" ) ) { answerArray[I] = I; } else if ( currToken.equals ( "J" ) ) { answerArray[J] = J; } }// end of while AnswerEnd }// end of if AnswerBegin if ( currToken.equals ("FeedbackBegin")) { feedbackArray = new StringBuffer[10]; currToken = file.nextToken(); while ( ! ( currToken.equals ("FeedbackEnd") )) { if ( currToken.equals ("CorrectFeedback:")) { correctFeedback = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { correctFeedback.append( currToken ).append(" "); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackA:") ) { currToken = file.nextToken(); feedbackArray[A] = new StringBuffer(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[A].append( currToken ).append(" "); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackB:") ) { feedbackArray[B] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[B].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackC:")) { feedbackArray[C] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[C].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackD:")) { feedbackArray[D] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[D].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackE:")) { feedbackArray[E] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[E].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackF:")) { feedbackArray[F] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[F].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackG:")) { feedbackArray[G] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[G].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackH:")) { feedbackArray[H] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackI:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[H].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackI:")) { feedbackArray[I] = new StringBuffer(); currToken = file.nextToken(); while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackJ:"))) { feedbackArray[I].append( currToken ).append( " " ); currToken = file.nextToken(); } } else if ( currToken.equals ( "feedbackJ:")) { feedbackArray[J] = new StringBuffer(); currToken = file.nextToken(); //while ( !(currToken.equals ( "FeedbackEnd" )) ) while ( !(currToken.equals ( "FeedbackEnd" ) ) && !(currToken.equals("feedbackA:")) && !(currToken.equals("feedbackB:")) && !(currToken.equals("feedbackC:")) && !(currToken.equals("feedbackD:")) && !(currToken.equals("feedbackE:")) && !(currToken.equals("feedbackF:")) && !(currToken.equals("feedbackG:")) && !(currToken.equals("feedbackH:")) && !(currToken.equals("feedbackI:"))) { feedbackArray[J].append( currToken ).append( " " ); currToken = file.nextToken(); } } }// end of while Feedback End }//end of if FeedbackBegin if ( currToken.equals( "Hint:" ) ) { hint = new StringBuffer(); currToken = file.nextToken(); while ( file.hasMoreTokens() ) { hint.append ( currToken ).append(" "); currToken = file.nextToken(); } hint.append( currToken ); } }// end while file has more Tokensloop }// end parse file public void test() { System.out.println( "The Section is " + section ); System.out.println( "The Exercise is " + exercise ); System.out.println( "The Question is " + question ); for( int i = 0; i < 10; i++) { if ( choiceArray [i] != null ) System.out.println ( "Choice " + new Integer ( i ) + " is " + choiceArray[i] ); } for( int j = 0; j < 10; j++ ) { if ( answerArray[j] != -1 ) System.out.println ( "Answer " + new Integer ( j ) + " is " + answerArray[j] ); } System.out.println ("The Correct Feedback is " + correctFeedback ); for( int i = 0; i < 10; i++ ) { if ( feedbackArray [i] != null ) System.out.println ( "Feedback " + new Integer ( i ) + " is " + feedbackArray[i] ); } System.out.println("The hint is " + hint ); } }