Java tutorial
/******************************************************************************* * Copyright (c) {06/11/2005} {Christopher Thomas} * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA * * Contributors: * {Christopher Thomas} - initial API and implementation * chris.alex.thomas@gmail.com * {Danny Valliant} - Initial Hotkey support and Console output * xenden@users.sourceforge.net *******************************************************************************/ package com.antimatterstudios.esftp.actions; import com.antimatterstudios.esftp.Activator; import com.antimatterstudios.esftp.directory.FileList; import java.util.Vector; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IActionDelegate; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; abstract public class Selection implements IObjectActionDelegate { /** * The selection */ protected IStructuredSelection m_selection; protected Shell m_shell; protected Vector m_fileList; public Selection() { super(); // use for all the message dialogs you might want m_shell = new Shell(); m_fileList = new Vector(); } /** * @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart) */ public void setActivePart(IAction action, IWorkbenchPart targetPart) { } public abstract void run(IAction action); protected boolean buildList(int transferType) { //System.out.println("TRACE-> Base::buildList()"); Object res[] = m_selection.toArray(); for (int a = 0; a < res.length; a++) { if (res[a] instanceof IResource) { IResource r = (IResource) res[a]; FileList fl = findProject(r, transferType); if (fl == null) return false; String str = r.getLocation().toPortableString(); switch (r.getType()) { case IResource.FILE: fl.addFile(str); break; case IResource.FOLDER: case IResource.PROJECT: fl.addFolder((IContainer) r); break; //SftpPlugin.consolePrintln(str,1); } } } sendList(); return true; } private void sendList() { // loop through all the FileList objects, // removing them one by one, optimising // them and sending them to SftpPlugin to transfer while (m_fileList.size() > 0) { FileList fl = (FileList) m_fileList.remove(0); Activator.getDefault().add(fl); } } private FileList findProject(IResource r, int transferType) { //System.out.println("Base::findProject()"); IProject p = r.getProject(); FileList fl = null; // project is null? return null, most probable reason is that resource is a workbench if (p == null) return null; // loop through the projects you got, look for a match for (int a = 0; a < m_fileList.size(); a++) { fl = (FileList) m_fileList.get(a); if (p == fl.getProject()) { //System.out.println("Base::findProject(), found FileList, returning it"); // found one, return it return fl; } } //System.out.println("Base::findProject(), couldnt find FileList, create a new one"); // didnt find one, create a new one, add it, return it fl = new FileList(p); fl.init(transferType); //System.out.println("Base::findProject(), FileList initialised ok"); m_fileList.add(fl); return fl; } /** * Opens an error dialog with the specified message. * @param message the message to display. */ void showError(String message) { MessageDialog.openError(m_shell, "Error Deploying", "Error while deploying file.\nCause:" + message); } /** * Opens an error dialog with the message from the specified exception. * @param e an exception that contains a message */ void showError(Exception e) { showError(e.getMessage()); } /** * @see IActionDelegate#selectionChanged(IAction, ISelection) */ public void selectionChanged(IAction action, ISelection s) { if (s != null) { if (s instanceof IStructuredSelection) { m_selection = (IStructuredSelection) s; //SftpPlugin.consolePrintln(selection.toString(),1); //SftpPlugin.consolePrintln(ObjectDumper.dumpObject(selection),1); } // added this to capture if selection is the current editor view if (s instanceof ITextSelection) { IEditorPart part = Activator.getActivePage().getActiveEditor(); if (part != null) { IEditorInput input = part.getEditorInput(); IResource r = (IResource) input.getAdapter(IResource.class); if (r != null) { switch (r.getType()) { case IResource.FILE: m_selection = new StructuredSelection(r); //SftpPlugin.consolePrintln("Set:"+this.selection.toString(),1); break; } } // set selection to current editor file; } } else { //SftpPlugin.consolePrintln("Not Structure",1); //SftpPlugin.consolePrintln(ObjectDumper.dumpObject(selection),1); } } } }