KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > desktop > Editor


1 /*
2  * $Id: Editor.java,v 1.8 2005/05/09 18:56:23 neurolabs Exp $
3  * (c) Copyright 2000 wingS development team.
4  *
5  * This file is part of the wingS demo (http://j-wings.org).
6  *
7  * The wingS demo is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * Please see COPYING for the complete licence.
13  */

14
15 package desktop;
16
17 import org.wings.*;
18 import org.wings.event.SInternalFrameEvent;
19 import org.wings.event.SInternalFrameListener;
20 import org.wings.externalizer.AbstractExternalizeManager;
21 import org.wings.externalizer.ExternalizeManager;
22 import org.wings.io.Device;
23 import org.wings.resource.DynamicResource;
24 import org.wings.resource.FileResource;
25 import org.wings.script.JavaScriptListener;
26 import org.wings.script.ScriptListener;
27 import org.wings.session.SessionManager;
28
29 import java.awt.event.ActionEvent JavaDoc;
30 import java.awt.event.ActionListener JavaDoc;
31 import java.io.File JavaDoc;
32 import java.io.FileOutputStream JavaDoc;
33 import java.io.IOException JavaDoc;
34 import java.io.PrintWriter JavaDoc;
35 import java.util.HashMap JavaDoc;
36 import java.util.Map JavaDoc;
37
38 /**
39  * The Desktop example demonstrates the use of internal frames as well as
40  * file upload and download.
41  * SInternalFrames work very similar to their Swing pendants. The file upload
42  * is left to the SFileChooser. Beware, that if you use one or more input
43  * elements of type="file", you have to set the encoding of the surrounding form
44  * to "multipart/form-data". This is a requirement of html. Download is a bit
45  * tricky. The text has to be externalized for example by using the class
46  * {@see org.wings.FileResource}. A JavaScriptListener, that is hooked to the
47  * java script event "onload", is installed in the frame.
48  * Look at the source, especially the method "save".
49  * <p>
50  * As of now, the menu item "save" in the "file" menu does not work as expected.
51  * It is rendered as a href outside the form. Changes to text area don't take
52  * effect. We could use javascript again, to trigger the required form submit.
53  *
54  * @author <a HREF="mailto:hengels@mercatis.de">Holger Engels</a>
55  * @version $Revision: 1.8 $
56  */

