1 /*************************************************************************
2  *
3  *  The Contents of this file are made available subject to the terms of
4  *  the BSD license.
5  *
6  *  Copyright 2000, 2010 Oracle and/or its affiliates.
7  *  All rights reserved.
8  *
9  *  Redistribution and use in source and binary forms, with or without
10  *  modification, are permitted provided that the following conditions
11  *  are met:
12  *  1. Redistributions of source code must retain the above copyright
13  *     notice, this list of conditions and the following disclaimer.
14  *  2. Redistributions in binary form must reproduce the above copyright
15  *     notice, this list of conditions and the following disclaimer in the
16  *     documentation and/or other materials provided with the distribution.
17  *  3. Neither the name of Sun Microsystems, Inc. nor the names of its
18  *     contributors may be used to endorse or promote products derived
19  *     from this software without specific prior written permission.
20  *
21  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
28  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
29  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
30  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
31  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  *
33  *************************************************************************/
34 
35 package com.sun.star.comp.beans;
36 
37 import javax.swing.filechooser.*;
38 import javax.swing.*;
39 import java.io.*;
40 
41 /** A simple Applet that contains the SimpleBean.
42  *
43  * This applet is a sample implementation of the
44  * OpenOffice.org bean.
45  * When initally loaded the applet has two buttons
46  * one for opening an existant file and one to open
47  * a blank document of a given type supported by
48  * OpenOffice.org eg. Writer, Calc, Impress, .....
49  *
50  */
51 
52 public class OOoBeanViewer extends java.applet.Applet
53 {
54 
55    /**
56     * Private variables declaration - GUI components
57     */
58    private java.awt.Panel rightPanel;
59    private java.awt.Panel bottomPanel;
60    private javax.swing.JButton closeButton;
61    private javax.swing.JButton terminateButton;
62    private javax.swing.JButton newDocumentButton;
63    private javax.swing.JPopupMenu documentTypePopUp;
64    private javax.swing.JCheckBox menuBarButton;
65    private javax.swing.JCheckBox mainBarButton;
66    private javax.swing.JCheckBox toolBarButton;
67    private javax.swing.JCheckBox statusBarButton;
68    private javax.swing.JButton storeDocumentButton;
69    private javax.swing.JButton loadDocumentButton;
70    private javax.swing.JButton syswinButton;
71    private JTextField documentURLTextField;
72    private JMenuItem item;
73    private JFileChooser fileChooser;
74    private byte buffer[];
75 
76    /**
77     * Private variables declaration - SimpleBean variables
78     */
79    private OOoBean aBean;
80 
81    /**
82     * Initialize the Appplet
83     */
84    public void init()
85    {
86 		//The aBean needs to be initialized to add it to the applet
87 		aBean = new OOoBean();
88 
89         //Initialize GUI components
90         rightPanel = new java.awt.Panel();
91         bottomPanel = new java.awt.Panel();
92         closeButton = new javax.swing.JButton("close");
93         terminateButton = new javax.swing.JButton("terminate");
94         newDocumentButton = new javax.swing.JButton("new document...");
95         documentTypePopUp = new javax.swing.JPopupMenu();
96         storeDocumentButton = new javax.swing.JButton("store to buffer");
97         loadDocumentButton = new javax.swing.JButton("load from buffer");
98         syswinButton = new javax.swing.JButton("release/aquire");
99 
100         menuBarButton = new javax.swing.JCheckBox("MenuBar");
101 		menuBarButton.setSelected( aBean.isMenuBarVisible() );
102 
103         mainBarButton = new javax.swing.JCheckBox("MainBar");
104 		mainBarButton.setSelected( aBean.isStandardBarVisible() );
105 
106         toolBarButton = new javax.swing.JCheckBox("ToolBar");
107 		toolBarButton.setSelected( aBean.isToolBarVisible() );
108 
109         statusBarButton = new javax.swing.JCheckBox("StatusBar");
110 		statusBarButton.setSelected( aBean.isStatusBarVisible() );
111 
112         documentURLTextField = new javax.swing.JTextField();
113 
114         //Set up the Popup Menu to create a blank document
115         documentTypePopUp.setToolTipText("Create an empty document");
116 
117         item = documentTypePopUp.add("Text Document");
118         item.addActionListener(new java.awt.event.ActionListener()
119         {
120             public void actionPerformed(java.awt.event.ActionEvent evt)
121             {
122                 createBlankDoc("private:factory/swriter",
123                     "New text document");
124             }
125         });
126 
127         item = documentTypePopUp.add("Presentation Document");
128         item.addActionListener(new java.awt.event.ActionListener()
129         {
130             public void actionPerformed(java.awt.event.ActionEvent evt)
131             {
132                 createBlankDoc("private:factory/simpress",
133                     "New presentation document");
134             }
135         });
136 
137         item = documentTypePopUp.add("Drawing Document");
138         item.addActionListener(new java.awt.event.ActionListener()
139         {
140             public void actionPerformed(java.awt.event.ActionEvent evt)
141             {
142                 createBlankDoc("private:factory/sdraw",
143                    "New drawing document");
144             }
145         });
146 
147         item = documentTypePopUp.add("Formula Document");
148         item.addActionListener(new java.awt.event.ActionListener()
149         {
150             public void actionPerformed(java.awt.event.ActionEvent evt)
151             {
152                 createBlankDoc("private:factory/smath",
153                     "New formula document");
154             }
155         });
156 
157         item = documentTypePopUp.add("Spreadsheet Document");
158         item.addActionListener(new java.awt.event.ActionListener()
159         {
160             public void actionPerformed(java.awt.event.ActionEvent evt)
161             {
162                 createBlankDoc("private:factory/scalc",
163                     "New spreadsheet document");
164             }
165         });
166 
167         syswinButton.addActionListener(
168 				new java.awt.event.ActionListener()
169         {
170             public void actionPerformed(java.awt.event.ActionEvent evt)
171             {
172 				try
173 				{
174 					aBean.releaseSystemWindow();
175 					aBean.aquireSystemWindow();
176 				}
177 				catch ( com.sun.star.comp.beans.NoConnectionException aExc )
178 				{}
179 				catch ( com.sun.star.comp.beans.SystemWindowException aExc )
180 				{}
181 			}
182        });
183 
184         storeDocumentButton.addActionListener(
185 				new java.awt.event.ActionListener()
186         {
187             public void actionPerformed(java.awt.event.ActionEvent evt)
188             {
189 				try
190 				{
191 					buffer = aBean.storeToByteArray( null, null );
192 				}
193 				catch ( Throwable aExc )
194 				{
195 					System.err.println( "storeToBuffer failed: " + aExc );
196 					aExc.printStackTrace( System.err );
197 				}
198 			}
199        });
200 
201         loadDocumentButton.addActionListener(
202 				new java.awt.event.ActionListener()
203         {
204             public void actionPerformed(java.awt.event.ActionEvent evt)
205             {
206 				try
207 				{
208 					aBean.loadFromByteArray( buffer, null );
209 				}
210 				catch ( Throwable aExc )
211 				{
212 					System.err.println( "loadFromBuffer failed: " + aExc );
213 					aExc.printStackTrace( System.err );
214 				}
215 			}
216        });
217 
218        closeButton.addActionListener(new java.awt.event.ActionListener()
219        {
220             public void actionPerformed(java.awt.event.ActionEvent evt)
221             {
222                 close();
223             }
224        });
225 
226        terminateButton.addActionListener(new java.awt.event.ActionListener()
227        {
228             public void actionPerformed(java.awt.event.ActionEvent evt)
229             {
230                 terminate();
231             }
232        });
233 
234        newDocumentButton.addActionListener(new java.awt.event.ActionListener()
235        {
236             public void actionPerformed(java.awt.event.ActionEvent evt)
237             {
238                 documentTypePopUp.show((java.awt.Component)evt.getSource(), 0,0);
239             }
240        });
241 
242        menuBarButton.addActionListener(new java.awt.event.ActionListener()
243        {
244             public void actionPerformed(java.awt.event.ActionEvent evt)
245             {
246 				aBean.setMenuBarVisible( !aBean.isMenuBarVisible() );
247             }
248        });
249 
250        mainBarButton.addActionListener(new java.awt.event.ActionListener()
251        {
252             public void actionPerformed(java.awt.event.ActionEvent evt)
253             {
254 				aBean.setStandardBarVisible( !aBean.isStandardBarVisible() );
255             }
256        });
257 
258        toolBarButton.addActionListener(new java.awt.event.ActionListener()
259        {
260             public void actionPerformed(java.awt.event.ActionEvent evt)
261             {
262 				aBean.setToolBarVisible( !aBean.isToolBarVisible() );
263             }
264        });
265 
266        statusBarButton.addActionListener(new java.awt.event.ActionListener()
267        {
268             public void actionPerformed(java.awt.event.ActionEvent evt)
269             {
270 				aBean.setStatusBarVisible( !aBean.isStatusBarVisible() );
271             }
272        });
273 
274        documentURLTextField.setEditable(false);
275        documentURLTextField.setPreferredSize(new java.awt.Dimension(200, 30));
276 
277        rightPanel.setLayout( new java.awt.GridLayout(10,1) );
278        rightPanel.add(closeButton);
279        rightPanel.add(terminateButton);
280        rightPanel.add(newDocumentButton);
281        rightPanel.add(storeDocumentButton);
282        rightPanel.add(loadDocumentButton);
283        rightPanel.add(syswinButton);
284        rightPanel.add(menuBarButton);
285        rightPanel.add(mainBarButton);
286        rightPanel.add(toolBarButton);
287        rightPanel.add(statusBarButton);
288 
289        //bottomPanel.setLayout( new java.awt.GridLayout(1,1) );
290        bottomPanel.setLayout( new java.awt.BorderLayout() );
291        bottomPanel.add(documentURLTextField);
292 
293        setLayout(new java.awt.BorderLayout());
294 
295        add(aBean, java.awt.BorderLayout.CENTER);
296        add(rightPanel, java.awt.BorderLayout.EAST);
297        add(bottomPanel, java.awt.BorderLayout.SOUTH);
298    }
299 
300    /**
301     * Create a blank document of type <code>desc</code>
302     *
303     * @param url The private internal URL of the OpenOffice.org
304     *            document describing the document
305     * @param desc A description of the document to be created
306     */
307    private void createBlankDoc(String url, String desc)
308    {
309 		//Create a blank document
310 		try
311 		{
312             documentURLTextField.setText(desc);
313             //Get the office process to load the URL
314             aBean.loadFromURL( url, null );
315 
316 	   		aBean.aquireSystemWindow();
317 		}
318 		catch ( com.sun.star.comp.beans.SystemWindowException aExc )
319       	{
320 			System.err.println( "OOoBeanViewer.1:" );
321    			aExc.printStackTrace();
322 		}
323 		catch ( com.sun.star.comp.beans.NoConnectionException aExc )
324 		{
325 			System.err.println( "OOoBeanViewer.2:" );
326 			aExc.printStackTrace();
327 		}
328 		catch ( Exception aExc )
329 		{
330 			System.err.println( "OOoBeanViewer.3:" );
331 			aExc.printStackTrace();
332 			//return;
333 		}
334     }
335 
336 	/** closes the bean viewer, leaves OOo running.
337 	 */
338    private void close()
339    {
340 			setVisible(false);
341 			aBean.stopOOoConnection();
342 			stop();
343 			System.exit(0);
344    }
345 
346 	/** closes the bean viewer and tries to terminate OOo.
347 	 */
348    private void terminate()
349    {
350 			setVisible(false);
351 			com.sun.star.frame.XDesktop xDesktop = null;
352 			try {
353 				xDesktop = aBean.getOOoDesktop();
354 			}
355 			catch ( com.sun.star.comp.beans.NoConnectionException aExc ) {} // ignore
356 			aBean.stopOOoConnection();
357 			stop();
358 			if ( xDesktop != null )
359 				xDesktop.terminate();
360 			System.exit(0);
361    }
362 
363    /**
364     * An ExitListener listening for windowClosing events
365     */
366    private class ExitListener extends java.awt.event.WindowAdapter
367    {
368         /**
369          * windowClosed
370          *
371          * @param e A WindowEvent for a closed Window event
372          */
373         public void windowClosed( java.awt.event.WindowEvent e)
374         {
375 			close();
376         }
377 
378         /**
379          * windowClosing for a closing window event
380          *
381          * @param e A WindowEvent for a closing window event
382          */
383         public void windowClosing( java.awt.event.WindowEvent e)
384         {
385             ((java.awt.Window)e.getSource()).dispose();
386         }
387    }
388 
389    public static void main(String args[])
390    {
391        java.awt.Frame frame = new java.awt.Frame("OpenOffice.org Demo");
392        OOoBeanViewer aViewer = new OOoBeanViewer();
393 
394        frame.setLayout(new java.awt.BorderLayout());
395 
396        frame.addWindowListener( aViewer.new ExitListener() );
397 
398        aViewer.init();
399        aViewer.start();
400 
401        frame.add(aViewer);
402        frame.setLocation( 200, 200 );
403        frame.setSize( 800, 480 );
404        frame.show();
405    }
406 }
407 
408