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