57 public class Editor
58     extends SInternalFrame
59     implements SInternalFrameListener
60 {
61     private DynamicResource saveResource;
62     private SMenuBar menuBar;
63     private SToolbar toolbar;
64     private STextArea textArea;
65
66     private String JavaDoc backup;
67     private String JavaDoc clip;
68
69     public Editor() {
70         menuBar = createMenu();
71         SContainer contentPane = getContentPane();
72         contentPane.setLayout(new SFlowDownLayout());
73         contentPane.add(menuBar);
74         toolbar = createToolbar();
75
76         textArea = new STextArea();
77         textArea.setColumns(80);
78         textArea.setRows(24);
79         textArea.setPreferredSize(new SDimension("100%", null));
80         
81         SForm form = new SForm(new SFlowDownLayout());
82         form.add(toolbar);
83         form.add(textArea);
84         contentPane.add(form);
85
86         saveResource = new EditorDynamicResource();
87
88         SIcon icon = new SURLIcon("../icons/penguin.png");
89         setIcon(icon);
90         addInternalFrameListener(this);
91     }
92
93     protected SMenuBar createMenu() {
94         SMenuItem saveItem = new SMenuItem("Save");
95         saveItem.addActionListener(new ActionListener JavaDoc() {
96             public void actionPerformed(ActionEvent JavaDoc evt) {
97                 save();
98             }
99         });
100         SMenuItem revertItem = new SMenuItem("Revert");
101         revertItem.addActionListener(new ActionListener JavaDoc() {
102             public void actionPerformed(ActionEvent JavaDoc evt) {
103                 revert();
104             }
105         });
106         SMenuItem closeItem = new SMenuItem("Close");
107         closeItem.addActionListener(new ActionListener JavaDoc() {
108             public void actionPerformed(ActionEvent JavaDoc evt) {
109                 close();
110             }
111         });
112
113         SMenu fileMenu = new SMenu("File");
114         fileMenu.add(saveItem);
115         fileMenu.add(revertItem);
116         fileMenu.add(closeItem);
117
118         SMenuItem cutItem = new SMenuItem("Cut");
119         cutItem.addActionListener(new ActionListener JavaDoc() {
120             public void actionPerformed(ActionEvent JavaDoc evt) {
121                 cut();
122             }
123         });
124         SMenuItem copyItem = new SMenuItem("Copy");
125         copyItem.addActionListener(new ActionListener JavaDoc() {
126             public void actionPerformed(ActionEvent JavaDoc evt) {
127                 copy();
128             }
129         });
130         SMenuItem pasteItem = new SMenuItem("Paste");
131         pasteItem.addActionListener(new ActionListener JavaDoc() {
132             public void actionPerformed(ActionEvent JavaDoc evt) {
133                 paste();
134             }
135         });
136
137         SMenu editMenu = new SMenu("Edit");
138         editMenu.add(cutItem);
139         editMenu.add(copyItem);
140         editMenu.add(pasteItem);
141
142         SMenuBar menuBar = new SMenuBar();
143         menuBar.add(fileMenu);
144         menuBar.add(editMenu);
145
146         return menuBar;
147     }
148
149     protected SToolbar createToolbar() {
150         try {
151             SButton saveButton = new SButton(new SURLIcon("../icons/filesave.png"));
152             saveButton.setToolTipText("save");
153             saveButton.addActionListener(new ActionListener JavaDoc() {
154                 public void actionPerformed(ActionEvent JavaDoc evt) {
155                     save();
156                 }
157             });
158
159             SButton revertButton = new SButton(new SURLIcon("../icons/filerevert.png"));
160             revertButton.setToolTipText("revert");
161             revertButton.addActionListener(new ActionListener JavaDoc() {
162                 public void actionPerformed(ActionEvent JavaDoc evt) {
163                     revert();
164                 }
165             });
166             SButton closeButton = new SButton(new SURLIcon("../icons/fileclose.png"));
167             closeButton.setToolTipText("close");
168             closeButton.addActionListener(new ActionListener JavaDoc() {
169                 public void actionPerformed(ActionEvent JavaDoc evt) {
170                     close();
171                 }
172             });
173
174             SButton cutButton = new SButton(new SURLIcon("../icons/editcut.png"));
175             cutButton.setToolTipText("cut");
176             cutButton.addActionListener(new ActionListener JavaDoc() {
177                 public void actionPerformed(ActionEvent JavaDoc evt) {
178                     cut();
179                 }
180             });
181             SButton copyButton = new SButton(new SURLIcon("../icons/editcopy.png"));
182             copyButton.setToolTipText("copy");
183             copyButton.addActionListener(new ActionListener JavaDoc() {
184                 public void actionPerformed(ActionEvent JavaDoc evt) {
185                     copy();
186                 }
187             });
188             SButton pasteButton = new SButton(new SURLIcon("../icons/editpaste.png"));
189             pasteButton.setToolTipText("paste");
190             pasteButton.addActionListener(new ActionListener JavaDoc() {
191                 public void actionPerformed(ActionEvent JavaDoc evt) {
192                     paste();
193                 }
194             });
195
196             SToolbar toolbar = new SToolbar();
197             toolbar.add(saveButton);
198             toolbar.add(revertButton);
199             toolbar.add(closeButton);
200             toolbar.add(new SLabel("<html>&nbsp;"));
201             toolbar.add(cutButton);
202             toolbar.add(copyButton);
203             toolbar.add(pasteButton);
204
205             return toolbar;
206         }
207         catch (Exception JavaDoc e) {
208             System.err.println(e.getMessage());
209             e.printStackTrace(System.err);
210         }
211         return new SToolbar();
212     }
213
214     public void setText(String JavaDoc text) {
215         textArea.setText(text);
216     }
217     public String JavaDoc getText() { return textArea.getText(); }
218
219     public void setBackup(String JavaDoc backup) {
220         this.backup = backup;
221     }
222     public String JavaDoc getBackup() { return backup; }
223
224     public void save() {
225         try {
226             //logger.info("save");
227
// write editor content to a temporary file
228
File JavaDoc file = File.createTempFile("wings", "txt");
229             PrintWriter JavaDoc out = new PrintWriter JavaDoc(new FileOutputStream JavaDoc(file));
230             out.print(textArea.getText());
231             out.close();
232
233             // create a file resource
234
FileResource resource = new FileResource(file);
235             // we only request this once, thats it.
236
resource.setExternalizerFlags(resource.getExternalizerFlags()
237                                           | ExternalizeManager.REQUEST);
238             // advice the browser to pop the save dialog
239
Map JavaDoc headers = new HashMap JavaDoc();
240             headers.put("Content-Disposition", "attachment; filename=blub");
241             resource.setHeaders(headers.entrySet());
242
243             // java script, that is executed "onload"; loads the file resource and triggers
244
// the named event "clear=X"
245
RequestURL url = (RequestURL) resource.getURL();
246             url.addParameter("clear=X");
247
248             final ScriptListener script = new JavaScriptListener("onload", "parent.location='" + url + "'");
249             parentFrame.addScriptListener(script);
250
251             // register a request listener, that handles the named event "clear"
252
getSession().getDispatcher().register(new LowLevelEventListener() {
253                     public void processLowLevelEvent(String JavaDoc name, String JavaDoc[] values) {
254                         //logger.info("remove java script");
255
parentFrame.removeScriptListener(script);
256                     }
257                     
258                     public String JavaDoc getName() { return "clear"; }
259
260                     public String JavaDoc getLowLevelEventId() { return ""; }
261                     public String JavaDoc getEncodedLowLevelEventId() { return ""; }
262                     
263                     public void fireIntermediateEvents() {}
264                     public void fireFinalEvents() {}
265                     public boolean isEnabled() { return true; }
266
267                 public boolean checkEpoch() {
268                     return true;
269                 }
270
271                 public boolean isEpochCheckEnabled() { return true; }
272                 });
273
274         }
275         catch (IOException JavaDoc e) {
276             System.err.println(e.getMessage());
277             e.printStackTrace(System.err);
278         }
279     }
280
281     public void revert() {
282         textArea.setText(backup);
283     }
284
285     public void close() {
286         super.dispose();
287     }
288
289     public void cut() {
290         clip = textArea.getText();
291         textArea.setText("");
292     }
293
294     public void copy() {
295         clip = textArea.getText();
296     }
297
298     public void paste() {
299         if (clip != null) {
300             textArea.setText(textArea.getText() + clip);
301         }
302     }
303
304     public void internalFrameClosed(SInternalFrameEvent e) {
305         close();
306     }
307
308     public void internalFrameOpened(SInternalFrameEvent e) {}
309     public void internalFrameIconified(SInternalFrameEvent e) {}
310     public void internalFrameDeiconified(SInternalFrameEvent e) {}
311     public void internalFrameMaximized(SInternalFrameEvent e) {}
312     public void internalFrameUnmaximized(SInternalFrameEvent e) {}
313
314     private class EditorDynamicResource extends DynamicResource
315     {
316         String JavaDoc id;
317
318         public EditorDynamicResource() {
319             super(null, "txt", "text/unknown");
320         }
321
322         public void write(Device out)
323             throws IOException JavaDoc
324         {
325             out.print(textArea.getText());
326         }
327
328         public String JavaDoc getId() {
329             if (id == null) {
330                 ExternalizeManager ext = SessionManager.getSession().getExternalizeManager();
331                 Map JavaDoc headers = new HashMap JavaDoc();
332                 headers.put("Content-Disposition", "attachment; filename=blub");
333                 id = ext.getId(ext.externalize(this, headers.entrySet(), AbstractExternalizeManager.REQUEST));
334                 //logger.debug("new " + this.getClass().getName() + " with id " + id);
335
}
336             return id;
337         }
338     }
339 }
340
Popular Tags