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 }