001 package com.croftsoft.apps.agoracast.c2p; 002 003 import java.util.*; 004 005 import com.croftsoft.core.lang.NullArgumentException; 006 import com.croftsoft.core.lang.Pair; 007 import com.croftsoft.core.lang.StringLib; 008 import com.croftsoft.core.text.sml.*; 009 010 /********************************************************************* 011 * 012 * <p /> 013 * 014 * @version 015 * 2001-08-09 016 * @since 017 * 2001-08-06 018 * @author 019 * <a href="https://www.croftsoft.com/">David Wallace Croft</a> 020 *********************************************************************/ 021 022 public final class AgoracastData 023 ////////////////////////////////////////////////////////////////////// 024 ////////////////////////////////////////////////////////////////////// 025 { 026 027 public static final String SML_NODE_NAME = "data"; 028 029 // 030 031 private final String newsgroup; 032 033 private final String articleId; 034 035 private final Map map; 036 037 ////////////////////////////////////////////////////////////////////// 038 ////////////////////////////////////////////////////////////////////// 039 040 public static AgoracastData fromSmlNode ( SmlNode smlNode ) 041 ////////////////////////////////////////////////////////////////////// 042 { 043 if ( !SML_NODE_NAME.equals ( smlNode.getName ( ) ) ) 044 { 045 throw new IllegalArgumentException ( smlNode.getName ( ) ); 046 } 047 048 String newsgroup = smlNode.getString ( "newsgroup" ); 049 050 String articleId = smlNode.getString ( "articleId" ); 051 052 Pair [ ] pairs = null; 053 054 SmlNode [ ] fieldNodes = smlNode.getChildNodes ( "field" ); 055 056 if ( fieldNodes != null ) 057 { 058 List pairList = new ArrayList ( ); 059 060 for ( int i = 0; i < fieldNodes.length; i++ ) 061 { 062 SmlNode fieldNode = fieldNodes [ i ]; 063 064 String name 065 = StringLib.trimToNull ( fieldNode.getString ( "name" ) ); 066 067 if ( name != null ) 068 { 069 String value = StringLib.trimToNull ( 070 fieldNode.getString ( "value" ) ); 071 072 pairList.add ( new Pair ( name, value ) ); 073 } 074 } 075 076 pairs = ( Pair [ ] ) pairList.toArray ( new Pair [ ] { } ); 077 } 078 079 return new AgoracastData ( newsgroup, articleId, pairs ); 080 } 081 082 ////////////////////////////////////////////////////////////////////// 083 ////////////////////////////////////////////////////////////////////// 084 085 public AgoracastData ( 086 String newsgroup, 087 String articleId, 088 Pair [ ] pairs ) 089 ////////////////////////////////////////////////////////////////////// 090 { 091 NullArgumentException.check ( this.newsgroup = newsgroup ); 092 093 NullArgumentException.check ( this.articleId = articleId ); 094 095 NullArgumentException.check ( pairs ); 096 097 if ( pairs.length < 1 ) 098 { 099 throw new IllegalArgumentException ( "pairs.length < 1" ); 100 } 101 102 map = new HashMap ( ); 103 104 for ( int i = 0; i < pairs.length; i++ ) 105 { 106 Pair pair = pairs [ i ]; 107 108 map.put ( pair.name, pair.value ); 109 } 110 } 111 112 ////////////////////////////////////////////////////////////////////// 113 ////////////////////////////////////////////////////////////////////// 114 115 public String getNewsgroup ( ) { return newsgroup; } 116 117 public String getArticleId ( ) { return articleId; } 118 119 public String getValue ( String name ) 120 ////////////////////////////////////////////////////////////////////// 121 { 122 return ( String ) map.get ( name ); 123 } 124 125 public synchronized SmlNode toSmlNode ( ) 126 ////////////////////////////////////////////////////////////////////// 127 { 128 SmlNode rootSmlNode = new SmlNode ( SML_NODE_NAME ); 129 130 rootSmlNode.add ( new SmlNode ( "newsgroup", newsgroup ) ); 131 132 rootSmlNode.add ( new SmlNode ( "articleId", articleId ) ); 133 134 if ( map != null ) 135 { 136 Iterator iterator = map.keySet ( ).iterator ( ); 137 138 while ( iterator.hasNext ( ) ) 139 { 140 SmlNode fieldSmlNode = new SmlNode ( "field" ); 141 142 rootSmlNode.add ( fieldSmlNode ); 143 144 String name = ( String ) iterator.next ( ); 145 146 fieldSmlNode.add ( new SmlNode ( "name", name ) ); 147 148 String value = ( String ) map.get ( name ); 149 150 if ( value != null ) 151 { 152 fieldSmlNode.add ( new SmlNode ( "value", value ) ); 153 } 154 } 155 } 156 157 return rootSmlNode; 158 } 159 160 ////////////////////////////////////////////////////////////////////// 161 ////////////////////////////////////////////////////////////////////// 162 }