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         }