Листинг 7.22. Код класса Recorder, продолжение (Recorder.java)
// called when a <Terminal block is reached // if altdest is not "" this changes the default output public void terminal(String altdest ) throws IOException { if( altdest != null && altdest.length() > 4 ) output = altdest ; if( output == null || output.length() < 5 ){ System.out.println("QARG output is: " + output ); return ; } terminated = true ; // write in append mode synchronized( filelock ){ FileWriter fw = new FileWriter( output,true ); PrintWriter pw = new PrintWriter( fw ); pw.print( qresultStr ); Enumeration e = record.elements(); while( e.hasMoreElements() ){ pw.print( (String)e.nextElement() ) ; } pw.print("</Qresults> \r\n"); pw.close(); } // end synchronized block } // recording format in xml /*<Qresults source=.... date= > <Ques id="start:1"> <Qopt val="a"> </Qopt> <Qopt val="b"> </Qopt> </Ques>
</Qresults> */ public void record( String quesid, int type, String[] optS ){ if( terminated ) return ; // prevent backing up from terminal Q // System.out.println("Start record: " + quesid ); StringBuffer sb = new StringBuffer( 100 ); sb.append("<Ques id=\"" ); sb.append( quesid ); sb.append("\" > "); switch( type ){ case Interpreter.QMC : case Interpreter.QMCM : if( optS == null || optS.length == 0 ) break ; for(int i =0 ; i < optS.length ; i++ ){ sb.append("<Qopt val=\""); sb.append( optS[i] ); sb.append("\"> </Qopt> "); } break ; default : sb.append("UNKNOWN TYPE"); } sb.append("\r\n</Ques> \r\n"); String tmp = sb.toString(); // note this will replace answer if user backed up with browser back record.put( quesid, tmp ); return ; }
public String toString() // for debugging { StringBuffer sb = new StringBuffer( "Recorder user: " ); sb.append( userid ); sb.append(" type: " ); sb.append( usertype ); sb.append(" session: " ); sb.append( sessionid ); sb.append(" method: "); sb.append( method ); sb.append( " output: " ); sb.append( output ); // how and where we save return sb.toString() ; }
}
В листинге 23 показаны результаты ответа одного пользователя на простой опрос. Атрибут source указывает, какой файл XML использовался для создания анкеты. В атрибут date записывается дата первого вхождения пользователя в систему и открытия страницы введения в анкету. Мы также включили атрибут sessionid для помощи в отладке, но, вероятно, без него можно обойтись.