001         package com.croftsoft.apps.agoracast.c2p;
002    
003         import java.awt.event.*;
004         import java.io.*;
005         import javax.swing.*;
006         import javax.swing.table.*;
007         import java.util.*;
008    
009         import com.croftsoft.core.gui.table.RowSortComparator;
010         import com.croftsoft.core.lang.NullArgumentException;
011    
012         /*********************************************************************
013         *
014         * <p />
015         *
016         * @version
017         *   2002-01-29
018         * @since
019         *   2001-07-31
020         * @author
021         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
022         *********************************************************************/
023    
024         public final class  AgoracastTableModel
025           extends AbstractTableModel
026         //////////////////////////////////////////////////////////////////////
027         //////////////////////////////////////////////////////////////////////
028         {
029    
030    //   private final AgoracastMediator    agoracastMediator;
031    
032         private final String [ ]           columnNames;
033    
034         private final String [ ]           columnNamesLowerCase;
035    
036         private final AgoracastData [ ]    agoracastDatas;
037    
038         private final AgoracastComparator  agoracastComparator;
039    
040         private final int                  columnCount;
041    
042         private final int                  rowCount;
043    
044         private final boolean [ ]          columnsReversed;
045    
046         //////////////////////////////////////////////////////////////////////
047         //////////////////////////////////////////////////////////////////////
048    
049         public  AgoracastTableModel (
050           AgoracastMediator  agoracastMediator,
051           String             category,
052           String [ ]         columnNames )
053         //////////////////////////////////////////////////////////////////////
054         {
055           NullArgumentException.check ( agoracastMediator );
056    
057           NullArgumentException.check ( this.columnNames = columnNames );
058    
059           columnCount = columnNames.length;
060    
061           columnNamesLowerCase = new String [ columnCount ];
062    
063           for ( int  i = 0; i < columnCount; i++ )
064           {
065             columnNamesLowerCase [ i ] = columnNames [ i ].toLowerCase ( );
066           }
067    
068           AgoracastDatabase  agoracastDatabase
069             = agoracastMediator.getAgoracastDatabase ( );
070    
071           if ( category != null )
072           {
073             agoracastDatas
074               = agoracastDatabase.getAgoracastDatasForCategory ( category );
075           }
076           else
077           {
078             agoracastDatas = agoracastDatabase.getAgoracastDatas ( );
079           }
080    
081           rowCount = agoracastDatas.length;
082    
083           agoracastComparator = new AgoracastComparator (
084             agoracastMediator, "", false );
085    
086           columnsReversed = new boolean [ columnCount ];
087    
088           sort ( 0 );
089    
090    //     agoracastDatabase.addEventObserver ( this );
091         }
092    
093         //////////////////////////////////////////////////////////////////////
094         //////////////////////////////////////////////////////////////////////
095    
096         public int getColumnCount ( )
097         //////////////////////////////////////////////////////////////////////
098         {
099           return columnCount;
100         }
101    
102         public String  getColumnName ( int  column )
103         //////////////////////////////////////////////////////////////////////
104         {
105           return columnNames [ column ];
106         }
107    
108         public int  getRowCount ( )
109         //////////////////////////////////////////////////////////////////////
110         {
111           return rowCount;
112         }
113    
114         public Object  getValueAt ( int  row, int  column )
115         //////////////////////////////////////////////////////////////////////
116         {
117           return agoracastDatas [ row ]
118             .getValue ( columnNamesLowerCase [ column ] );
119         }
120    
121         public boolean  isCellEditable (
122           int  row,
123           int  column )
124         //////////////////////////////////////////////////////////////////////
125         {
126           return false;
127         }
128    
129         //////////////////////////////////////////////////////////////////////
130         //////////////////////////////////////////////////////////////////////
131    
132         public synchronized void  sort ( int  columnIndex )
133         //////////////////////////////////////////////////////////////////////
134         {
135           columnsReversed [ columnIndex ] = !columnsReversed [ columnIndex ];
136    
137           agoracastComparator.setReverse ( columnsReversed [ columnIndex ] );
138    
139           agoracastComparator.setSortField (
140             columnNamesLowerCase [ columnIndex ] );
141    
142           Arrays.sort ( agoracastDatas, agoracastComparator );
143    
144           fireTableDataChanged ( );
145         }
146    
147         public synchronized AgoracastData  getAgoracastData ( int  tableRow )
148         //////////////////////////////////////////////////////////////////////
149         {
150           return agoracastDatas [ tableRow ];
151         }
152    
153         //////////////////////////////////////////////////////////////////////
154         //////////////////////////////////////////////////////////////////////
155    
156    /*
157         public synchronized void  observeEvent ( Object  event )
158         //////////////////////////////////////////////////////////////////////
159         {
160           AgoracastEvent  agoracastEvent = ( AgoracastEvent ) event;
161    
162           if ( agoracastEvent.getType ( ) == AgoracastEvent.TYPE_ADD )
163           {
164             String  articleId = agoracastEvent.getArticleId ( );
165    
166             add ( agoracastDatabase.getAgoracastData ( articleId ) );
167           }
168         }
169    */
170    
171         //////////////////////////////////////////////////////////////////////
172         //////////////////////////////////////////////////////////////////////
173         }