summaryrefslogtreecommitdiff
path: root/scripting/examples/java/Newsgroup/PostNewsgroup.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/examples/java/Newsgroup/PostNewsgroup.java')
-rw-r--r--scripting/examples/java/Newsgroup/PostNewsgroup.java625
1 files changed, 625 insertions, 0 deletions
diff --git a/scripting/examples/java/Newsgroup/PostNewsgroup.java b/scripting/examples/java/Newsgroup/PostNewsgroup.java
new file mode 100644
index 000000000000..a88b1d3e8844
--- /dev/null
+++ b/scripting/examples/java/Newsgroup/PostNewsgroup.java
@@ -0,0 +1,625 @@
+import java.awt.*;
+import java.awt.event.*;
+import javax.swing.*;
+import javax.swing.border.*;
+import java.util.Vector;
+import com.sun.star.script.framework.runtime.XScriptContext;
+
+
+public class PostNewsgroup extends JFrame
+{
+
+ // Post to newsgroup objects
+ private NewsGroup[] subscribedNewsgroups = null;
+ private XScriptContext xscriptcontext = null;
+
+ private final int FRAMEX = 300;
+ private final int FRAMEY = 300;
+ private final int TEXTBOXWIDTH = 300;
+ private final int TEXTBOXHEIGHT = 24;
+ private final int TEXTAREAHEIGHT = 70;
+ private final int BUTTONWIDTH = 80;
+ private final int BUTTONHEIGHT = 30;
+
+ private PostNewsgroup window = null;
+ private JComboBox newsgroupComboBox = null;
+ private JTextField hostTextField = null;
+ private JTextField replyTextField = null;
+ private JTextField subjectTextField = null;
+ private JTextArea commentTextArea = null;
+ private JRadioButton officeHtmlButton = null;
+ private JRadioButton officeButton = null;
+ private JRadioButton htmlButton = null;
+ private JButton postButton = null;
+ private JButton cancelButton = null;
+
+ // JFrame for launch progress dialog
+ private StatusWindow statusWindow = null;
+ private String statusLine = "";
+
+ // Tool tip text
+ private final String newsgroupText = "Newsgroup name";
+ private final String hostText = "Newsgroup host/server name";
+ private final String replyText = "Email address to reply to";
+ private final String subjectText = "Subject title for the mail";
+ private final String commentText = "Additional comment on mail";
+ private final String officeHtmlText = "Post as both Office and HTML attachments";
+ private final String officeText = "Post as Office attachment only";
+ private final String htmlText = "Post as HTML attachment only";
+ private final String postText = "Post to newsgroup";
+ private final String cancelText = "Cancel post to newsgroup";
+
+
+ public void post( XScriptContext xsc )
+ {
+ xscriptcontext = xsc;
+ window = this;
+
+ // create mailcap and mimetypes files (fix for classloader problem)
+ MimeConfiguration.createFiles( xscriptcontext );
+
+ this.setTitle( "Post Document To Newsgroup" );
+ this.setLocation( FRAMEX, FRAMEY );
+
+ this.addFocusListener( new FocusAdapter()
+ {
+ public void focusGained( FocusEvent event )
+ {
+ System.out.println( "Focus gained" );
+ window.update( window.getGraphics() );
+ }
+
+ public void focusLost( FocusEvent event )
+ {
+ System.out.println( "Focus lost" );
+ }
+ });
+
+ Container container = getContentPane();
+ container.setLayout( new GridBagLayout() );;
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+
+ JPanel labelPanel = constructLabelPanel();
+ JPanel textPanel = constructTextPanel();
+ JPanel optionPanel = constructOptionPanel();
+ JPanel buttonPanel = constructButtonPanel();
+
+ constraints.gridx = 0;
+ constraints.gridy = 0;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 3;
+ constraints.insets = new Insets( 15, 15, 5, 5 );
+ container.add( labelPanel, constraints );
+
+ constraints.gridx = 1;
+ constraints.gridy = 0;
+ constraints.gridwidth = 4;
+ constraints.gridheight = 3;
+ constraints.insets = new Insets( 15, 5, 5, 15 );
+ container.add( textPanel, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 3;
+ constraints.gridwidth = 5;
+ constraints.gridheight = 1;
+ constraints.insets = new Insets( 5, 15, 5, 15 );
+ container.add( optionPanel, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 4;
+ constraints.gridwidth = 5;
+ constraints.gridheight = 1;
+ constraints.insets = new Insets( 5, 5, 5, 5 );
+ container.add( buttonPanel, constraints );
+
+ this.pack();
+ this.setResizable( false );
+ this.setVisible( true );
+ }
+
+
+ private JPanel constructLabelPanel()
+ {
+ JLabel newsgroupLabel = new JLabel( "Newsgroup:" );
+ JLabel hostLabel = new JLabel( "Host:" );
+ JLabel replyLabel = new JLabel( "Reply:" );
+ JLabel subjectLabel = new JLabel( "Subject:" );
+ JLabel commentLabel = new JLabel( "Comment:" );
+
+ newsgroupLabel.setToolTipText( newsgroupText );
+ hostLabel.setToolTipText( hostText );
+ replyLabel.setToolTipText( replyText );
+ subjectLabel.setToolTipText( subjectText );
+ commentLabel.setToolTipText( commentText );
+
+ JPanel newsgroupPanel = new JPanel();
+ newsgroupPanel.setLayout( new BorderLayout() );
+ newsgroupPanel.add( newsgroupLabel, "West" );
+ JPanel hostPanel = new JPanel();
+ hostPanel.setLayout( new BorderLayout() );
+ hostPanel.add( hostLabel, "West" );
+ JPanel replyPanel = new JPanel();
+ replyPanel.setLayout( new BorderLayout() );
+ replyPanel.add( replyLabel, "West" );
+ JPanel subjectPanel = new JPanel();
+ subjectPanel.setLayout( new BorderLayout() );
+ subjectPanel.add( subjectLabel, "West" );
+ JPanel commentPanel = new JPanel();
+ commentPanel.setLayout( new BorderLayout() );
+ commentPanel.add( commentLabel, "West" );
+ JPanel emptyPanel = new JPanel();
+
+ final int labelWidth = 80;
+ newsgroupPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
+ hostPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
+ replyPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
+ subjectPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
+ commentPanel.setPreferredSize( new Dimension( labelWidth, TEXTBOXHEIGHT ) );
+
+ JPanel panel = new JPanel();
+ panel.setLayout( new GridBagLayout() );
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.insets = new Insets( 5, 5, 5, 5 );
+
+ constraints.gridx = 0;
+ constraints.gridy = 0;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ constraints.weightx = constraints.weighty = 0.0;
+ panel.add( newsgroupPanel, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 1;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( hostPanel, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 2;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( replyPanel, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 3;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( subjectPanel, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 4;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( commentPanel, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 5;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ constraints.weightx = constraints.weighty = 1.0;
+ panel.add( emptyPanel, constraints );
+
+ return panel;
+ }
+
+
+ private JPanel constructTextPanel()
+ {
+ hostTextField = new JTextField();
+ hostTextField.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
+ hostTextField.setToolTipText( hostText );
+ hostTextField.setBorder( new EtchedBorder() );
+
+ //optionPanel.setBorder( new TitledBorder( new EtchedBorder(), "Document Format" ) );
+ newsgroupComboBox = getNewsgroupCombo();
+
+ replyTextField = new JTextField();
+ replyTextField.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
+ replyTextField.setToolTipText( replyText );
+ replyTextField.setBorder( new EtchedBorder() );
+
+ subjectTextField = new JTextField();
+ subjectTextField.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
+ subjectTextField.setToolTipText( subjectText );
+ subjectTextField.setBorder( new EtchedBorder() );
+
+ commentTextArea = new JTextArea();
+ commentTextArea.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTAREAHEIGHT ) );
+ commentTextArea.setToolTipText( commentText );
+ commentTextArea.setBorder( new EtchedBorder() );
+
+ JPanel panel = new JPanel();
+ panel.setLayout( new GridBagLayout() );
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.insets = new Insets( 5, 5, 5, 5 );
+
+ constraints.gridx = 0;
+ constraints.gridy = 0;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( newsgroupComboBox, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 1;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( hostTextField, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 2;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( replyTextField, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 3;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ panel.add( subjectTextField, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 4;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 2;
+ panel.add( commentTextArea, constraints );
+
+ return panel;
+ }
+
+
+ private JComboBox getNewsgroupCombo()
+ {
+ newsgroupComboBox = new JComboBox();
+ //newsgroupComboBox.setBorder( new EtchedBorder() );
+
+ newsgroupComboBox.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ // when newsgroup is selected
+ if( subscribedNewsgroups != null )
+ {
+ int position = newsgroupComboBox.getSelectedIndex();
+ if( position != -1 )
+ {
+ hostTextField.setText( subscribedNewsgroups[ position ].getHostName() );
+ newsgroupComboBox.setToolTipText( "Newsgroup name: " + subscribedNewsgroups[ position ].getNewsgroupName() + " (Host name: " + subscribedNewsgroups[ position ].getHostName() + ")" );
+ }
+ }
+ }
+ });
+
+ NewsGroup groupToSend = null;
+ SubscribedNewsgroups newsgroups = new SubscribedNewsgroups();
+ subscribedNewsgroups = newsgroups.getNewsGroups();
+
+ // Test for no .mozilla or no subscribed newsgroups
+ // subscribedNewsgroups = null;
+
+ if( subscribedNewsgroups == null )
+ {
+ //System.out.println( "Couldn't find any subscibed newsgroups in .mozilla" );
+ JOptionPane.showMessageDialog( window, "No subscribed newsgroups found in mozilla/netscape profile \nPlease enter newsgroup and host name",
+ "Newsgroups Information", JOptionPane.INFORMATION_MESSAGE );
+ }
+ else
+ {
+ // Copy all newsgroups into a vector for comparison
+ // Alter entries (to include host name) if duplication is found
+ Vector vector = new Vector( subscribedNewsgroups.length );
+ for(int i=0; i < subscribedNewsgroups.length; i++ )
+ {
+ vector.add( subscribedNewsgroups[i].getNewsgroupName() );
+ }
+ // Compare and alter
+ for(int i=0; i < subscribedNewsgroups.length; i++ )
+ {
+ // check if combo box already has a newsgroup with same name
+ // then add host name to differentiate
+ for(int j=0; j < subscribedNewsgroups.length; j++ )
+ {
+ if( j != i && subscribedNewsgroups[j].getNewsgroupName().equalsIgnoreCase( subscribedNewsgroups[i].getNewsgroupName() ) )
+ {
+ vector.set( j, subscribedNewsgroups[j].getNewsgroupName() + " (" + subscribedNewsgroups[j].getHostName() + ")" );
+ vector.set( i, subscribedNewsgroups[i].getNewsgroupName() + " (" + subscribedNewsgroups[i].getHostName() + ")" );
+ }
+ }
+ }
+ // Copy converted newsgroups from vector to combo box
+ for(int i=0; i < subscribedNewsgroups.length; i++ )
+ {
+ newsgroupComboBox.addItem( vector.elementAt(i) );
+ }
+ }// else
+
+ newsgroupComboBox.setPreferredSize( new Dimension( TEXTBOXWIDTH, TEXTBOXHEIGHT ) );
+ newsgroupComboBox.setEditable( true );
+
+ return newsgroupComboBox;
+ }
+
+
+
+ private JPanel constructOptionPanel()
+ {
+ officeHtmlButton = new JRadioButton( "Office and HTML", true );
+ officeHtmlButton.setToolTipText( officeHtmlText );
+
+ officeButton = new JRadioButton( "Office" );
+ officeButton.setToolTipText( officeText );
+
+ htmlButton = new JRadioButton( "HTML" );
+ htmlButton.setToolTipText( htmlText );
+
+ JRadioButton[] rbuttons = { officeHtmlButton, officeButton, htmlButton };
+ ButtonGroup radioButtonGroup = new ButtonGroup();
+ for( int i=0; i < rbuttons.length; i++ )
+ {
+ radioButtonGroup.add( rbuttons[i] );
+ }
+
+ JPanel optionPanel = new JPanel();
+ //optionPanel.setLayout( new GridLayout( 1, 3, 20, 0 ) );
+ optionPanel.setBorder( new TitledBorder( new EtchedBorder(), "Document Format" ) );
+ optionPanel.setLayout( new GridBagLayout() );
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+
+ constraints.gridx = 0;
+ constraints.gridy = 0;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ constraints.insets = new Insets( 5, 5, 5, 30 );
+ optionPanel.add( officeHtmlButton, constraints );
+
+ constraints.gridx = 1;
+ constraints.gridy = 0;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ constraints.insets = new Insets( 5, 20, 5, 30 );
+ optionPanel.add( officeButton, constraints );
+
+ constraints.gridx = 2;
+ constraints.gridy = 0;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ constraints.insets = new Insets( 5, 20, 5, 5 );
+ optionPanel.add( htmlButton, constraints );
+
+ return optionPanel;
+ }
+
+
+
+ public boolean sendingActions()
+ {
+ // posting actions
+ // Validate the data
+ if( isValidData() )
+ {
+ // Create status window
+ StatusWindow statusWindow = new StatusWindow( window, "Posting to Newsgroup", FRAMEX, FRAMEY );
+
+ statusWindow.setVisible( true );
+ //statusWindow.requestFocusInWindow();
+ statusLine = "Ready to send...";
+ statusWindow.setStatus( 0, statusLine );
+
+ // Get the boolean values for HTML/Office document
+ // params: ( XScriptContext, StatusWindow, html document, office document )
+
+ boolean html = false;
+ boolean office = false;
+ if( officeHtmlButton.isSelected() ) { html = true; office = true; }
+ if( officeButton.isSelected() ) { office = true; html = false; }
+ if( htmlButton.isSelected() ) { html = true; office = false; }
+
+ OfficeAttachment officeAttach = new OfficeAttachment( xscriptcontext, statusWindow, html, office );
+
+ statusLine = "Getting user input";
+ statusWindow.setStatus( 2, statusLine );
+ // Get replyto, subject, comment from textboxes
+ String replyto = replyTextField.getText();
+ String subject = subjectTextField.getText();
+ String comment = commentTextArea.getText();
+
+ // Get newsgroup from combo box (corresponding position)
+ String host = "";
+ String group = "";
+ int position = newsgroupComboBox.getSelectedIndex();
+ if( subscribedNewsgroups == null || position == -1 )
+ {
+ host = hostTextField.getText();
+ group = newsgroupComboBox.getSelectedItem().toString();
+ }
+ else
+ {
+ //int position = newsgroupComboBox.getSelectedIndex();
+ host = subscribedNewsgroups[ position ].getHostName();
+ group = subscribedNewsgroups[ position ].getNewsgroupName();
+ }
+
+ statusLine = "Creating sender object";
+ statusWindow.setStatus( 3, statusLine );
+ Sender sender = new Sender( statusWindow, officeAttach, replyto, subject, comment, host, group );
+ if( !sender.sendMail() )
+ {
+ //System.out.println( "Should end here (?)" );
+ statusWindow.enableCancelButton( true );
+ officeAttach.cleanUpOnError();
+ return false;
+ }
+
+ statusLine = "Send is complete";
+ statusWindow.setStatus( 14, statusLine );
+ }
+ else
+ {
+ //System.out.println( "Non valid data" );
+ return false;
+ }
+ return true;
+ }
+
+
+ private JPanel constructButtonPanel()
+ {
+ Action postAction = new AbstractAction() {
+ public void actionPerformed( ActionEvent event ) {
+ // posting actions
+ sendingActions();
+ }// actionPerformed
+ };
+
+ Action cancelAction = new AbstractAction() {
+ public void actionPerformed( ActionEvent event ) {
+ // cancelling actions
+ window.dispose();
+ }
+ };
+
+ postButton = new JButton();
+ postButton.setAction( postAction );
+ postButton.setToolTipText( postText );
+ postButton.setText( "Post" );
+ postButton.setPreferredSize( new Dimension( BUTTONWIDTH + 20, BUTTONHEIGHT ) );
+
+ cancelButton = new JButton();
+ cancelButton.setAction( cancelAction );
+ cancelButton.setToolTipText( cancelText );
+ cancelButton.setText( "Cancel" );
+ cancelButton.setPreferredSize( new Dimension( BUTTONWIDTH + 20, BUTTONHEIGHT ) );
+
+ JSeparator sep = new JSeparator( SwingConstants.HORIZONTAL );
+
+ JPanel buttonPanel = new JPanel();
+ buttonPanel.setLayout( new GridBagLayout() );
+ GridBagConstraints constraints = new GridBagConstraints();
+ constraints.fill = GridBagConstraints.BOTH;
+ constraints.insets = new Insets( 5, 5, 5, 5 );
+
+ JPanel emptyPanel1 = new JPanel();
+ emptyPanel1.setPreferredSize( new Dimension( BUTTONWIDTH, BUTTONHEIGHT ) );
+
+ JPanel emptyPanel2 = new JPanel();
+ emptyPanel2.setPreferredSize( new Dimension( BUTTONWIDTH, BUTTONHEIGHT ) );
+
+ constraints.gridx = 0;
+ constraints.gridy = 0;
+ constraints.gridwidth = 4;
+ constraints.gridheight = 1;
+ buttonPanel.add( sep, constraints );
+
+ constraints.gridx = 0;
+ constraints.gridy = 1;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ buttonPanel.add( emptyPanel1, constraints );
+
+ constraints.gridx = 1;
+ constraints.gridy = 1;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ buttonPanel.add( emptyPanel2, constraints );
+
+ constraints.gridx = 2;
+ constraints.gridy = 1;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ buttonPanel.add( postButton, constraints );
+
+ constraints.gridx = 3;
+ constraints.gridy = 1;
+ constraints.gridwidth = 1;
+ constraints.gridheight = 1;
+ constraints.insets = new Insets( 5, 5, 5, 0 );
+ buttonPanel.add( cancelButton, constraints );
+
+ return buttonPanel;
+ }
+
+
+ public void enableButtons( boolean enable )
+ {
+ if( enable )
+ {
+ postButton.setEnabled( true );
+ cancelButton.setEnabled( true );
+ }
+ else
+ {
+ postButton.setEnabled( false );
+ cancelButton.setEnabled( false );
+ }
+ }
+
+
+ private boolean isValidData()
+ {
+ // newsgroupComboBox must not be blank (format? dots and whitespace)
+ String newsgroupString = "";
+ int position = newsgroupComboBox.getSelectedIndex();
+ if( subscribedNewsgroups == null || position == -1 )
+ {
+ newsgroupString = newsgroupComboBox.getSelectedItem().toString();
+ }
+ else
+ {
+ //int position = newsgroupComboBox.getSelectedIndex();
+ newsgroupString = subscribedNewsgroups[ position ].getNewsgroupName();
+ }
+ if( newsgroupString.length() == 0 )
+ {
+ //System.out.println( "Please enter a newsgroup name" );
+ newsgroupComboBox.requestFocus();
+ JOptionPane.showMessageDialog( window, "Please enter a newsgroup name", "Input Error", JOptionPane.ERROR_MESSAGE );
+ return false;
+ }
+
+
+ // hostTextField must not be blank (format?)
+ String hostString = hostTextField.getText();
+ if( hostString.length() == 0 )
+ {
+ //System.out.println( "Please enter a hostname" );
+ hostTextField.requestFocus();
+ JOptionPane.showMessageDialog( window, "Please enter a hostname", "Input Error", JOptionPane.ERROR_MESSAGE );
+ return false;
+ }
+
+
+ // replyTextField must have <string>@<string>.<string>
+ // (string at least 2 chars long)
+ // consider <s>.<s>@<s>.<s>.<s> format? (array of dot positons?)
+ String replyString = replyTextField.getText();
+ int atPos = replyString.indexOf( "@" );
+ int dotPos = replyString.lastIndexOf( "." );
+ int length = replyString.length();
+ //System.out.println( "length: " + length + "\n atPos: " + atPos + "\n dotPos: " + dotPos );
+ if( length == 0 || atPos == -1 || dotPos == -1 || atPos < 2 || dotPos < atPos || dotPos + 2 == length || atPos + 2 == dotPos || atPos != replyString.lastIndexOf( "@" ) || replyString.indexOf(" ") != -1 )
+ {
+ //System.out.println( "Please enter a valid reply to email address" );
+ replyTextField.requestFocus();
+ JOptionPane.showMessageDialog( window, "Please enter a valid reply to email address", "Input Error", JOptionPane.ERROR_MESSAGE );
+ return false;
+ }
+
+
+ // subjectTextField must not be blank?
+ String subjectString = subjectTextField.getText();
+ if( subjectString.length() == 0 )
+ {
+ //System.out.println( "Please enter subject title" );
+ subjectTextField.requestFocus();
+ JOptionPane.showMessageDialog( window, "Please enter subject title", "Input Error", JOptionPane.ERROR_MESSAGE );
+ return false;
+ }
+
+ // details are valid
+ return true;
+ }
+
+}