1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski import java.awt.*;
23*b1cdbd2cSJim Jagielski import java.awt.event.*;
24*b1cdbd2cSJim Jagielski import javax.swing.*;
25*b1cdbd2cSJim Jagielski import javax.swing.border.*;
26*b1cdbd2cSJim Jagielski import java.util.Vector;
27*b1cdbd2cSJim Jagielski import com.sun.star.script.framework.runtime.XScriptContext;
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski public class PostNewsgroup extends JFrame
31*b1cdbd2cSJim Jagielski {
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski 	// Post to newsgroup objects
34*b1cdbd2cSJim Jagielski 	private NewsGroup[] subscribedNewsgroups = null;
35*b1cdbd2cSJim Jagielski 	private XScriptContext xscriptcontext = null;
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski 	private final int FRAMEX = 300;
38*b1cdbd2cSJim Jagielski 	private final int FRAMEY = 300;
39*b1cdbd2cSJim Jagielski 	private final int TEXTBOXWIDTH = 300;
40*b1cdbd2cSJim Jagielski 	private final int TEXTBOXHEIGHT = 24;
41*b1cdbd2cSJim Jagielski 	private final int TEXTAREAHEIGHT = 70;
42*b1cdbd2cSJim Jagielski 	private final int BUTTONWIDTH = 80;
43*b1cdbd2cSJim Jagielski 	private final int BUTTONHEIGHT = 30;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski 	private PostNewsgroup window = null;
46*b1cdbd2cSJim Jagielski 	private JComboBox newsgroupComboBox = null;
47*b1cdbd2cSJim Jagielski 	private JTextField hostTextField = null;
48*b1cdbd2cSJim Jagielski 	private JTextField replyTextField = null;
49*b1cdbd2cSJim Jagielski 	private JTextField subjectTextField = null;
50*b1cdbd2cSJim Jagielski 	private JTextArea commentTextArea = null;
51*b1cdbd2cSJim Jagielski 	private JRadioButton officeHtmlButton = null;
52*b1cdbd2cSJim Jagielski 	private JRadioButton officeButton = null;
53*b1cdbd2cSJim Jagielski 	private JRadioButton htmlButton = null;
54*b1cdbd2cSJim Jagielski 	private JButton postButton = null;
55*b1cdbd2cSJim Jagielski 	private JButton cancelButton = null;
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski 	// JFrame for launch progress dialog
58*b1cdbd2cSJim Jagielski 	private StatusWindow statusWindow = null;
59*b1cdbd2cSJim Jagielski 	private String statusLine = "";
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski 	// Tool tip text
62*b1cdbd2cSJim Jagielski 	private final String newsgroupText = "Newsgroup name";
63*b1cdbd2cSJim Jagielski 	private final String hostText = "Newsgroup host/server name";
64*b1cdbd2cSJim Jagielski 	private final String replyText = "Email address to reply to";
65*b1cdbd2cSJim Jagielski 	private final String subjectText = "Subject title for the mail";
66*b1cdbd2cSJim Jagielski 	private final String commentText = "Additional comment on mail";
67*b1cdbd2cSJim Jagielski 	private final String officeHtmlText = "Post as both Office and HTML attachments";
68*b1cdbd2cSJim Jagielski 	private final String officeText = "Post as Office attachment only";
69*b1cdbd2cSJim Jagielski 	private final String htmlText = "Post as HTML attachment only";
70*b1cdbd2cSJim Jagielski 	private final String postText = "Post to newsgroup";
71*b1cdbd2cSJim Jagielski 	private final String cancelText = "Cancel post to newsgroup";
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski 
post( XScriptContext xsc )74*b1cdbd2cSJim Jagielski 	public void post( XScriptContext xsc )
75*b1cdbd2cSJim Jagielski 	{
76*b1cdbd2cSJim Jagielski 		xscriptcontext = xsc;
77*b1cdbd2cSJim Jagielski 		window = this;
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski 		// create mailcap and mimetypes files (fix for classloader problem)
80*b1cdbd2cSJim Jagielski 		MimeConfiguration.createFiles( xscriptcontext );
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski 		this.setTitle( "Post Document To Newsgroup" );
83*b1cdbd2cSJim Jagielski 		this.setLocation( FRAMEX, FRAMEY );
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski 		this.addFocusListener( new FocusAdapter()
86*b1cdbd2cSJim Jagielski 		{
87*b1cdbd2cSJim Jagielski 			public void focusGained( FocusEvent event )
88*b1cdbd2cSJim Jagielski 			{
89*b1cdbd2cSJim Jagielski 				System.out.println( "Focus gained" );
90*b1cdbd2cSJim Jagielski 				window.update( window.getGraphics() );
91*b1cdbd2cSJim Jagielski 			}
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski 			public void focusLost( FocusEvent event )
94*b1cdbd2cSJim Jagielski                         {
95*b1cdbd2cSJim Jagielski 				System.out.println( "Focus lost" );
96*b1cdbd2cSJim Jagielski                         }
97*b1cdbd2cSJim Jagielski 		});
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 		Container container = getContentPane();
100*b1cdbd2cSJim Jagielski 		container.setLayout( new GridBagLayout() );;
101*b1cdbd2cSJim Jagielski 		GridBagConstraints constraints = new GridBagConstraints();
102*b1cdbd2cSJim Jagielski 		constraints.fill = GridBagConstraints.BOTH;
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski 		JPanel labelPanel = constructLabelPanel();
105*b1cdbd2cSJim Jagielski 		JPanel textPanel = constructTextPanel();
106*b1cdbd2cSJim Jagielski 		JPanel optionPanel = constructOptionPanel();
107*b1cdbd2cSJim Jagielski 		JPanel buttonPanel = constructButtonPanel();
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
110*b1cdbd2cSJim Jagielski 		constraints.gridy = 0;
111*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
112*b1cdbd2cSJim Jagielski 		constraints.gridheight = 3;
113*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 15, 15, 5, 5 );
114*b1cdbd2cSJim Jagielski 		container.add( labelPanel, constraints );
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski 		constraints.gridx = 1;
117*b1cdbd2cSJim Jagielski 		constraints.gridy = 0;
118*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 4;
119*b1cdbd2cSJim Jagielski 		constraints.gridheight = 3;
120*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 15, 5, 5, 15 );
121*b1cdbd2cSJim Jagielski 		container.add( textPanel, constraints );
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
124*b1cdbd2cSJim Jagielski 		constraints.gridy = 3;
125*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 5;
126*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
127*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 15, 5, 15 );
128*b1cdbd2cSJim Jagielski 		container.add( optionPanel, constraints );
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
131*b1cdbd2cSJim Jagielski 		constraints.gridy = 4;
132*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 5;
133*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
134*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 5, 5, 5 );
135*b1cdbd2cSJim Jagielski 		container.add( buttonPanel, constraints );
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski 		this.pack();
138*b1cdbd2cSJim Jagielski 		this.setResizable( false );
139*b1cdbd2cSJim Jagielski 		this.setVisible( true );
140*b1cdbd2cSJim Jagielski 	}
141*b1cdbd2cSJim Jagielski 
142*b1cdbd2cSJim Jagielski 
constructLabelPanel()143*b1cdbd2cSJim Jagielski 	private JPanel constructLabelPanel()
144*b1cdbd2cSJim Jagielski 	{
145*b1cdbd2cSJim Jagielski 		JLabel newsgroupLabel = new JLabel( "Newsgroup:" );
146*b1cdbd2cSJim Jagielski 		JLabel hostLabel = new JLabel( "Host:" );
147*b1cdbd2cSJim Jagielski 		JLabel replyLabel = new JLabel( "Reply:" );
148*b1cdbd2cSJim Jagielski 		JLabel subjectLabel = new JLabel( "Subject:" );
149*b1cdbd2cSJim Jagielski 		JLabel commentLabel = new JLabel( "Comment:" );
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 		newsgroupLabel.setToolTipText( newsgroupText );
152*b1cdbd2cSJim Jagielski 		hostLabel.setToolTipText( hostText );
153*b1cdbd2cSJim Jagielski 		replyLabel.setToolTipText( replyText );
154*b1cdbd2cSJim Jagielski 		subjectLabel.setToolTipText( subjectText );
155*b1cdbd2cSJim Jagielski 		commentLabel.setToolTipText( commentText );
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski 		JPanel newsgroupPanel = new JPanel();
158*b1cdbd2cSJim Jagielski 		newsgroupPanel.setLayout( new BorderLayout() );
159*b1cdbd2cSJim Jagielski 		newsgroupPanel.add( newsgroupLabel, "West" );
160*b1cdbd2cSJim Jagielski 		JPanel hostPanel = new JPanel();
161*b1cdbd2cSJim Jagielski 		hostPanel.setLayout( new BorderLayout() );
162*b1cdbd2cSJim Jagielski 		hostPanel.add( hostLabel, "West" );
163*b1cdbd2cSJim Jagielski 		JPanel replyPanel = new JPanel();
164*b1cdbd2cSJim Jagielski 		replyPanel.setLayout( new BorderLayout() );
165*b1cdbd2cSJim Jagielski 		replyPanel.add( replyLabel, "West" );
166*b1cdbd2cSJim Jagielski 		JPanel subjectPanel = new JPanel();
167*b1cdbd2cSJim Jagielski 		subjectPanel.setLayout( new BorderLayout() );
168*b1cdbd2cSJim Jagielski 		subjectPanel.add( subjectLabel, "West" );
169*b1cdbd2cSJim Jagielski 		JPanel commentPanel = new JPanel();
170*b1cdbd2cSJim Jagielski 		commentPanel.setLayout( new BorderLayout() );
171*b1cdbd2cSJim Jagielski 		commentPanel.add( commentLabel, "West" );
172*b1cdbd2cSJim Jagielski 		JPanel emptyPanel = new JPanel();
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 		final int labelWidth = 80;
175*b1cdbd2cSJim Jagielski 		newsgroupPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
176*b1cdbd2cSJim Jagielski 		hostPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
177*b1cdbd2cSJim Jagielski 		replyPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
178*b1cdbd2cSJim Jagielski 		subjectPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
179*b1cdbd2cSJim Jagielski 		commentPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski 		JPanel panel = new JPanel();
182*b1cdbd2cSJim Jagielski 		panel.setLayout( new GridBagLayout() );
183*b1cdbd2cSJim Jagielski 		GridBagConstraints constraints = new GridBagConstraints();
184*b1cdbd2cSJim Jagielski 		constraints.fill = GridBagConstraints.BOTH;
185*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 5, 5, 5 );
186*b1cdbd2cSJim Jagielski 
187*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
188*b1cdbd2cSJim Jagielski 		constraints.gridy = 0;
189*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
190*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
191*b1cdbd2cSJim Jagielski 		constraints.weightx = constraints.weighty = 0.0;
192*b1cdbd2cSJim Jagielski 		panel.add( newsgroupPanel, constraints );
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
195*b1cdbd2cSJim Jagielski 		constraints.gridy = 1;
196*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
197*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
198*b1cdbd2cSJim Jagielski 		panel.add( hostPanel, constraints );
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
201*b1cdbd2cSJim Jagielski 		constraints.gridy = 2;
202*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
203*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
204*b1cdbd2cSJim Jagielski 		panel.add( replyPanel, constraints );
205*b1cdbd2cSJim Jagielski 
206*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
207*b1cdbd2cSJim Jagielski 		constraints.gridy = 3;
208*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
209*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
210*b1cdbd2cSJim Jagielski 		panel.add( subjectPanel, constraints );
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
213*b1cdbd2cSJim Jagielski 		constraints.gridy = 4;
214*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
215*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
216*b1cdbd2cSJim Jagielski 		panel.add( commentPanel, constraints );
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
219*b1cdbd2cSJim Jagielski 		constraints.gridy = 5;
220*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
221*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
222*b1cdbd2cSJim Jagielski 		constraints.weightx = constraints.weighty = 1.0;
223*b1cdbd2cSJim Jagielski 		panel.add( emptyPanel, constraints );
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 		return panel;
226*b1cdbd2cSJim Jagielski 	}
227*b1cdbd2cSJim Jagielski 
228*b1cdbd2cSJim Jagielski 
constructTextPanel()229*b1cdbd2cSJim Jagielski 	private JPanel constructTextPanel()
230*b1cdbd2cSJim Jagielski 	{
231*b1cdbd2cSJim Jagielski 		hostTextField = new JTextField();
232*b1cdbd2cSJim Jagielski                 hostTextField.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
233*b1cdbd2cSJim Jagielski                 hostTextField.setToolTipText( hostText );
234*b1cdbd2cSJim Jagielski 		hostTextField.setBorder( new EtchedBorder() );
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski 		//optionPanel.setBorder( new TitledBorder( new EtchedBorder(), "Document Format" ) );
237*b1cdbd2cSJim Jagielski 		newsgroupComboBox = getNewsgroupCombo();
238*b1cdbd2cSJim Jagielski 
239*b1cdbd2cSJim Jagielski 		replyTextField = new JTextField();
240*b1cdbd2cSJim Jagielski 		replyTextField.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
241*b1cdbd2cSJim Jagielski 		replyTextField.setToolTipText( replyText );
242*b1cdbd2cSJim Jagielski 		replyTextField.setBorder( new EtchedBorder() );
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski 		subjectTextField = new JTextField();
245*b1cdbd2cSJim Jagielski 		subjectTextField.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
246*b1cdbd2cSJim Jagielski 		subjectTextField.setToolTipText( subjectText );
247*b1cdbd2cSJim Jagielski 		subjectTextField.setBorder( new EtchedBorder() );
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 		commentTextArea = new JTextArea();
250*b1cdbd2cSJim Jagielski 		commentTextArea.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTAREAHEIGHT ) );
251*b1cdbd2cSJim Jagielski 		commentTextArea.setToolTipText( commentText );
252*b1cdbd2cSJim Jagielski 		commentTextArea.setBorder( new EtchedBorder() );
253*b1cdbd2cSJim Jagielski 
254*b1cdbd2cSJim Jagielski 		JPanel panel = new JPanel();
255*b1cdbd2cSJim Jagielski 		panel.setLayout( new GridBagLayout() );
256*b1cdbd2cSJim Jagielski 		GridBagConstraints constraints = new GridBagConstraints();
257*b1cdbd2cSJim Jagielski 		constraints.fill = GridBagConstraints.BOTH;
258*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 5, 5, 5 );
259*b1cdbd2cSJim Jagielski 
260*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
261*b1cdbd2cSJim Jagielski 		constraints.gridy = 0;
262*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
263*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
264*b1cdbd2cSJim Jagielski 		panel.add( newsgroupComboBox, constraints );
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
267*b1cdbd2cSJim Jagielski 		constraints.gridy = 1;
268*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
269*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
270*b1cdbd2cSJim Jagielski 		panel.add( hostTextField, constraints );
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
273*b1cdbd2cSJim Jagielski 		constraints.gridy = 2;
274*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
275*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
276*b1cdbd2cSJim Jagielski 		panel.add( replyTextField, constraints );
277*b1cdbd2cSJim Jagielski 
278*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
279*b1cdbd2cSJim Jagielski 		constraints.gridy = 3;
280*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
281*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
282*b1cdbd2cSJim Jagielski 		panel.add( subjectTextField, constraints );
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
285*b1cdbd2cSJim Jagielski 		constraints.gridy = 4;
286*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
287*b1cdbd2cSJim Jagielski 		constraints.gridheight = 2;
288*b1cdbd2cSJim Jagielski 		panel.add( commentTextArea, constraints );
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 		return panel;
291*b1cdbd2cSJim Jagielski 	}
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski 
getNewsgroupCombo()294*b1cdbd2cSJim Jagielski 	private JComboBox getNewsgroupCombo()
295*b1cdbd2cSJim Jagielski 	{
296*b1cdbd2cSJim Jagielski 		newsgroupComboBox = new JComboBox();
297*b1cdbd2cSJim Jagielski 		//newsgroupComboBox.setBorder( new EtchedBorder() );
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski    		newsgroupComboBox.addActionListener(new ActionListener()
300*b1cdbd2cSJim Jagielski    		{
301*b1cdbd2cSJim Jagielski     			public void actionPerformed(ActionEvent e)
302*b1cdbd2cSJim Jagielski     			{
303*b1cdbd2cSJim Jagielski 				// when newsgroup is selected
304*b1cdbd2cSJim Jagielski 				if( subscribedNewsgroups != null )
305*b1cdbd2cSJim Jagielski 				{
306*b1cdbd2cSJim Jagielski 					int position = newsgroupComboBox.getSelectedIndex();
307*b1cdbd2cSJim Jagielski 					if( position != -1 )
308*b1cdbd2cSJim Jagielski 					{
309*b1cdbd2cSJim Jagielski 						hostTextField.setText( subscribedNewsgroups[ position ].getHostName() );
310*b1cdbd2cSJim Jagielski 						newsgroupComboBox.setToolTipText( "Newsgroup name: " + subscribedNewsgroups[ position ].getNewsgroupName() + "  (Host name: " + subscribedNewsgroups[ position ].getHostName() + ")" );
311*b1cdbd2cSJim Jagielski 					}
312*b1cdbd2cSJim Jagielski 				}
313*b1cdbd2cSJim Jagielski 			}
314*b1cdbd2cSJim Jagielski 		});
315*b1cdbd2cSJim Jagielski 
316*b1cdbd2cSJim Jagielski 		NewsGroup groupToSend = null;
317*b1cdbd2cSJim Jagielski 		SubscribedNewsgroups newsgroups = new SubscribedNewsgroups();
318*b1cdbd2cSJim Jagielski 		subscribedNewsgroups = newsgroups.getNewsGroups();
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski 		// Test for no .mozilla or no subscribed newsgroups
321*b1cdbd2cSJim Jagielski 		// subscribedNewsgroups = null;
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 		if( subscribedNewsgroups == null )
324*b1cdbd2cSJim Jagielski 		{
325*b1cdbd2cSJim Jagielski 			//System.out.println( "Couldn't find any subscibed newsgroups in .mozilla" );
326*b1cdbd2cSJim Jagielski 			JOptionPane.showMessageDialog( window, "No subscribed newsgroups found in mozilla/netscape profile \nPlease enter newsgroup and host name",
327*b1cdbd2cSJim Jagielski 							"Newsgroups Information", JOptionPane.INFORMATION_MESSAGE );
328*b1cdbd2cSJim Jagielski 		}
329*b1cdbd2cSJim Jagielski 		else
330*b1cdbd2cSJim Jagielski 		{
331*b1cdbd2cSJim Jagielski 			// Copy all newsgroups into a vector for comparison
332*b1cdbd2cSJim Jagielski 			// Alter entries (to include host name) if duplication is found
333*b1cdbd2cSJim Jagielski 			Vector vector = new Vector( subscribedNewsgroups.length );
334*b1cdbd2cSJim Jagielski 			for(int i=0; i < subscribedNewsgroups.length; i++ )
335*b1cdbd2cSJim Jagielski 			{
336*b1cdbd2cSJim Jagielski 				vector.add( subscribedNewsgroups[i].getNewsgroupName() );
337*b1cdbd2cSJim Jagielski 			}
338*b1cdbd2cSJim Jagielski 			// Compare and alter
339*b1cdbd2cSJim Jagielski 			for(int i=0; i < subscribedNewsgroups.length; i++ )
340*b1cdbd2cSJim Jagielski 			{
341*b1cdbd2cSJim Jagielski 				// check if combo box already has a newsgroup with same name
342*b1cdbd2cSJim Jagielski 				// then add host name to differentiate
343*b1cdbd2cSJim Jagielski 				for(int j=0; j < subscribedNewsgroups.length; j++ )
344*b1cdbd2cSJim Jagielski 				{
345*b1cdbd2cSJim Jagielski 					if( j != i && subscribedNewsgroups[j].getNewsgroupName().equalsIgnoreCase( subscribedNewsgroups[i].getNewsgroupName() ) )
346*b1cdbd2cSJim Jagielski 					{
347*b1cdbd2cSJim Jagielski 						vector.set( j, subscribedNewsgroups[j].getNewsgroupName() + "  (" + subscribedNewsgroups[j].getHostName() + ")" );
348*b1cdbd2cSJim Jagielski 						vector.set( i, subscribedNewsgroups[i].getNewsgroupName() + "  (" + subscribedNewsgroups[i].getHostName() + ")" );
349*b1cdbd2cSJim Jagielski 					}
350*b1cdbd2cSJim Jagielski 				}
351*b1cdbd2cSJim Jagielski 			}
352*b1cdbd2cSJim Jagielski 			// Copy converted newsgroups from vector to combo box
353*b1cdbd2cSJim Jagielski 			for(int i=0; i < subscribedNewsgroups.length; i++ )
354*b1cdbd2cSJim Jagielski 			{
355*b1cdbd2cSJim Jagielski 				newsgroupComboBox.addItem( vector.elementAt(i) );
356*b1cdbd2cSJim Jagielski 			}
357*b1cdbd2cSJim Jagielski 		}// else
358*b1cdbd2cSJim Jagielski 
359*b1cdbd2cSJim Jagielski 		newsgroupComboBox.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
360*b1cdbd2cSJim Jagielski 		newsgroupComboBox.setEditable( true );
361*b1cdbd2cSJim Jagielski 
362*b1cdbd2cSJim Jagielski 		return newsgroupComboBox;
363*b1cdbd2cSJim Jagielski 	}
364*b1cdbd2cSJim Jagielski 
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski 
constructOptionPanel()367*b1cdbd2cSJim Jagielski 	private JPanel constructOptionPanel()
368*b1cdbd2cSJim Jagielski 	{
369*b1cdbd2cSJim Jagielski 		officeHtmlButton = new JRadioButton( "Office and HTML", true );
370*b1cdbd2cSJim Jagielski 		officeHtmlButton.setToolTipText( officeHtmlText );
371*b1cdbd2cSJim Jagielski 
372*b1cdbd2cSJim Jagielski 		officeButton = new JRadioButton( "Office" );
373*b1cdbd2cSJim Jagielski 		officeButton.setToolTipText( officeText );
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski 		htmlButton = new JRadioButton( "HTML" );
376*b1cdbd2cSJim Jagielski 		htmlButton.setToolTipText( htmlText );
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 		JRadioButton[] rbuttons = { officeHtmlButton, officeButton, htmlButton };
379*b1cdbd2cSJim Jagielski 		ButtonGroup radioButtonGroup = new ButtonGroup();
380*b1cdbd2cSJim Jagielski 		for( int i=0; i < rbuttons.length; i++ )
381*b1cdbd2cSJim Jagielski 		{
382*b1cdbd2cSJim Jagielski 			radioButtonGroup.add( rbuttons[i] );
383*b1cdbd2cSJim Jagielski 		}
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski 		JPanel optionPanel = new JPanel();
386*b1cdbd2cSJim Jagielski 		//optionPanel.setLayout( new GridLayout( 1, 3, 20, 0 ) );
387*b1cdbd2cSJim Jagielski 		optionPanel.setBorder( new TitledBorder( new EtchedBorder(), "Document Format" ) );
388*b1cdbd2cSJim Jagielski 		optionPanel.setLayout( new GridBagLayout() );
389*b1cdbd2cSJim Jagielski 		GridBagConstraints constraints = new GridBagConstraints();
390*b1cdbd2cSJim Jagielski 		constraints.fill = GridBagConstraints.BOTH;
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
393*b1cdbd2cSJim Jagielski                 constraints.gridy = 0;
394*b1cdbd2cSJim Jagielski                 constraints.gridwidth = 1;
395*b1cdbd2cSJim Jagielski                 constraints.gridheight = 1;
396*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 5, 5, 30 );
397*b1cdbd2cSJim Jagielski                 optionPanel.add( officeHtmlButton, constraints );
398*b1cdbd2cSJim Jagielski 
399*b1cdbd2cSJim Jagielski 		constraints.gridx = 1;
400*b1cdbd2cSJim Jagielski                 constraints.gridy = 0;
401*b1cdbd2cSJim Jagielski                 constraints.gridwidth = 1;
402*b1cdbd2cSJim Jagielski                 constraints.gridheight = 1;
403*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 20, 5, 30 );
404*b1cdbd2cSJim Jagielski                 optionPanel.add( officeButton, constraints );
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 		constraints.gridx = 2;
407*b1cdbd2cSJim Jagielski                 constraints.gridy = 0;
408*b1cdbd2cSJim Jagielski                 constraints.gridwidth = 1;
409*b1cdbd2cSJim Jagielski                 constraints.gridheight = 1;
410*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 20, 5, 5 );
411*b1cdbd2cSJim Jagielski                 optionPanel.add( htmlButton, constraints );
412*b1cdbd2cSJim Jagielski 
413*b1cdbd2cSJim Jagielski                 return optionPanel;
414*b1cdbd2cSJim Jagielski 	}
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 
417*b1cdbd2cSJim Jagielski 
sendingActions()418*b1cdbd2cSJim Jagielski 	public boolean sendingActions()
419*b1cdbd2cSJim Jagielski 	{
420*b1cdbd2cSJim Jagielski 			// posting actions
421*b1cdbd2cSJim Jagielski 			// Validate the data
422*b1cdbd2cSJim Jagielski 			if( isValidData() )
423*b1cdbd2cSJim Jagielski 			{
424*b1cdbd2cSJim Jagielski 				// Create status window
425*b1cdbd2cSJim Jagielski 				StatusWindow statusWindow = new StatusWindow( window,  "Posting to Newsgroup", FRAMEX, FRAMEY );
426*b1cdbd2cSJim Jagielski 
427*b1cdbd2cSJim Jagielski 				statusWindow.setVisible( true );
428*b1cdbd2cSJim Jagielski 				//statusWindow.requestFocusInWindow();
429*b1cdbd2cSJim Jagielski 				statusLine = "Ready to send...";
430*b1cdbd2cSJim Jagielski 				statusWindow.setStatus( 0, statusLine );
431*b1cdbd2cSJim Jagielski 
432*b1cdbd2cSJim Jagielski 				// Get the boolean values for HTML/Office document
433*b1cdbd2cSJim Jagielski 				// params: ( XScriptContext, StatusWindow, html document, office document )
434*b1cdbd2cSJim Jagielski 
435*b1cdbd2cSJim Jagielski 				boolean html = false;
436*b1cdbd2cSJim Jagielski 				boolean office = false;
437*b1cdbd2cSJim Jagielski 				if( officeHtmlButton.isSelected() ) { html = true; office = true; }
438*b1cdbd2cSJim Jagielski 				if( officeButton.isSelected() ) { office = true; html = false; }
439*b1cdbd2cSJim Jagielski 				if( htmlButton.isSelected() ) { html = true; office = false; }
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski 				OfficeAttachment officeAttach = new OfficeAttachment( xscriptcontext, statusWindow, html, office );
442*b1cdbd2cSJim Jagielski 
443*b1cdbd2cSJim Jagielski 				statusLine = "Getting user input";
444*b1cdbd2cSJim Jagielski 				statusWindow.setStatus( 2, statusLine );
445*b1cdbd2cSJim Jagielski 				// Get replyto, subject, comment from textboxes
446*b1cdbd2cSJim Jagielski 				String replyto = replyTextField.getText();
447*b1cdbd2cSJim Jagielski 				String subject = subjectTextField.getText();
448*b1cdbd2cSJim Jagielski 				String comment = commentTextArea.getText();
449*b1cdbd2cSJim Jagielski 
450*b1cdbd2cSJim Jagielski 				// Get newsgroup from combo box (corresponding position)
451*b1cdbd2cSJim Jagielski 				String host = "";
452*b1cdbd2cSJim Jagielski 				String group = "";
453*b1cdbd2cSJim Jagielski 				int position = newsgroupComboBox.getSelectedIndex();
454*b1cdbd2cSJim Jagielski 				if( subscribedNewsgroups == null || position == -1 )
455*b1cdbd2cSJim Jagielski 				{
456*b1cdbd2cSJim Jagielski 					host = hostTextField.getText();
457*b1cdbd2cSJim Jagielski 					group = newsgroupComboBox.getSelectedItem().toString();
458*b1cdbd2cSJim Jagielski 				}
459*b1cdbd2cSJim Jagielski 				else
460*b1cdbd2cSJim Jagielski 				{
461*b1cdbd2cSJim Jagielski 					//int position = newsgroupComboBox.getSelectedIndex();
462*b1cdbd2cSJim Jagielski 					host = subscribedNewsgroups[ position ].getHostName();
463*b1cdbd2cSJim Jagielski 					group = subscribedNewsgroups[ position ].getNewsgroupName();
464*b1cdbd2cSJim Jagielski 				}
465*b1cdbd2cSJim Jagielski 
466*b1cdbd2cSJim Jagielski 				statusLine = "Creating sender object";
467*b1cdbd2cSJim Jagielski 				statusWindow.setStatus( 3, statusLine );
468*b1cdbd2cSJim Jagielski 				Sender sender = new Sender( statusWindow, officeAttach, replyto, subject, comment, host, group );
469*b1cdbd2cSJim Jagielski 				if( !sender.sendMail() )
470*b1cdbd2cSJim Jagielski 				{
471*b1cdbd2cSJim Jagielski 					//System.out.println( "Should end here (?)" );
472*b1cdbd2cSJim Jagielski 					statusWindow.enableCancelButton( true );
473*b1cdbd2cSJim Jagielski 					officeAttach.cleanUpOnError();
474*b1cdbd2cSJim Jagielski 					return false;
475*b1cdbd2cSJim Jagielski 				}
476*b1cdbd2cSJim Jagielski 
477*b1cdbd2cSJim Jagielski 				statusLine = "Send is complete";
478*b1cdbd2cSJim Jagielski 				statusWindow.setStatus( 14, statusLine );
479*b1cdbd2cSJim Jagielski 			}
480*b1cdbd2cSJim Jagielski 			else
481*b1cdbd2cSJim Jagielski 			{
482*b1cdbd2cSJim Jagielski 				//System.out.println( "Non valid data" );
483*b1cdbd2cSJim Jagielski 				return false;
484*b1cdbd2cSJim Jagielski 			}
485*b1cdbd2cSJim Jagielski 			return true;
486*b1cdbd2cSJim Jagielski 	}
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski 
constructButtonPanel()489*b1cdbd2cSJim Jagielski 	private JPanel constructButtonPanel()
490*b1cdbd2cSJim Jagielski 	{
491*b1cdbd2cSJim Jagielski 		Action postAction = new AbstractAction() {
492*b1cdbd2cSJim Jagielski 			public void actionPerformed( ActionEvent event ) {
493*b1cdbd2cSJim Jagielski 				// posting actions
494*b1cdbd2cSJim Jagielski 				sendingActions();
495*b1cdbd2cSJim Jagielski 			}// actionPerformed
496*b1cdbd2cSJim Jagielski 		};
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski 		Action cancelAction = new AbstractAction() {
499*b1cdbd2cSJim Jagielski                         public void actionPerformed( ActionEvent event ) {
500*b1cdbd2cSJim Jagielski                                 // cancelling actions
501*b1cdbd2cSJim Jagielski 				window.dispose();
502*b1cdbd2cSJim Jagielski                         }
503*b1cdbd2cSJim Jagielski                 };
504*b1cdbd2cSJim Jagielski 
505*b1cdbd2cSJim Jagielski 		postButton = new JButton();
506*b1cdbd2cSJim Jagielski 		postButton.setAction( postAction );
507*b1cdbd2cSJim Jagielski 		postButton.setToolTipText( postText );
508*b1cdbd2cSJim Jagielski 		postButton.setText( "Post" );
509*b1cdbd2cSJim Jagielski 		postButton.setPreferredSize( new Dimension( BUTTONWIDTH + 20, BUTTONHEIGHT ) );
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski 		cancelButton = new JButton();
512*b1cdbd2cSJim Jagielski 		cancelButton.setAction( cancelAction );
513*b1cdbd2cSJim Jagielski 		cancelButton.setToolTipText( cancelText );
514*b1cdbd2cSJim Jagielski 		cancelButton.setText( "Cancel" );
515*b1cdbd2cSJim Jagielski 		cancelButton.setPreferredSize( new Dimension( BUTTONWIDTH + 20, BUTTONHEIGHT ) );
516*b1cdbd2cSJim Jagielski 
517*b1cdbd2cSJim Jagielski 		JSeparator sep = new JSeparator( SwingConstants.HORIZONTAL );
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski 		JPanel buttonPanel = new JPanel();
520*b1cdbd2cSJim Jagielski 		buttonPanel.setLayout( new GridBagLayout() );
521*b1cdbd2cSJim Jagielski 		GridBagConstraints constraints = new GridBagConstraints();
522*b1cdbd2cSJim Jagielski 		constraints.fill = GridBagConstraints.BOTH;
523*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 5, 5, 5 );
524*b1cdbd2cSJim Jagielski 
525*b1cdbd2cSJim Jagielski 		JPanel emptyPanel1 = new JPanel();
526*b1cdbd2cSJim Jagielski 		emptyPanel1.setPreferredSize( new Dimension( BUTTONWIDTH, BUTTONHEIGHT ) );
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski 		JPanel emptyPanel2 = new JPanel();
529*b1cdbd2cSJim Jagielski 		emptyPanel2.setPreferredSize( new Dimension( BUTTONWIDTH, BUTTONHEIGHT ) );
530*b1cdbd2cSJim Jagielski 
531*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
532*b1cdbd2cSJim Jagielski                 constraints.gridy = 0;
533*b1cdbd2cSJim Jagielski                 constraints.gridwidth = 4;
534*b1cdbd2cSJim Jagielski                 constraints.gridheight = 1;
535*b1cdbd2cSJim Jagielski                 buttonPanel.add( sep, constraints );
536*b1cdbd2cSJim Jagielski 
537*b1cdbd2cSJim Jagielski 		constraints.gridx = 0;
538*b1cdbd2cSJim Jagielski                 constraints.gridy = 1;
539*b1cdbd2cSJim Jagielski                 constraints.gridwidth = 1;
540*b1cdbd2cSJim Jagielski                 constraints.gridheight = 1;
541*b1cdbd2cSJim Jagielski                 buttonPanel.add( emptyPanel1, constraints );
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski                 constraints.gridx = 1;
544*b1cdbd2cSJim Jagielski                 constraints.gridy = 1;
545*b1cdbd2cSJim Jagielski                 constraints.gridwidth = 1;
546*b1cdbd2cSJim Jagielski                 constraints.gridheight = 1;
547*b1cdbd2cSJim Jagielski                 buttonPanel.add( emptyPanel2, constraints );
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski 		constraints.gridx = 2;
550*b1cdbd2cSJim Jagielski 		constraints.gridy = 1;
551*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
552*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
553*b1cdbd2cSJim Jagielski 		buttonPanel.add( postButton, constraints );
554*b1cdbd2cSJim Jagielski 
555*b1cdbd2cSJim Jagielski 		constraints.gridx = 3;
556*b1cdbd2cSJim Jagielski 		constraints.gridy = 1;
557*b1cdbd2cSJim Jagielski 		constraints.gridwidth = 1;
558*b1cdbd2cSJim Jagielski 		constraints.gridheight = 1;
559*b1cdbd2cSJim Jagielski 		constraints.insets = new Insets( 5, 5, 5, 0 );
560*b1cdbd2cSJim Jagielski 		buttonPanel.add( cancelButton, constraints );
561*b1cdbd2cSJim Jagielski 
562*b1cdbd2cSJim Jagielski                 return buttonPanel;
563*b1cdbd2cSJim Jagielski 	}
564*b1cdbd2cSJim Jagielski 
565*b1cdbd2cSJim Jagielski 
enableButtons( boolean enable )566*b1cdbd2cSJim Jagielski 	public void enableButtons( boolean enable )
567*b1cdbd2cSJim Jagielski 	{
568*b1cdbd2cSJim Jagielski 		if( enable )
569*b1cdbd2cSJim Jagielski 		{
570*b1cdbd2cSJim Jagielski 			postButton.setEnabled( true );
571*b1cdbd2cSJim Jagielski 			cancelButton.setEnabled( true );
572*b1cdbd2cSJim Jagielski 		}
573*b1cdbd2cSJim Jagielski 		else
574*b1cdbd2cSJim Jagielski 		{
575*b1cdbd2cSJim Jagielski 			postButton.setEnabled( false );
576*b1cdbd2cSJim Jagielski 			cancelButton.setEnabled( false );
577*b1cdbd2cSJim Jagielski 		}
578*b1cdbd2cSJim Jagielski 	}
579*b1cdbd2cSJim Jagielski 
580*b1cdbd2cSJim Jagielski 
isValidData()581*b1cdbd2cSJim Jagielski 	private boolean isValidData()
582*b1cdbd2cSJim Jagielski 	{
583*b1cdbd2cSJim Jagielski 		// newsgroupComboBox must not be blank (format? dots and whitespace)
584*b1cdbd2cSJim Jagielski 		String newsgroupString = "";
585*b1cdbd2cSJim Jagielski 		int position = newsgroupComboBox.getSelectedIndex();
586*b1cdbd2cSJim Jagielski 		if( subscribedNewsgroups == null || position == -1 )
587*b1cdbd2cSJim Jagielski 		{
588*b1cdbd2cSJim Jagielski 			newsgroupString = newsgroupComboBox.getSelectedItem().toString();
589*b1cdbd2cSJim Jagielski 		}
590*b1cdbd2cSJim Jagielski 		else
591*b1cdbd2cSJim Jagielski 		{
592*b1cdbd2cSJim Jagielski 			//int position = newsgroupComboBox.getSelectedIndex();
593*b1cdbd2cSJim Jagielski 			newsgroupString = subscribedNewsgroups[ position ].getNewsgroupName();
594*b1cdbd2cSJim Jagielski 		}
595*b1cdbd2cSJim Jagielski 		if( newsgroupString.length() == 0 )
596*b1cdbd2cSJim Jagielski 		{
597*b1cdbd2cSJim Jagielski 			//System.out.println( "Please enter a newsgroup name" );
598*b1cdbd2cSJim Jagielski 			newsgroupComboBox.requestFocus();
599*b1cdbd2cSJim Jagielski 			JOptionPane.showMessageDialog( window, "Please enter a newsgroup name", "Input Error", JOptionPane.ERROR_MESSAGE );
600*b1cdbd2cSJim Jagielski 			return false;
601*b1cdbd2cSJim Jagielski 		}
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski 
604*b1cdbd2cSJim Jagielski 		// hostTextField must not be blank (format?)
605*b1cdbd2cSJim Jagielski 		String  hostString = hostTextField.getText();
606*b1cdbd2cSJim Jagielski                 if( hostString.length() == 0 )
607*b1cdbd2cSJim Jagielski                 {
608*b1cdbd2cSJim Jagielski 			//System.out.println( "Please enter a hostname" );
609*b1cdbd2cSJim Jagielski 			hostTextField.requestFocus();
610*b1cdbd2cSJim Jagielski 			JOptionPane.showMessageDialog( window, "Please enter a hostname", "Input Error", JOptionPane.ERROR_MESSAGE );
611*b1cdbd2cSJim Jagielski                         return false;
612*b1cdbd2cSJim Jagielski                 }
613*b1cdbd2cSJim Jagielski 
614*b1cdbd2cSJim Jagielski 
615*b1cdbd2cSJim Jagielski 		// replyTextField must have <string>@<string>.<string>
616*b1cdbd2cSJim Jagielski 		// (string at least 2 chars long)
617*b1cdbd2cSJim Jagielski 		// consider <s>.<s>@<s>.<s>.<s> format? (array of dot positons?)
618*b1cdbd2cSJim Jagielski 		String replyString = replyTextField.getText();
619*b1cdbd2cSJim Jagielski 		int atPos = replyString.indexOf( "@" );
620*b1cdbd2cSJim Jagielski 		int dotPos = replyString.lastIndexOf( "." );
621*b1cdbd2cSJim Jagielski 		int length = replyString.length();
622*b1cdbd2cSJim Jagielski 		//System.out.println( "length: " + length + "\n atPos: " + atPos + "\n dotPos: " + dotPos );
623*b1cdbd2cSJim Jagielski 		if( length == 0 || atPos == -1 || dotPos == -1 || atPos < 2 || dotPos < atPos || dotPos + 2 == length || atPos + 2 == dotPos || atPos != replyString.lastIndexOf( "@" ) || replyString.indexOf(" ") != -1 )
624*b1cdbd2cSJim Jagielski 		{
625*b1cdbd2cSJim Jagielski 			//System.out.println( "Please enter a valid reply to email address" );
626*b1cdbd2cSJim Jagielski 			replyTextField.requestFocus();
627*b1cdbd2cSJim Jagielski 			JOptionPane.showMessageDialog( window, "Please enter a valid reply to email address", "Input Error", JOptionPane.ERROR_MESSAGE );
628*b1cdbd2cSJim Jagielski 			return false;
629*b1cdbd2cSJim Jagielski 		}
630*b1cdbd2cSJim Jagielski 
631*b1cdbd2cSJim Jagielski 
632*b1cdbd2cSJim Jagielski 		// subjectTextField must not be blank?
633*b1cdbd2cSJim Jagielski 		String subjectString = subjectTextField.getText();
634*b1cdbd2cSJim Jagielski 		if( subjectString.length() == 0 )
635*b1cdbd2cSJim Jagielski 		{
636*b1cdbd2cSJim Jagielski 			//System.out.println( "Please enter subject title" );
637*b1cdbd2cSJim Jagielski 			subjectTextField.requestFocus();
638*b1cdbd2cSJim Jagielski 			JOptionPane.showMessageDialog( window, "Please enter subject title", "Input Error", JOptionPane.ERROR_MESSAGE );
639*b1cdbd2cSJim Jagielski 			return false;
640*b1cdbd2cSJim Jagielski 		}
641*b1cdbd2cSJim Jagielski 
642*b1cdbd2cSJim Jagielski 		// details are valid
643*b1cdbd2cSJim Jagielski 		return true;
644*b1cdbd2cSJim Jagielski 	}
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski }
647