Электронный магазин на Java и XML


         

Класс Recorder - часть 3


В листинге 7.22 показаны методы terminal, record и toString. Метод terminal отвечает за запись собранных ответов данного пользователя в отведенный для этого файл. Метод toString используется как вспомогательный при отладке.

Метод record вызывается из метода doPost объекта Interpreter после того, как приходит ответ на очередной вопрос. Отметим, что если вам нужно будет создать какой-либо новый тип, требующий специального способа записи, метод record допускает переключение между типами вопросов. Например, если вам потребуется принимать введенный пользователем текст, он будет записан в раздел CDATA, чтобы в случае наличия в этом тексте каких-либо символов, имеющих специальное назначение в XML, не возникло бы затруднений.

При каждом вызове метода record создается строка, содержащая тег Ques, которая записывается в хэш-таблице record и ключом для которой служит переменная quesid. Поскольку хэш-таблица не сохраняет порядок добавления в нее элементов, очередность расположения тегов Ques в ней непредсказуема. Но это не страшно, поскольку для определения порядка следования вопросов мы можем использовать документ XML, содержащий сценарий опроса.

Листинг 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>




Содержание  Назад  Вперед