001         package com.croftsoft.apps.agoracast.c2p;
002    
003         import java.awt.*;
004         import java.awt.event.*;
005         import java.util.*;
006         import javax.swing.*;
007         import javax.swing.event.*;
008    
009         import com.croftsoft.core.lang.NullArgumentException;
010         import com.croftsoft.core.lang.Pair;
011         import com.croftsoft.core.lang.StringLib;
012    
013         /*********************************************************************
014         * @version
015         *   2002-01-29
016         * @since
017         *   2001-09-13
018         * @author
019         *   <a href="https://www.croftsoft.com/">David Wallace Croft</a>
020         *********************************************************************/
021    
022         public final class  AgoracastFieldView
023           implements ActionListener, ItemListener, KeyListener
024         //////////////////////////////////////////////////////////////////////
025         //////////////////////////////////////////////////////////////////////
026         {
027    
028         private final ChangeEvent     changeEvent;
029    
030         private final ChangeListener  changeListener;
031    
032         private final JCheckBox    checkBox;
033    
034         private final JLabel       label;
035    
036         private final JComponent   component;
037    
038         private final JLabel       descriptorLabel;
039    
040         private final String       name;
041    
042         //////////////////////////////////////////////////////////////////////
043         //////////////////////////////////////////////////////////////////////
044    
045         public  AgoracastFieldView ( 
046           AgoracastMediator  agoracastMediator,
047           AgoracastField     agoracastField,
048           boolean            isSelected,
049           ChangeListener     changeListener )
050         //////////////////////////////////////////////////////////////////////
051         {
052           NullArgumentException.check ( agoracastMediator );
053    
054           NullArgumentException.check ( agoracastField );
055    
056           NullArgumentException.check (
057             this.changeListener = changeListener );
058    
059           changeEvent = new ChangeEvent ( this );
060    
061           checkBox = new JCheckBox ( );
062    
063           name = StringLib.trimToNull ( agoracastField.getName ( ) );
064    
065           label = new JLabel ( name );
066    
067           String [ ]  choices = agoracastField.getChoices ( );
068    
069           if ( ( choices != null )
070             && ( choices.length > 0 ) )
071           {
072             JComboBox  jComboBox = new JComboBox ( choices );
073    
074             String  value = agoracastField.getValue ( );
075    
076             jComboBox.setSelectedItem ( value );
077    
078             jComboBox.addActionListener ( this );
079    
080             component = jComboBox;
081           }
082           else
083           {
084             JTextField  jTextField = new JTextField ( );
085    
086             jTextField.addKeyListener ( this );
087    
088             String  value = agoracastField.getValue ( );
089    
090             if ( value != null )
091             {
092               jTextField.setText ( value );
093             }
094    
095             component = jTextField;
096    
097             AgoracastLib.setColor ( jTextField, agoracastMediator );
098           }
099    
100           String  descriptor = agoracastField.getSemantic ( );
101    
102           if ( descriptor == null )
103           {
104             descriptor = "";
105           }
106    
107           descriptorLabel = new JLabel ( descriptor );
108    
109           setSelected ( isSelected );
110    
111           checkBox.addItemListener ( this );
112         }
113    
114         //////////////////////////////////////////////////////////////////////
115         //////////////////////////////////////////////////////////////////////
116    
117         public JCheckBox   getCheckBox        ( ) { return checkBox;        }
118    
119         public JLabel      getLabel           ( ) { return label;           }
120    
121         public JComponent  getComponent       ( ) { return component;       }
122    
123         public JLabel      getDescriptorLabel ( ) { return descriptorLabel; }
124    
125         //////////////////////////////////////////////////////////////////////
126         //////////////////////////////////////////////////////////////////////
127    
128         public boolean  isSelected ( )
129         //////////////////////////////////////////////////////////////////////
130         {
131           return checkBox.isSelected ( );
132         }
133    
134         public Pair  getPair ( )
135         //////////////////////////////////////////////////////////////////////
136         {
137           return new Pair ( label.getText ( ), getValue ( ) );
138         }
139    
140         public String  getName ( )
141         //////////////////////////////////////////////////////////////////////
142         {
143           return name;
144         }
145    
146         public String  getValue ( )
147         //////////////////////////////////////////////////////////////////////
148         {
149           String  value = null;
150    
151           if ( component instanceof JTextField )
152           {
153             value = ( ( JTextField ) component ).getText ( );
154           }
155          
156           if ( component instanceof JComboBox )
157           {
158             value
159               = ( String ) ( ( JComboBox ) component ).getSelectedItem ( );
160           }
161    
162           return StringLib.trimToNull ( value );
163         }
164    
165         public synchronized void  setSelected ( boolean  selected )
166         //////////////////////////////////////////////////////////////////////
167         {
168           checkBox.setSelected ( selected );
169    
170           label.setEnabled     ( selected );
171    
172           component.setEnabled ( selected );
173         }
174    
175         public void  setValue ( String  value )
176         //////////////////////////////////////////////////////////////////////
177         {
178           value = ( value != null ) ? value : "";
179    
180           if ( component instanceof JTextField )
181           {
182             ( ( JTextField ) component ).setText ( value );
183           }
184           else if ( component instanceof JComboBox )
185           {
186             ( ( JComboBox ) component ).setSelectedItem ( value );
187           }
188         }
189    
190         //////////////////////////////////////////////////////////////////////
191         //////////////////////////////////////////////////////////////////////
192    
193         public synchronized void  actionPerformed ( ActionEvent  actionEvent )
194         //////////////////////////////////////////////////////////////////////
195         {
196           changeListener.stateChanged ( changeEvent );
197         }
198    
199         public synchronized void  itemStateChanged ( ItemEvent  itemEvent )
200         //////////////////////////////////////////////////////////////////////
201         {
202           boolean  selected = checkBox.isSelected ( );
203    
204           label.setEnabled     ( selected );
205    
206           component.setEnabled ( selected );
207    
208           changeListener.stateChanged ( changeEvent );
209         }
210    
211         public synchronized void  keyTyped ( KeyEvent  keyEvent )
212         //////////////////////////////////////////////////////////////////////
213         {
214           changeListener.stateChanged ( changeEvent );
215         }
216    
217         public void  keyPressed ( KeyEvent  keyEvent )
218         //////////////////////////////////////////////////////////////////////
219         {
220         }
221    
222         public void  keyReleased ( KeyEvent  keyEvent )
223         //////////////////////////////////////////////////////////////////////
224         {
225         }
226    
227         //////////////////////////////////////////////////////////////////////
228         //////////////////////////////////////////////////////////////////////
229         }