Листинг 8.28. Различные вспомогательные функции класса NewsUpKeep (NewsUpKeep.java)
//ensure there are no leading or trailing spaces on the // individual topics, comma separated, general,food , etc private String formatTopics(String s ){ if( s.indexOf(',') < 0 ) return s.trim(); // only separator is comma StringTokenizer st = new StringTokenizer( s, "," ); StringBuffer sb = new StringBuffer( s.length() ); while( st.hasMoreTokens() ){ sb.append( st.nextToken().trim() ); if( st.hasMoreTokens() ) sb.append(','); } return sb.toString(); } // convert system millisecs to days since epoch private String timeInDays(){ long t = System.currentTimeMillis() ; int tid = (int)(t / ( 1000 * 60 * 60 * 24 )); return Integer.toString( tid ); }
// s expected to be decimal number used in <Newsitem id= private String incrementID(String s ){ try{ int n = Integer.parseInt( s ); return Integer.toString( n + 2 ); }catch(NumberFormatException e){ return s + "a" ; } } public String toString() { StringBuffer sb = new StringBuffer("NewsUpkeep "); sb.append(" Newsitem count: " ); sb.append( Integer.toString( itemNodes.length )); return sb.toString(); }
Теперь мы подходим к основному рабочему методу, addltem. Сначала этот метод создает новый файл с временным именем и записывает туда стандартное объявление XML и комментарии. Затем создается тег <Newsfile> , куда записываются имена атрибутов и их значения из коллекции rootNNM.
Как видно из листинга 8.29, атрибут nextid обрабатывается специальным образом. Сохраняется текущее значение, которое становится значением атрибута id нового элемента <Newsitem> , а увеличенное значение записывается в тег <Newsfile> .