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 );
}
}