Avoid NPE when deleting a project
[phpeclipse.git] / net.sourceforge.phpeclipse.ui / src / net / sourceforge / phpeclipse / ui / editor / ShowExternalPreviewAction.java
1 package net.sourceforge.phpeclipse.ui.editor;
2
3 import net.sourceforge.phpeclipse.ui.IPreferenceConstants;
4 import net.sourceforge.phpeclipse.ui.WebUI;
5 import net.sourceforge.phpeclipse.ui.overlaypages.ProjectPrefUtil;
6 import net.sourceforge.phpeclipse.webbrowser.views.BrowserView;
7
8 import org.eclipse.core.resources.IFile;
9 import org.eclipse.core.runtime.IPath;
10 import org.eclipse.jface.preference.IPreferenceStore;
11 import org.eclipse.ui.IEditorInput;
12 import org.eclipse.ui.IFileEditorInput;
13 import org.eclipse.ui.IViewPart;
14 import org.eclipse.ui.IWorkbenchPage;
15 import org.eclipse.ui.texteditor.ITextEditor;
16 import org.eclipse.ui.texteditor.TextEditorAction;
17
18 /**
19  * ClassDeclaration that defines the action for parsing the current PHP file
20  */
21 public class ShowExternalPreviewAction extends TextEditorAction {
22   public final static int XML_TYPE = 1;
23
24   public final static int HTML_TYPE = 2;
25
26   public final static int SMARTY_TYPE = 3;
27
28   public final static int PHP_TYPE = 4;
29
30   private static ShowExternalPreviewAction instance = new ShowExternalPreviewAction();
31
32   /**
33    * Constructs and updates the action.
34    */
35   private ShowExternalPreviewAction() {
36     super(EditorMessages.getResourceBundle(), "ParserAction.", null); //$NON-NLS-1$
37     update();
38   }
39
40   public static ShowExternalPreviewAction getInstance() {
41     return instance;
42   }
43
44   /**
45    * Code called when the action is fired.
46    */
47   public void run() {
48     doRun(PHP_TYPE);
49   }
50
51   public void doRun(int type) {
52     IFile previewFile = getFile();
53     BrowserUtil.showPreview(previewFile, false, "");
54   }
55
56   public void refresh(int type) {
57     IFile fileToParse = getFile();
58     if (fileToParse == null) {
59       // should never happen
60       return;
61     }
62     boolean autoPreview = ProjectPrefUtil.getPreviewBooleanValue(fileToParse, IPreferenceConstants.PHP_AUTO_PREVIEW_DEFAULT);
63     boolean bringToTopPreview = ProjectPrefUtil.getPreviewBooleanValue(fileToParse,
64         IPreferenceConstants.PHP_BRING_TO_TOP_PREVIEW_DEFAULT);
65
66     if (autoPreview) {
67       IWorkbenchPage page = WebUI.getDefault().getActivePage();
68       try {
69         IViewPart part = page.findView(BrowserView.ID_BROWSER);
70         if (part == null) {
71           part = page.showView(BrowserView.ID_BROWSER);
72         } else {
73           if (bringToTopPreview) {
74             page.bringToTop(part);
75           }
76         }
77         if (part != null) {
78           ((BrowserView) part).refresh();
79         }
80       } catch (Exception e) {
81         //  PHPeclipsePlugin.log(e);
82       }
83     }
84   }
85
86   /**
87    * Finds the file that's currently opened in the PHP Text Editor
88    */
89   protected IFile getFile() {
90     ITextEditor editor = getTextEditor();
91     IEditorInput editorInput = null;
92     if (editor != null) {
93       editorInput = editor.getEditorInput();
94     }
95     if (editorInput instanceof IFileEditorInput)
96       return ((IFileEditorInput) editorInput).getFile();
97     // if nothing was found, which should never happen
98     return null;
99   }
100
101   public static String getLocalhostURL(IPreferenceStore store, IFile file) {
102     if (file != null) {
103       if (store == null) {
104         store = WebUI.getDefault().getPreferenceStore();
105       }
106       // IPath path = file.getFullPath();
107       String localhostURL = file.getLocation().toString();
108       String lowerCaseFileName = localhostURL.toLowerCase();
109       //  String documentRoot = store.getString(PHPeclipsePlugin.DOCUMENTROOT_PREF);
110       IPath documentRootPath = ProjectPrefUtil.getDocumentRoot(file.getProject());
111       String documentRoot = documentRootPath.toString().toLowerCase();
112       if (lowerCaseFileName.startsWith(documentRoot)) {
113         localhostURL = localhostURL.substring(documentRoot.length());
114       } else {
115         return null;
116       }
117       //    return store.getString(PHPeclipsePlugin.LOCALHOST_PREF) + localhostURL;
118       return ProjectPrefUtil.getMiscProjectsPreferenceValue(file.getProject(), IPreferenceConstants.PHP_LOCALHOST_PREF)
119           + localhostURL;
120     }
121     return "http://localhost";
122   }
123 }