001 package com.croftsoft.apps.agoracast.c2p;
002
003 import java.awt.*;
004 import java.awt.event.*;
005 import javax.swing.*;
006 import javax.swing.border.*;
007
008 import com.croftsoft.core.gui.ButtonPanel2;
009 import com.croftsoft.core.gui.LabeledFieldsPanel2;
010 import com.croftsoft.core.lang.NullArgumentException;
011 import com.croftsoft.core.lang.Pair;
012 import com.croftsoft.core.lang.StringLib;
013 import com.croftsoft.core.net.news.UsenetMessage;
014
015 /*********************************************************************
016 * Queries the user for message subject and description.
017 *
018 * <p />
019 *
020 * @version
021 * 2001-10-12
022 * @since
023 * 2001-07-25
024 * @author
025 * <a href="http://croftsoft.com/">David Wallace Croft</a>
026 *********************************************************************/
027
028 public final class AgoracastTextPanel
029 extends JPanel
030 implements ActionListener
031 //////////////////////////////////////////////////////////////////////
032 //////////////////////////////////////////////////////////////////////
033 {
034
035 private static final String SUBJECT_FIELD_NAME = "Subject";
036
037 private final AgoracastMediator agoracastMediator;
038
039 private final AgoracastPostPanel agoracastPostPanel;
040
041 private final LabeledFieldsPanel2 labeledFieldsPanel2;
042
043 private final JTextArea jTextArea;
044
045 private final JButton cancelButton;
046
047 private final JButton postButton;
048
049 //
050
051 private UsenetMessage usenetMessage;
052
053 //////////////////////////////////////////////////////////////////////
054 //////////////////////////////////////////////////////////////////////
055
056 public AgoracastTextPanel (
057 AgoracastMediator agoracastMediator,
058 AgoracastPostPanel agoracastPostPanel )
059 //////////////////////////////////////////////////////////////////////
060 {
061 super ( new BorderLayout ( ), true ); // isDoubleBuffered
062
063 NullArgumentException.check (
064 this.agoracastMediator = agoracastMediator );
065
066 NullArgumentException.check (
067 this.agoracastPostPanel = agoracastPostPanel );
068
069 AgoracastLib.setColor ( this, agoracastMediator );
070
071 JPanel centerPanel = new JPanel ( new BorderLayout ( ), true );
072
073 labeledFieldsPanel2 = new LabeledFieldsPanel2 (
074 new Pair [ ] { new Pair ( SUBJECT_FIELD_NAME, null ) },
075 agoracastMediator.getPanelBackgroundColor ( ),
076 agoracastMediator.getTextFieldBackgroundColor ( ) );
077
078 centerPanel.add ( labeledFieldsPanel2, BorderLayout.NORTH );
079
080 centerPanel.add ( new JScrollPane ( jTextArea = new JTextArea ( ) ),
081 BorderLayout.CENTER );
082
083 add ( centerPanel, BorderLayout.CENTER );
084
085 jTextArea.setBorder ( new EmptyBorder ( 4, 4, 4, 4 ) );
086
087 cancelButton = new JButton ( "Cancel" );
088
089 cancelButton.addActionListener ( this );
090
091 postButton = new JButton ( "Post" );
092
093 postButton.addActionListener ( this );
094
095 add ( new ButtonPanel2 ( new JButton [ ] {
096 cancelButton, postButton } ), BorderLayout.SOUTH );
097
098 add ( new JLabel ( AgoracastConstants.DESCRIBE_TEXT ),
099 BorderLayout.NORTH );
100 }
101
102 //////////////////////////////////////////////////////////////////////
103 //////////////////////////////////////////////////////////////////////
104
105 public synchronized void setUsenetMessage (
106 UsenetMessage usenetMessage )
107 //////////////////////////////////////////////////////////////////////
108 {
109 NullArgumentException.check ( this.usenetMessage = usenetMessage );
110
111 String subject
112 = usenetMessage.getHeader ( UsenetMessage.HEADER_SUBJECT );
113
114 if ( subject == null )
115 {
116 subject = "";
117 }
118
119 labeledFieldsPanel2.setText (
120 new Pair ( SUBJECT_FIELD_NAME, subject ) );
121
122 String defaultDescription = StringLib.trimToNull (
123 agoracastMediator.getDefaultDescription ( ) );
124
125 if ( defaultDescription != null )
126 {
127 jTextArea.setText ( defaultDescription );
128 }
129 else
130 {
131 jTextArea.setText ( "" );
132 }
133 }
134
135 public synchronized void actionPerformed ( ActionEvent actionEvent )
136 //////////////////////////////////////////////////////////////////////
137 {
138 Object source = actionEvent.getSource ( );
139
140 if ( source == cancelButton )
141 {
142 agoracastPostPanel.cancel ( );
143 }
144 else if ( source == postButton )
145 {
146 String subject
147 = labeledFieldsPanel2.getText ( SUBJECT_FIELD_NAME );
148
149 if ( ( subject != null )
150 && !"".equals ( subject.trim ( ) ) )
151 {
152 subject = AgoracastConstants.SUBJECT_PREFIX + " " + subject;
153 }
154 else
155 {
156 subject = AgoracastConstants.SUBJECT_PREFIX;
157 }
158
159 usenetMessage.setHeader ( UsenetMessage.HEADER_SUBJECT, subject );
160
161 StringBuffer stringBuffer
162 = new StringBuffer ( usenetMessage.getBody ( ) );
163
164 String text = StringLib.trimToNull ( jTextArea.getText ( ) );
165
166 if ( text != null )
167 {
168 stringBuffer.append ( "\r\n" );
169
170 stringBuffer.append ( text );
171
172 stringBuffer.append ( "\r\n" );
173 }
174
175 stringBuffer.append ( "\r\n" );
176
177 stringBuffer.append ( AgoracastConstants.FOOTER );
178
179 usenetMessage.setBody ( stringBuffer.toString ( ) );
180
181 agoracastPostPanel.confirm ( usenetMessage );
182 }
183 }
184
185 //////////////////////////////////////////////////////////////////////
186 //////////////////////////////////////////////////////////////////////
187 }