Adding patch from pteague for templates.
[phpeclipse.git] / net.sourceforge.phpeclipse.webbrowser / src / net / sourceforge / phpeclipse / webbrowser / WebBrowserEditorInput.java
1 /**
2  * Copyright (c) 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  �*
8  * Contributors:
9  *    IBM - Initial API and implementation
10  */
11 package net.sourceforge.phpeclipse.webbrowser;
12
13 import java.net.URL;
14
15 import net.sourceforge.phpeclipse.webbrowser.internal.ImageResource;
16 import net.sourceforge.phpeclipse.webbrowser.internal.Trace;
17 import net.sourceforge.phpeclipse.webbrowser.internal.WebBrowserPreference;
18 import net.sourceforge.phpeclipse.webbrowser.internal.WebBrowserUIPlugin;
19
20 import org.eclipse.core.runtime.IAdaptable;
21 import org.eclipse.jface.resource.ImageDescriptor;
22 import org.eclipse.ui.IElementFactory;
23 import org.eclipse.ui.IMemento;
24 import org.eclipse.ui.IPersistableElement;
25
26 /**
27  * The editor input for the integrated web browser.
28  */
29 public class WebBrowserEditorInput implements IWebBrowserEditorInput,
30                 IPersistableElement, IElementFactory {
31         // --- constants to pass into constructor ---
32
33         // if used, the toolbar will be available
34         public static final int SHOW_TOOLBAR = 1 << 1;
35
36         // if used, the status bar will be available
37         public static final int SHOW_STATUSBAR = 1 << 2;
38
39         // if used, this input will always force a new page
40         // and will never reuse an open Web browser
41         public static final int FORCE_NEW_PAGE = 1 << 3;
42
43         // if used, the original URL will be saved and
44         // the page can reopen to the same URL after
45         // shutting down
46         public static final int SAVE_URL = 1 << 5;
47
48         // if used, the browser will be transient and will not appear
49         // in the most recently used file list, nor will it reopen after
50         // restarting Eclipse
51         public static final int TRANSIENT = 1 << 6;
52
53         public static final int SHOW_ALL = SHOW_TOOLBAR | SHOW_STATUSBAR;
54
55         private static final String ELEMENT_FACTORY_ID = "net.sourceforge.phpeclipse.webbrowser.elementFactory";
56
57         private static final String MEMENTO_URL = "url";
58
59         private static final String MEMENTO_STYLE = "style";
60
61         private static final String MEMENTO_ID = "id";
62
63         private URL url;
64
65         private int style;
66
67         private String id = null;
68
69         /**
70          * WebBrowser editor input for the homepage.
71          */
72         public WebBrowserEditorInput() {
73                 this(null);
74         }
75
76         /**
77          * WebBrowserEditorInput constructor comment.
78          */
79         public WebBrowserEditorInput(URL url) {
80                 this(url, SHOW_ALL | SAVE_URL);
81         }
82
83         /**
84          * WebBrowserEditorInput constructor comment.
85          */
86         public WebBrowserEditorInput(URL url, int style) {
87                 super();
88                 this.url = url;
89                 this.style = style;
90         }
91
92         /**
93          * WebBrowserEditorInput constructor comment.
94          */
95         public WebBrowserEditorInput(URL url, int style, String browserId) {
96                 super();
97                 this.url = url;
98                 this.style = style;
99                 this.id = browserId;
100         }
101
102         /**
103          * WebBrowserEditorInput constructor comment.
104          */
105         public WebBrowserEditorInput(URL url, boolean b) {
106                 this(url);
107         }
108
109         /**
110          * Returns true if this page can reuse the browser that the given input is
111          * being displayed in, or false if it should open up in a new page.
112          * 
113          * @param input
114          *            net.sourceforge.phpeclipse.webbrowser.IWebBrowserEditorInput
115          * @return boolean
116          */
117         public boolean canReplaceInput(IWebBrowserEditorInput input) {
118                 Trace.trace(Trace.FINEST, "canReplaceInput " + this + " " + input);
119                 if ((style & FORCE_NEW_PAGE) != 0)
120                         return false;
121                 else if (input.isToolbarVisible() != isToolbarVisible())
122                         return false;
123                 else if (input.isStatusbarVisible() != isStatusbarVisible())
124                         return false;
125                 else if (id != null) {
126                         if (!(input instanceof WebBrowserEditorInput))
127                                 return false;
128                         String bid = ((WebBrowserEditorInput) input).getBrowserId();
129                         return id.equals(bid);
130                 } else
131                         return false;
132         }
133
134         /**
135          * Creates an <code>IElement</code> from the state captured within an
136          * <code>IMemento</code>.
137          * 
138          * @param memento
139          *            a memento containing the state for an element
140          * @return an element, or <code>null</code> if the element could not be
141          *         created
142          */
143         public IAdaptable createElement(IMemento memento) {
144                 URL url2 = null;
145                 try {
146                         url2 = new URL(WebBrowserPreference.getHomePageURL());
147                 } catch (Exception e) {
148                         // could not determine the URL
149                 }
150
151                 int newStyle = SHOW_TOOLBAR | SHOW_STATUSBAR;
152                 try {
153                         newStyle = memento.getInteger(MEMENTO_STYLE).intValue();
154
155                         if ((newStyle & SAVE_URL) != 0)
156                                 url = new URL(memento.getString(MEMENTO_URL));
157                 } catch (Exception e) {
158                         // could not determine the style
159                 }
160
161                 String id2 = null;
162                 try {
163                         id2 = memento.getString(MEMENTO_ID);
164                         if (id2 != null && id2.length() < 1)
165                                 id2 = null;
166                 } catch (Exception e) {
167                 }
168
169                 return new WebBrowserEditorInput(url2, newStyle, id2);
170         }
171
172         /**
173          * Indicates whether some other object is "equal to" this one. In this case
174          * it means that the underlying IFolders are equal.
175          */
176         public boolean equals(Object obj) {
177                 if (this == obj)
178                         return true;
179                 if (!(obj instanceof WebBrowserEditorInput))
180                         return false;
181                 WebBrowserEditorInput other = (WebBrowserEditorInput) obj;
182
183                 if (url != null && !url.equals(obj))
184                         return false;
185
186                 return canReplaceInput(other);
187         }
188
189         /**
190          * Returns whether the editor input exists.
191          * <p>
192          * This method is primarily used to determine if an editor input should
193          * appear in the "File Most Recently Used" menu. An editor input will appear
194          * in the list until the return value of <code>exists</code> becomes
195          * <code>false</code> or it drops off the bottom of the list.
196          * 
197          * @return <code>true</code> if the editor input exists;
198          *         <code>false</code> otherwise
199          */
200         public boolean exists() {
201                 if ((style & TRANSIENT) != 0)
202                         return false;
203                 else
204                         return true;
205         }
206
207         /**
208          * Returns an object which is an instance of the given class associated with
209          * this object. Returns <code>null</code> if no such object can be found.
210          * 
211          * @param adapter
212          *            the adapter class to look up
213          * @return a object castable to the given class, or <code>null</code> if
214          *         this object does not have an adapter for the given class
215          */
216         public Object getAdapter(Class adapter) {
217                 return null;
218         }
219
220         /**
221          * Returns the ID of an element factory which can be used to recreate this
222          * object. An element factory extension with this ID must exist within the
223          * workbench registry.
224          * 
225          * @return the element factory ID
226          */
227         public String getFactoryId() {
228                 return ELEMENT_FACTORY_ID;
229         }
230
231         public ImageDescriptor getImageDescriptor() {
232                 return ImageResource
233                                 .getImageDescriptor(ImageResource.IMG_INTERNAL_BROWSER);
234         }
235
236         /**
237          * Returns the name of this editor input for display purposes.
238          * <p>
239          * For instance, if the fully qualified input name is
240          * <code>"a\b\MyFile.gif"</code>, the return value would be just
241          * <code>"MyFile.gif"</code>.
242          * 
243          * @return the file name string
244          */
245         public String getName() {
246                 return WebBrowserUIPlugin.getResource("%viewWebBrowserTitle");
247         }
248
249         /*
250          * Returns an object that can be used to save the state of this editor
251          * input.
252          * 
253          * @return the persistable element, or <code>null</code> if this editor
254          * input cannot be persisted
255          */
256         public IPersistableElement getPersistable() {
257                 if ((style & TRANSIENT) != 0)
258                         return null;
259                 else
260                         return this;
261         }
262
263         public String getToolTipText() {
264                 if (url != null)
265                         return url.toExternalForm();
266                 else
267                         return WebBrowserUIPlugin.getResource("%viewWebBrowserTitle");
268         }
269
270         /**
271          * Returns the url.
272          * 
273          * @return java.net.URL
274          */
275         public URL getURL() {
276                 return url;
277         }
278
279         /**
280          * Returns the browser id. Browsers with a set id will always & only be
281          * replaced by browsers with the same id.
282          * 
283          * @return String
284          */
285         public String getBrowserId() {
286                 return id;
287         }
288
289         /**
290          * Returns true if the status bar should be shown.
291          * 
292          * @return boolean
293          */
294         public boolean isStatusbarVisible() {
295                 return (style & SHOW_STATUSBAR) != 0;
296         }
297
298         /**
299          * Returns true if the toolbar should be shown.
300          * 
301          * @return boolean
302          */
303         public boolean isToolbarVisible() {
304                 return (style & SHOW_TOOLBAR) != 0;
305         }
306
307         /**
308          * Saves the state of an element within a memento.
309          * 
310          * @param memento
311          *            the storage area for element state
312          */
313         public void saveState(IMemento memento) {
314                 if ((style & SAVE_URL) != 0 && url != null)
315                         memento.putString(MEMENTO_URL, url.toExternalForm());
316
317                 memento.putInteger(MEMENTO_STYLE, style);
318
319                 if (id != null)
320                         memento.putString(MEMENTO_ID, id);
321         }
322
323         /**
324          * Converts this object to a string.
325          * 
326          * @return java.lang.String
327          */
328         public String toString() {
329                 return "WebBrowserEditorInput[" + url + " " + style + " " + id + "]";
330         }
331 }