1*34dd1e25SAndrew Rist /**************************************************************
2*34dd1e25SAndrew Rist  *
3*34dd1e25SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*34dd1e25SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*34dd1e25SAndrew Rist  * distributed with this work for additional information
6*34dd1e25SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*34dd1e25SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*34dd1e25SAndrew Rist  * "License"); you may not use this file except in compliance
9*34dd1e25SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*34dd1e25SAndrew Rist  *
11*34dd1e25SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*34dd1e25SAndrew Rist  *
13*34dd1e25SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*34dd1e25SAndrew Rist  * software distributed under the License is distributed on an
15*34dd1e25SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*34dd1e25SAndrew Rist  * KIND, either express or implied.  See the License for the
17*34dd1e25SAndrew Rist  * specific language governing permissions and limitations
18*34dd1e25SAndrew Rist  * under the License.
19*34dd1e25SAndrew Rist  *
20*34dd1e25SAndrew Rist  *************************************************************/
21*34dd1e25SAndrew Rist 
22*34dd1e25SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package com.sun.star.comp.beans;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import javax.swing.filechooser.*;
27cdf0e10cSrcweir import javax.swing.*;
28cdf0e10cSrcweir import java.io.*;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir /** A simple Applet that contains the SimpleBean.
31cdf0e10cSrcweir  *
32cdf0e10cSrcweir  * This applet is a sample implementation of the
33cdf0e10cSrcweir  * OpenOffice.org bean.
34cdf0e10cSrcweir  * When initally loaded the applet has two buttons
35cdf0e10cSrcweir  * one for opening an existant file and one to open
36cdf0e10cSrcweir  * a blank document of a given type supported by
37cdf0e10cSrcweir  * OpenOffice.org eg. Writer, Calc, Impress, .....
38cdf0e10cSrcweir  *
39cdf0e10cSrcweir  */
40cdf0e10cSrcweir 
41cdf0e10cSrcweir public class OOoBeanViewer extends java.applet.Applet
42cdf0e10cSrcweir {
43cdf0e10cSrcweir 
44cdf0e10cSrcweir    /**
45cdf0e10cSrcweir     * Private variables declaration - GUI components
46cdf0e10cSrcweir     */
47cdf0e10cSrcweir    private java.awt.Panel rightPanel;
48cdf0e10cSrcweir    private java.awt.Panel bottomPanel;
49cdf0e10cSrcweir    private javax.swing.JButton closeButton;
50cdf0e10cSrcweir    private javax.swing.JButton terminateButton;
51cdf0e10cSrcweir    private javax.swing.JButton newDocumentButton;
52cdf0e10cSrcweir    private javax.swing.JPopupMenu documentTypePopUp;
53cdf0e10cSrcweir    private javax.swing.JCheckBox menuBarButton;
54cdf0e10cSrcweir    private javax.swing.JCheckBox mainBarButton;
55cdf0e10cSrcweir    private javax.swing.JCheckBox toolBarButton;
56cdf0e10cSrcweir    private javax.swing.JCheckBox statusBarButton;
57cdf0e10cSrcweir    private javax.swing.JButton storeDocumentButton;
58cdf0e10cSrcweir    private javax.swing.JButton loadDocumentButton;
59cdf0e10cSrcweir    private javax.swing.JButton syswinButton;
60cdf0e10cSrcweir    private JTextField documentURLTextField;
61cdf0e10cSrcweir    private JMenuItem item;
62cdf0e10cSrcweir    private JFileChooser fileChooser;
63cdf0e10cSrcweir    private byte buffer[];
64cdf0e10cSrcweir 
65cdf0e10cSrcweir    /**
66cdf0e10cSrcweir     * Private variables declaration - SimpleBean variables
67cdf0e10cSrcweir     */
68cdf0e10cSrcweir    private OOoBean aBean;
69cdf0e10cSrcweir 
70cdf0e10cSrcweir    /**
71cdf0e10cSrcweir     * Initialize the Appplet
72cdf0e10cSrcweir     */
init()73cdf0e10cSrcweir    public void init()
74cdf0e10cSrcweir    {
75cdf0e10cSrcweir 		//The aBean needs to be initialized to add it to the applet
76cdf0e10cSrcweir 		aBean = new OOoBean();
77cdf0e10cSrcweir 
78cdf0e10cSrcweir         //Initialize GUI components
79cdf0e10cSrcweir         rightPanel = new java.awt.Panel();
80cdf0e10cSrcweir         bottomPanel = new java.awt.Panel();
81cdf0e10cSrcweir         closeButton = new javax.swing.JButton("close");
82cdf0e10cSrcweir         terminateButton = new javax.swing.JButton("terminate");
83cdf0e10cSrcweir         newDocumentButton = new javax.swing.JButton("new document...");
84cdf0e10cSrcweir         documentTypePopUp = new javax.swing.JPopupMenu();
85cdf0e10cSrcweir         storeDocumentButton = new javax.swing.JButton("store to buffer");
86cdf0e10cSrcweir         loadDocumentButton = new javax.swing.JButton("load from buffer");
87cdf0e10cSrcweir         syswinButton = new javax.swing.JButton("release/aquire");
88cdf0e10cSrcweir 
89cdf0e10cSrcweir         menuBarButton = new javax.swing.JCheckBox("MenuBar");
90cdf0e10cSrcweir 		menuBarButton.setSelected( aBean.isMenuBarVisible() );
91cdf0e10cSrcweir 
92cdf0e10cSrcweir         mainBarButton = new javax.swing.JCheckBox("MainBar");
93cdf0e10cSrcweir 		mainBarButton.setSelected( aBean.isStandardBarVisible() );
94cdf0e10cSrcweir 
95cdf0e10cSrcweir         toolBarButton = new javax.swing.JCheckBox("ToolBar");
96cdf0e10cSrcweir 		toolBarButton.setSelected( aBean.isToolBarVisible() );
97cdf0e10cSrcweir 
98cdf0e10cSrcweir         statusBarButton = new javax.swing.JCheckBox("StatusBar");
99cdf0e10cSrcweir 		statusBarButton.setSelected( aBean.isStatusBarVisible() );
100cdf0e10cSrcweir 
101cdf0e10cSrcweir         documentURLTextField = new javax.swing.JTextField();
102cdf0e10cSrcweir 
103cdf0e10cSrcweir         //Set up the Popup Menu to create a blank document
104cdf0e10cSrcweir         documentTypePopUp.setToolTipText("Create an empty document");
105cdf0e10cSrcweir 
106cdf0e10cSrcweir         item = documentTypePopUp.add("Text Document");
107cdf0e10cSrcweir         item.addActionListener(new java.awt.event.ActionListener()
108cdf0e10cSrcweir         {
109cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
110cdf0e10cSrcweir             {
111cdf0e10cSrcweir                 createBlankDoc("private:factory/swriter",
112cdf0e10cSrcweir                     "New text document");
113cdf0e10cSrcweir             }
114cdf0e10cSrcweir         });
115cdf0e10cSrcweir 
116cdf0e10cSrcweir         item = documentTypePopUp.add("Presentation Document");
117cdf0e10cSrcweir         item.addActionListener(new java.awt.event.ActionListener()
118cdf0e10cSrcweir         {
119cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
120cdf0e10cSrcweir             {
121cdf0e10cSrcweir                 createBlankDoc("private:factory/simpress",
122cdf0e10cSrcweir                     "New presentation document");
123cdf0e10cSrcweir             }
124cdf0e10cSrcweir         });
125cdf0e10cSrcweir 
126cdf0e10cSrcweir         item = documentTypePopUp.add("Drawing Document");
127cdf0e10cSrcweir         item.addActionListener(new java.awt.event.ActionListener()
128cdf0e10cSrcweir         {
129cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
130cdf0e10cSrcweir             {
131cdf0e10cSrcweir                 createBlankDoc("private:factory/sdraw",
132cdf0e10cSrcweir                    "New drawing document");
133cdf0e10cSrcweir             }
134cdf0e10cSrcweir         });
135cdf0e10cSrcweir 
136cdf0e10cSrcweir         item = documentTypePopUp.add("Formula Document");
137cdf0e10cSrcweir         item.addActionListener(new java.awt.event.ActionListener()
138cdf0e10cSrcweir         {
139cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
140cdf0e10cSrcweir             {
141cdf0e10cSrcweir                 createBlankDoc("private:factory/smath",
142cdf0e10cSrcweir                     "New formula document");
143cdf0e10cSrcweir             }
144cdf0e10cSrcweir         });
145cdf0e10cSrcweir 
146cdf0e10cSrcweir         item = documentTypePopUp.add("Spreadsheet Document");
147cdf0e10cSrcweir         item.addActionListener(new java.awt.event.ActionListener()
148cdf0e10cSrcweir         {
149cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
150cdf0e10cSrcweir             {
151cdf0e10cSrcweir                 createBlankDoc("private:factory/scalc",
152cdf0e10cSrcweir                     "New spreadsheet document");
153cdf0e10cSrcweir             }
154cdf0e10cSrcweir         });
155cdf0e10cSrcweir 
156cdf0e10cSrcweir         syswinButton.addActionListener(
157cdf0e10cSrcweir 				new java.awt.event.ActionListener()
158cdf0e10cSrcweir         {
159cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
160cdf0e10cSrcweir             {
161cdf0e10cSrcweir 				try
162cdf0e10cSrcweir 				{
163cdf0e10cSrcweir 					aBean.releaseSystemWindow();
164cdf0e10cSrcweir 					aBean.aquireSystemWindow();
165cdf0e10cSrcweir 				}
166cdf0e10cSrcweir 				catch ( com.sun.star.comp.beans.NoConnectionException aExc )
167cdf0e10cSrcweir 				{}
168cdf0e10cSrcweir 				catch ( com.sun.star.comp.beans.SystemWindowException aExc )
169cdf0e10cSrcweir 				{}
170cdf0e10cSrcweir 			}
171cdf0e10cSrcweir        });
172cdf0e10cSrcweir 
173cdf0e10cSrcweir         storeDocumentButton.addActionListener(
174cdf0e10cSrcweir 				new java.awt.event.ActionListener()
175cdf0e10cSrcweir         {
176cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
177cdf0e10cSrcweir             {
178cdf0e10cSrcweir 				try
179cdf0e10cSrcweir 				{
180cdf0e10cSrcweir 					buffer = aBean.storeToByteArray( null, null );
181cdf0e10cSrcweir 				}
182cdf0e10cSrcweir 				catch ( Throwable aExc )
183cdf0e10cSrcweir 				{
184cdf0e10cSrcweir 					System.err.println( "storeToBuffer failed: " + aExc );
185cdf0e10cSrcweir 					aExc.printStackTrace( System.err );
186cdf0e10cSrcweir 				}
187cdf0e10cSrcweir 			}
188cdf0e10cSrcweir        });
189cdf0e10cSrcweir 
190cdf0e10cSrcweir         loadDocumentButton.addActionListener(
191cdf0e10cSrcweir 				new java.awt.event.ActionListener()
192cdf0e10cSrcweir         {
193cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
194cdf0e10cSrcweir             {
195cdf0e10cSrcweir 				try
196cdf0e10cSrcweir 				{
197cdf0e10cSrcweir 					aBean.loadFromByteArray( buffer, null );
198cdf0e10cSrcweir 				}
199cdf0e10cSrcweir 				catch ( Throwable aExc )
200cdf0e10cSrcweir 				{
201cdf0e10cSrcweir 					System.err.println( "loadFromBuffer failed: " + aExc );
202cdf0e10cSrcweir 					aExc.printStackTrace( System.err );
203cdf0e10cSrcweir 				}
204cdf0e10cSrcweir 			}
205cdf0e10cSrcweir        });
206cdf0e10cSrcweir 
207cdf0e10cSrcweir        closeButton.addActionListener(new java.awt.event.ActionListener()
208cdf0e10cSrcweir        {
209cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
210cdf0e10cSrcweir             {
211cdf0e10cSrcweir                 close();
212cdf0e10cSrcweir             }
213cdf0e10cSrcweir        });
214cdf0e10cSrcweir 
215cdf0e10cSrcweir        terminateButton.addActionListener(new java.awt.event.ActionListener()
216cdf0e10cSrcweir        {
217cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
218cdf0e10cSrcweir             {
219cdf0e10cSrcweir                 terminate();
220cdf0e10cSrcweir             }
221cdf0e10cSrcweir        });
222cdf0e10cSrcweir 
223cdf0e10cSrcweir        newDocumentButton.addActionListener(new java.awt.event.ActionListener()
224cdf0e10cSrcweir        {
225cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
226cdf0e10cSrcweir             {
227cdf0e10cSrcweir                 documentTypePopUp.show((java.awt.Component)evt.getSource(), 0,0);
228cdf0e10cSrcweir             }
229cdf0e10cSrcweir        });
230cdf0e10cSrcweir 
231cdf0e10cSrcweir        menuBarButton.addActionListener(new java.awt.event.ActionListener()
232cdf0e10cSrcweir        {
233cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
234cdf0e10cSrcweir             {
235cdf0e10cSrcweir 				aBean.setMenuBarVisible( !aBean.isMenuBarVisible() );
236cdf0e10cSrcweir             }
237cdf0e10cSrcweir        });
238cdf0e10cSrcweir 
239cdf0e10cSrcweir        mainBarButton.addActionListener(new java.awt.event.ActionListener()
240cdf0e10cSrcweir        {
241cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
242cdf0e10cSrcweir             {
243cdf0e10cSrcweir 				aBean.setStandardBarVisible( !aBean.isStandardBarVisible() );
244cdf0e10cSrcweir             }
245cdf0e10cSrcweir        });
246cdf0e10cSrcweir 
247cdf0e10cSrcweir        toolBarButton.addActionListener(new java.awt.event.ActionListener()
248cdf0e10cSrcweir        {
249cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
250cdf0e10cSrcweir             {
251cdf0e10cSrcweir 				aBean.setToolBarVisible( !aBean.isToolBarVisible() );
252cdf0e10cSrcweir             }
253cdf0e10cSrcweir        });
254cdf0e10cSrcweir 
255cdf0e10cSrcweir        statusBarButton.addActionListener(new java.awt.event.ActionListener()
256cdf0e10cSrcweir        {
257cdf0e10cSrcweir             public void actionPerformed(java.awt.event.ActionEvent evt)
258cdf0e10cSrcweir             {
259cdf0e10cSrcweir 				aBean.setStatusBarVisible( !aBean.isStatusBarVisible() );
260cdf0e10cSrcweir             }
261cdf0e10cSrcweir        });
262cdf0e10cSrcweir 
263cdf0e10cSrcweir        documentURLTextField.setEditable(false);
264cdf0e10cSrcweir        documentURLTextField.setPreferredSize(new java.awt.Dimension(200, 30));
265cdf0e10cSrcweir 
266cdf0e10cSrcweir        rightPanel.setLayout( new java.awt.GridLayout(10,1) );
267cdf0e10cSrcweir        rightPanel.add(closeButton);
268cdf0e10cSrcweir        rightPanel.add(terminateButton);
269cdf0e10cSrcweir        rightPanel.add(newDocumentButton);
270cdf0e10cSrcweir        rightPanel.add(storeDocumentButton);
271cdf0e10cSrcweir        rightPanel.add(loadDocumentButton);
272cdf0e10cSrcweir        rightPanel.add(syswinButton);
273cdf0e10cSrcweir        rightPanel.add(menuBarButton);
274cdf0e10cSrcweir        rightPanel.add(mainBarButton);
275cdf0e10cSrcweir        rightPanel.add(toolBarButton);
276cdf0e10cSrcweir        rightPanel.add(statusBarButton);
277cdf0e10cSrcweir 
278cdf0e10cSrcweir        //bottomPanel.setLayout( new java.awt.GridLayout(1,1) );
279cdf0e10cSrcweir        bottomPanel.setLayout( new java.awt.BorderLayout() );
280cdf0e10cSrcweir        bottomPanel.add(documentURLTextField);
281cdf0e10cSrcweir 
282cdf0e10cSrcweir        setLayout(new java.awt.BorderLayout());
283cdf0e10cSrcweir 
284cdf0e10cSrcweir        add(aBean, java.awt.BorderLayout.CENTER);
285cdf0e10cSrcweir        add(rightPanel, java.awt.BorderLayout.EAST);
286cdf0e10cSrcweir        add(bottomPanel, java.awt.BorderLayout.SOUTH);
287cdf0e10cSrcweir    }
288cdf0e10cSrcweir 
289cdf0e10cSrcweir    /**
290cdf0e10cSrcweir     * Create a blank document of type <code>desc</code>
291cdf0e10cSrcweir     *
292cdf0e10cSrcweir     * @param url The private internal URL of the OpenOffice.org
293cdf0e10cSrcweir     *            document describing the document
294cdf0e10cSrcweir     * @param desc A description of the document to be created
295cdf0e10cSrcweir     */
createBlankDoc(String url, String desc)296cdf0e10cSrcweir    private void createBlankDoc(String url, String desc)
297cdf0e10cSrcweir    {
298cdf0e10cSrcweir 		//Create a blank document
299cdf0e10cSrcweir 		try
300cdf0e10cSrcweir 		{
301cdf0e10cSrcweir             documentURLTextField.setText(desc);
302cdf0e10cSrcweir             //Get the office process to load the URL
303cdf0e10cSrcweir             aBean.loadFromURL( url, null );
304cdf0e10cSrcweir 
305cdf0e10cSrcweir 	   		aBean.aquireSystemWindow();
306cdf0e10cSrcweir 		}
307cdf0e10cSrcweir 		catch ( com.sun.star.comp.beans.SystemWindowException aExc )
308cdf0e10cSrcweir       	{
309cdf0e10cSrcweir 			System.err.println( "OOoBeanViewer.1:" );
310cdf0e10cSrcweir    			aExc.printStackTrace();
311cdf0e10cSrcweir 		}
312cdf0e10cSrcweir 		catch ( com.sun.star.comp.beans.NoConnectionException aExc )
313cdf0e10cSrcweir 		{
314cdf0e10cSrcweir 			System.err.println( "OOoBeanViewer.2:" );
315cdf0e10cSrcweir 			aExc.printStackTrace();
316cdf0e10cSrcweir 		}
317cdf0e10cSrcweir 		catch ( Exception aExc )
318cdf0e10cSrcweir 		{
319cdf0e10cSrcweir 			System.err.println( "OOoBeanViewer.3:" );
320cdf0e10cSrcweir 			aExc.printStackTrace();
321cdf0e10cSrcweir 			//return;
322cdf0e10cSrcweir 		}
323cdf0e10cSrcweir     }
324cdf0e10cSrcweir 
325cdf0e10cSrcweir 	/** closes the bean viewer, leaves OOo running.
326cdf0e10cSrcweir 	 */
close()327cdf0e10cSrcweir    private void close()
328cdf0e10cSrcweir    {
329cdf0e10cSrcweir 			setVisible(false);
330cdf0e10cSrcweir 			aBean.stopOOoConnection();
331cdf0e10cSrcweir 			stop();
332cdf0e10cSrcweir 			System.exit(0);
333cdf0e10cSrcweir    }
334cdf0e10cSrcweir 
335cdf0e10cSrcweir 	/** closes the bean viewer and tries to terminate OOo.
336cdf0e10cSrcweir 	 */
terminate()337cdf0e10cSrcweir    private void terminate()
338cdf0e10cSrcweir    {
339cdf0e10cSrcweir 			setVisible(false);
340cdf0e10cSrcweir 			com.sun.star.frame.XDesktop xDesktop = null;
341cdf0e10cSrcweir 			try {
342cdf0e10cSrcweir 				xDesktop = aBean.getOOoDesktop();
343cdf0e10cSrcweir 			}
344cdf0e10cSrcweir 			catch ( com.sun.star.comp.beans.NoConnectionException aExc ) {} // ignore
345cdf0e10cSrcweir 			aBean.stopOOoConnection();
346cdf0e10cSrcweir 			stop();
347cdf0e10cSrcweir 			if ( xDesktop != null )
348cdf0e10cSrcweir 				xDesktop.terminate();
349cdf0e10cSrcweir 			System.exit(0);
350cdf0e10cSrcweir    }
351cdf0e10cSrcweir 
352cdf0e10cSrcweir    /**
353cdf0e10cSrcweir     * An ExitListener listening for windowClosing events
354cdf0e10cSrcweir     */
355cdf0e10cSrcweir    private class ExitListener extends java.awt.event.WindowAdapter
356cdf0e10cSrcweir    {
357cdf0e10cSrcweir         /**
358cdf0e10cSrcweir          * windowClosed
359cdf0e10cSrcweir          *
360cdf0e10cSrcweir          * @param e A WindowEvent for a closed Window event
361cdf0e10cSrcweir          */
windowClosed( java.awt.event.WindowEvent e)362cdf0e10cSrcweir         public void windowClosed( java.awt.event.WindowEvent e)
363cdf0e10cSrcweir         {
364cdf0e10cSrcweir 			close();
365cdf0e10cSrcweir         }
366cdf0e10cSrcweir 
367cdf0e10cSrcweir         /**
368cdf0e10cSrcweir          * windowClosing for a closing window event
369cdf0e10cSrcweir          *
370cdf0e10cSrcweir          * @param e A WindowEvent for a closing window event
371cdf0e10cSrcweir          */
windowClosing( java.awt.event.WindowEvent e)372cdf0e10cSrcweir         public void windowClosing( java.awt.event.WindowEvent e)
373cdf0e10cSrcweir         {
374cdf0e10cSrcweir             ((java.awt.Window)e.getSource()).dispose();
375cdf0e10cSrcweir         }
376cdf0e10cSrcweir    }
377cdf0e10cSrcweir 
main(String args[])378cdf0e10cSrcweir    public static void main(String args[])
379cdf0e10cSrcweir    {
380cdf0e10cSrcweir        java.awt.Frame frame = new java.awt.Frame("OpenOffice.org Demo");
381cdf0e10cSrcweir        OOoBeanViewer aViewer = new OOoBeanViewer();
382cdf0e10cSrcweir 
383cdf0e10cSrcweir        frame.setLayout(new java.awt.BorderLayout());
384cdf0e10cSrcweir 
385cdf0e10cSrcweir        frame.addWindowListener( aViewer.new ExitListener() );
386cdf0e10cSrcweir 
387cdf0e10cSrcweir        aViewer.init();
388cdf0e10cSrcweir        aViewer.start();
389cdf0e10cSrcweir 
390cdf0e10cSrcweir        frame.add(aViewer);
391cdf0e10cSrcweir        frame.setLocation( 200, 200 );
392cdf0e10cSrcweir        frame.setSize( 800, 480 );
393cdf0e10cSrcweir        frame.show();
394cdf0e10cSrcweir    }
395cdf0e10cSrcweir }
396cdf0e10cSrcweir 
397