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