org.playframework.playclipse.FilesAccess.java Source code

Java tutorial

Introduction

Here is the source code for org.playframework.playclipse.FilesAccess.java

Source

/*
 * Playclipse - Eclipse plugin for the Play! Framework
 * Copyright 2009 Zenexity
 *
 * This file is licensed under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.playframework.playclipse;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Iterator;

import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ITextEditor;

import fr.zenexity.pdt.editors.EditorHelper;

public class FilesAccess {
    // bran: these editors seem to be from the another plugin...
    public enum FileType {
        JAVA("org.eclipse.jdt.ui.CompilationUnitEditor"), HTML(
                "tk.eclipse.plugin.htmleditor.editors.HTMLEditor"), CSS(
                        "tk.eclipse.plugin.htmleditor.editors.HTMLEditor"), JS(
                                "tk.eclipse.plugin.htmleditor.editors.HTMLEditor");
        private String editorID;

        FileType(String editorID) {
            this.editorID = editorID;
        }
    }

    public static IEditorPart openFile(IFile file) throws CoreException {
        IEditorPart result = null;
        IWorkbenchPage page = getCurrentPage();
        IMarker marker;
        marker = file.createMarker(IMarker.TEXT);
        result = IDE.openEditor(page, marker);
        marker.delete();
        return result;
    }

    public static void goToLine(IEditorPart editor, int line) {
        IMarker marker = null;
        try {
            marker = getFile(editor).createMarker(IMarker.TEXT);
            marker.setAttribute(IMarker.LINE_NUMBER, line);
        } catch (CoreException e) {
            // Never happens! We got the file from the editor.
        }
        IDE.gotoMarker(editor, marker);
    }

    public static void goToCharacter(IEditorPart editor, int character) {
        IMarker marker = null;
        try {
            marker = getFile(editor).createMarker(IMarker.TEXT);
            marker.setAttribute(IMarker.CHAR_START, character);
            marker.setAttribute(IMarker.CHAR_END, character);
        } catch (CoreException e) {
            // Never happens! We got the file from the editor.
        }
        IDE.gotoMarker(editor, marker);
    }

    public static void goToLineContaining(IEditorPart editorPart, String text) {
        EditorHelper editor = new EditorHelper((ITextEditor) editorPart);
        String line;
        int lineNo = -1;
        int i = 0;
        int length = editor.lineCount();
        IDocument doc = editor.getDocument();
        try {
            while (i < length && lineNo < 0) {
                line = doc.get(doc.getLineOffset(i), doc.getLineLength(i));
                if (line.contains(text)) {
                    lineNo = i;
                }
                i++;
            }
        } catch (BadLocationException e) {
            // Should never happen
            e.printStackTrace();
        }
        FilesAccess.goToLine(editorPart, i);
    }

    public static void createAndOpen(IFile file, String content, FileType type) {
        IWorkbenchPage page = getCurrentPage();
        try {
            byte[] bytes = content.getBytes("UTF-8");
            InputStream source = new ByteArrayInputStream(bytes);
            // make sure the parents are there -- bran
            prepareFolder((IFolder) file.getParent());

            file.create(source, false, null);
            org.eclipse.ui.ide.IDE.openEditor(page, file);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void prepareFolder(IFolder folder) {
        IContainer parent = folder.getParent();
        try {
            parent.refreshLocal(IResource.DEPTH_INFINITE, null);
        } catch (CoreException e1) {
            e1.printStackTrace();
        }

        if (parent instanceof IFolder) {
            prepareFolder((IFolder) parent);
        }
        if (!folder.exists()) {
            try {
                folder.create(false, true, null);
            } catch (CoreException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    private static IFile getFile(IEditorPart editorPart) {
        return ((IFileEditorInput) editorPart.getEditorInput()).getFile();
    }

    private static IWorkbenchPage getCurrentPage() {
        IWorkbench wb = PlatformUI.getWorkbench();
        IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
        IWorkbenchPage page = win.getActivePage();
        return page;
    }

    // bran -- a few utility methods
    public static IProject getEditorProject() {
        try {
            IFile curfile = getActiveFile();
            if (curfile != null) {
                return curfile.getProject();
            }
        } catch (Exception e) {
        }
        return null;
    }

    public static IFile getActiveFile() {
        ITextEditor editor = getActiveEditor();
        try {
            IFile curfile = ((IFileEditorInput) editor.getEditorInput()).getFile();
            return curfile;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * @return a relative path from the project root, without the project name
     */
    public static String getActiveFilePath() {
        try {
            return getActiveFile().getProjectRelativePath().toString();
        } catch (Exception e) {
        }
        return null;
    }

    /**
     * @return
     */
    private static ITextEditor getActiveEditor() {
        ITextEditor editor = (ITextEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
                .getActiveEditor();
        return editor;
    }

    /**
     * good for extract project from pop menu selection in project explorer for
     * example.
     * 
     * @param event
     * @param project
     * @return
     */
    public static IProject getProjectFromMenuSelection(ExecutionEvent event) {
        IProject project = null;
        ISelection activeMenuSelection = HandlerUtil.getActiveMenuSelection(event);
        if (activeMenuSelection instanceof IStructuredSelection) {
            IStructuredSelection selection = (IStructuredSelection) activeMenuSelection;
            for (Iterator<?> it = ((IStructuredSelection) selection).iterator(); it.hasNext();) {
                Object element = it.next();
                if (element instanceof IProject) {
                    project = (IProject) element;
                } else if (element instanceof IJavaElement) {
                    IJavaElement res = (IJavaElement) element;
                    project = res.getJavaProject().getProject();
                    break;
                } else if (element instanceof IResource) {
                    IResource res = (IResource) element;
                    project = res.getProject();
                    break;
                } else if (element instanceof IAdaptable) {
                    project = (IProject) ((IAdaptable) element).getAdapter(IProject.class);
                }
            }
        }
        return project;
    }

    public static IFolder getJavaTagsFolder(IProject proj) {
        IFolder folder = proj.getFolder("app/japidviews/_javatags");
        if (folder.exists())
            return folder;
        else
            return null;
    }
}