Java tutorial
/* * 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; } }