001         package com.croftsoft.apps.agoracast.c2p;
002    
003         import java.awt.Color;
004         import java.awt.Frame;
005         import java.io.*;
006         import javax.swing.*;
007    
008         import com.croftsoft.core.lang.NullArgumentException;
009         import com.croftsoft.core.lang.Pair;
010         import com.croftsoft.core.lang.StringLib;
011         import com.croftsoft.core.lang.lifecycle.Commissionable;
012         import com.croftsoft.core.lang.lifecycle.InitializationException;
013         import com.croftsoft.core.util.ArrayLib;
014         import com.croftsoft.core.util.log.Log;
015         import com.croftsoft.core.util.log.PrintStreamLog;
016    
017         /*********************************************************************
018         *
019         * <p />
020         *
021         * @version
022         *   2001-11-09
023         * @since
024         *   2001-08-01
025         * @author
026         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
027         *********************************************************************/
028    
029         public final class  AgoracastMediator
030           implements Commissionable, AgoracastModel
031         //////////////////////////////////////////////////////////////////////
032         //////////////////////////////////////////////////////////////////////
033         {
034    
035         private Log                  log;
036    
037         private AgoracastConfig      agoracastConfig;
038    
039         private AgoracastNewsrc      agoracastNewsrc;
040    
041         private AgoracastMemory      agoracastMemory;
042    
043         private Frame                parentFrame;
044    
045         private JTabbedPane          jTabbedPane;
046    
047         //////////////////////////////////////////////////////////////////////
048         //////////////////////////////////////////////////////////////////////
049    
050         public  AgoracastMediator ( )
051         //////////////////////////////////////////////////////////////////////
052         {
053           log = PrintStreamLog.SYSTEM_ERR_INSTANCE;
054         }
055    
056         //////////////////////////////////////////////////////////////////////
057         //////////////////////////////////////////////////////////////////////
058    
059         public synchronized void  init ( )
060         //////////////////////////////////////////////////////////////////////
061         {
062           try
063           {
064             agoracastConfig
065               = AgoracastConfig.load ( AgoracastConstants.CONFIG_FILENAME );
066           }
067           catch ( FileNotFoundException  ex )
068           {
069           }
070           catch ( Exception  ex )
071           {
072             log.record ( ex );
073           }
074    
075           if ( agoracastConfig == null )
076           {
077             agoracastConfig = new AgoracastConfig ( );
078           }
079    
080           try
081           {
082             agoracastNewsrc
083               = AgoracastNewsrc.load ( AgoracastConstants.NEWSRC_FILENAME );
084           }
085           catch ( FileNotFoundException  ex )
086           {
087           }
088           catch ( Exception  ex )
089           {
090             log.record ( ex );
091           }
092    
093           if ( agoracastNewsrc == null )
094           {
095             agoracastNewsrc = new AgoracastNewsrc ( );
096           }
097    
098           try
099           {
100             agoracastMemory = AgoracastMemory.load (
101               AgoracastConstants.DATABASE_FILENAME );
102           }
103           catch ( FileNotFoundException  ex )
104           {
105           }
106           catch ( Exception  ex )
107           {
108             log.record ( ex );
109           }
110    
111           if ( agoracastMemory == null )
112           {
113             agoracastMemory = new AgoracastMemory ( );
114           }
115         }
116    
117         public synchronized void  destroy ( )
118         //////////////////////////////////////////////////////////////////////
119         {
120           log = PrintStreamLog.SYSTEM_ERR_INSTANCE;
121      
122           try
123           {
124             agoracastConfig.saveIfDirty (
125               AgoracastConstants.CONFIG_FILENAME );
126           }
127           catch ( Exception  ex )
128           {
129             log.record ( ex );
130           }
131    
132           try
133           {
134             agoracastNewsrc.saveIfDirty (
135               AgoracastConstants.NEWSRC_FILENAME );
136           }
137           catch ( Exception  ex )
138           {
139             log.record ( ex );
140           }
141    
142           try
143           {
144             agoracastMemory.saveIfDirty (
145               AgoracastConstants.DATABASE_FILENAME );
146           }
147           catch ( Exception  ex )
148           {
149             log.record ( ex );
150           }
151         }
152    
153         //////////////////////////////////////////////////////////////////////
154         //////////////////////////////////////////////////////////////////////
155    
156         public Log  getLog ( )
157         //////////////////////////////////////////////////////////////////////
158         {
159           return log;
160         }
161    
162         public AgoracastDatabase  getAgoracastDatabase ( )
163         //////////////////////////////////////////////////////////////////////
164         {
165           return agoracastMemory;
166         }
167    
168         public AgoracastNewsrc  getAgoracastNewsrc ( )
169         //////////////////////////////////////////////////////////////////////
170         {
171           return agoracastNewsrc;
172         }
173    
174         public Frame  getParentFrame ( )
175         //////////////////////////////////////////////////////////////////////
176         {
177           return parentFrame;
178         }
179    
180         //////////////////////////////////////////////////////////////////////
181         //////////////////////////////////////////////////////////////////////
182    
183         public synchronized void  setLog ( Log  log )
184         //////////////////////////////////////////////////////////////////////
185         {
186           this.log = log;
187         }
188    
189         public synchronized void  setParentFrame ( Frame  parentFrame )
190         //////////////////////////////////////////////////////////////////////
191         {
192           this.parentFrame = parentFrame;
193         }
194    
195         public synchronized void  setJTabbedPane ( JTabbedPane  jTabbedPane )
196         //////////////////////////////////////////////////////////////////////
197         {
198           NullArgumentException.check ( this.jTabbedPane = jTabbedPane );
199    
200           String  server    = StringLib.trimToNull ( getServer    ( ) );
201    
202           String  email     = StringLib.trimToNull ( getEmail     ( ) );
203    
204           if ( server == null )
205           {
206             setTabEnabled ( AgoracastConstants.TAB_INDEX_BROWSE  , false );
207    
208             setTabEnabled ( AgoracastConstants.TAB_INDEX_DEFAULTS, false );
209    
210             setTabEnabled ( AgoracastConstants.TAB_INDEX_POST    , false );
211           }
212           else if ( email == null )
213           {
214             setTabEnabled ( AgoracastConstants.TAB_INDEX_DEFAULTS, false );
215    
216             setTabEnabled ( AgoracastConstants.TAB_INDEX_POST    , false );
217           }
218         }
219    
220         //////////////////////////////////////////////////////////////////////
221         //////////////////////////////////////////////////////////////////////
222    
223         public synchronized void  setTabEnabled ( 
224           int      index,
225           boolean  enabled )
226         //////////////////////////////////////////////////////////////////////
227         {
228           jTabbedPane.setEnabledAt ( index, enabled );
229         }
230    
231         //////////////////////////////////////////////////////////////////////
232         // interface AgoracastModel accessor methods
233         //////////////////////////////////////////////////////////////////////
234    
235         public String  getEmail     ( )
236         //////////////////////////////////////////////////////////////////////
237         {
238           return agoracastConfig.getEmail ( );
239         }
240    
241         public String  getServer    ( )
242         //////////////////////////////////////////////////////////////////////
243         {
244           return agoracastConfig.getServer ( );
245         }
246    
247         public String  getUsername  ( )
248         //////////////////////////////////////////////////////////////////////
249         {
250           return agoracastConfig.getUsername ( );
251         }
252    
253         public String  getNewsgroup ( )
254         //////////////////////////////////////////////////////////////////////
255         {
256           String  newsgroup
257             = StringLib.trimToNull ( agoracastConfig.getNewsgroup ( ) );
258    
259           return newsgroup != null
260             ? newsgroup : AgoracastConstants.DEFAULT_NEWSGROUP;
261         }
262    
263         public String  getPassword  ( )
264         //////////////////////////////////////////////////////////////////////
265         {
266           return agoracastConfig.getPassword ( );
267         }
268    
269         public AgoracastField  getAgoracastField ( String  name )
270         //////////////////////////////////////////////////////////////////////
271         {
272           return agoracastConfig.getAgoracastField ( name );
273         }
274    
275         public AgoracastField [ ]  getAgoracastFields ( )
276         //////////////////////////////////////////////////////////////////////
277         {
278           return agoracastConfig.getAgoracastFields ( );
279         }
280    
281         public String [ ]  getAgoracastFieldNames ( )
282         //////////////////////////////////////////////////////////////////////
283         {
284           return agoracastConfig.getAgoracastFieldNames ( );
285         }
286    
287         public String  getDefaultDescription ( )
288         //////////////////////////////////////////////////////////////////////
289         {
290           return agoracastConfig.getDefaultDescription ( );
291         }
292    
293         public Color  getPanelBackgroundColor ( )
294         //////////////////////////////////////////////////////////////////////
295         {
296           return agoracastConfig.getPanelBackgroundColor ( );
297         }
298    
299         public Color  getTextFieldBackgroundColor ( )
300         //////////////////////////////////////////////////////////////////////
301         {
302           return agoracastConfig.getTextFieldBackgroundColor ( );
303         }
304    
305         //////////////////////////////////////////////////////////////////////
306         // interface AgoracastModel accessor methods
307         //////////////////////////////////////////////////////////////////////
308    
309         public void  add ( AgoracastField  agoracastField )
310         //////////////////////////////////////////////////////////////////////
311         {
312           agoracastConfig.add ( agoracastField );
313         }
314    
315         public void  setAgoracastFields (
316           AgoracastField [ ]  agoracastFields )
317         //////////////////////////////////////////////////////////////////////
318         {
319           agoracastConfig.setAgoracastFields ( agoracastFields );
320         }
321    
322         public synchronized void  setEmail ( String  email )
323         //////////////////////////////////////////////////////////////////////
324         {
325           email = StringLib.trimToNull ( email );
326    
327           agoracastConfig.setEmail ( email );
328    
329           setTabEnabled ( AgoracastConstants.TAB_INDEX_DEFAULTS,
330             email != null && getServer ( ) != null );
331    
332           setTabEnabled ( AgoracastConstants.TAB_INDEX_POST,
333             email != null && getServer ( ) != null );
334         }
335    
336         public synchronized void  setServer ( String  server )
337         //////////////////////////////////////////////////////////////////////
338         {
339           server = StringLib.trimToNull ( server );
340    
341           agoracastConfig.setServer ( server );
342    
343           setTabEnabled ( AgoracastConstants.TAB_INDEX_BROWSE,
344             server != null );
345    
346           setTabEnabled ( AgoracastConstants.TAB_INDEX_DEFAULTS,
347             server != null && getEmail ( ) != null );
348    
349           setTabEnabled ( AgoracastConstants.TAB_INDEX_POST,
350             server != null && getEmail ( ) != null );
351         }
352    
353         public void  setUsername ( String  username )
354         //////////////////////////////////////////////////////////////////////
355         {
356           agoracastConfig.setUsername ( username );
357         }
358    
359         public void  setNewsgroup ( String  newsgroup )
360         //////////////////////////////////////////////////////////////////////
361         {
362           agoracastConfig.setNewsgroup (
363             StringLib.trimToNull ( newsgroup ) );
364         }
365    
366         public void  setPassword ( String  password )
367         //////////////////////////////////////////////////////////////////////
368         {
369           agoracastConfig.setPassword ( password );
370         }
371    
372         public AgoracastCategory  getAgoracastCategory ( String  name )
373         //////////////////////////////////////////////////////////////////////
374         {
375           if ( name == null )
376           {
377             return AgoracastConstants.CATEGORY_ALL;
378           }
379    
380           for ( int  i = 0; i < AgoracastConstants.CATEGORIES.length; i++ )
381           {
382             AgoracastCategory  agoracastCategory
383               = AgoracastConstants.CATEGORIES [ i ];
384    
385             if ( agoracastCategory.getName ( ).equals ( name ) )
386             {
387               return agoracastCategory;
388             }
389           }
390     
391           return null;
392         }
393    
394         //////////////////////////////////////////////////////////////////////
395         // Miscellaneous
396         //////////////////////////////////////////////////////////////////////
397    
398    // redo this whole mess, isColumn should not be an attribute of AgoracastField
399    
400    /*
401    
402         public synchronized void  setColumnNames ( String [ ]  columnNames )
403         //////////////////////////////////////////////////////////////////////
404         {
405           AgoracastField [ ]  agoracastFields = getAgoracastFields ( );
406    
407           for ( int  i = 0; i < agoracastFields.length; i++ )
408           {
409             String  fieldName = agoracastFields [ i ].getName ( );
410    
411             boolean  isColumn = ArrayLib.contains ( columnNames, fieldName );
412    
413             setFieldIsColumn ( fieldName, isColumn );
414           }
415         }
416    
417    // redo this whole mess, isColumn should not be an attribute of AgoracastField
418    
419         public synchronized void  setFieldIsColumn (
420           String   fieldName,
421           boolean  isColumn )
422         //////////////////////////////////////////////////////////////////////
423         {
424           AgoracastField  agoracastField = getAgoracastField ( fieldName );
425    
426           if ( isColumn != agoracastField.isColumn ( ) )
427           {
428             AgoracastField  newAgoracastField = new AgoracastField (
429               agoracastField.getName     ( ),
430               agoracastField.getValue    ( ),
431               isColumn,
432               agoracastField.getType     ( ),
433               agoracastField.isReverse   ( ),
434               agoracastField.getChoices  ( ),
435               agoracastField.isPosted    ( ),
436               agoracastField.getSemantic ( ) );
437    
438             add ( newAgoracastField );
439           }
440         }
441    */
442    
443         //////////////////////////////////////////////////////////////////////
444         //////////////////////////////////////////////////////////////////////
445         }