/* FileOpenerService.java * :tabSize=4:indentSize=4:noTabs=false: * :folding=sidekick:collapseFolds=1: * * Copyright © 2012 Alan Ezust * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package org.jedit.core; import org.gjt.sp.jedit.ServiceManager; import org.gjt.sp.jedit.View; import org.gjt.sp.jedit.jEdit; /** File Opener Service. * * FastOpen 2.5 and SmartOpen 1.1 offer this as a service to * other plugins such as ErrorList 2.0 that can use it to open * files when, for example, the error message only provides * a filename and not an absolute path. * * A response to SF.net ticket #3481157 * * @since jEdit 5.0pre1 * @author Alan Ezust */ abstract public class FileOpenerService { /** Opens a file in jEdit, given only a filename and no path. * May cause a dialog to popup asking the user for a choice. * @param fileName the file name to search for * @param view the parent View */ abstract public void openFile(String fileName, View view); /** Searches available FileOpenerServices and uses the first, or the * preferred one based on the "fileopener.service" property. * * You can set a preferred FileOpener from the Console beanshell like this: * <pre> * jEdit.setProperty("fileopener.service", "FastOpen"); // or "SmartOpen" * </pre> * This setting is ignored if there is only one FileOpenerService available. * * @param fileName the file name to search for * @param view the parent View */ static public void open(String fileName, View view) { String[] finders = ServiceManager.getServiceNames(FileOpenerService.class); // No installed finders, do nothing if (finders.length == 0) return; String myFinder = finders[0]; // See if user set a preferred service if (finders.length > 1) myFinder = jEdit.getProperty("fileopener.service", myFinder); // try to get the service Object obj = ServiceManager.getService(FileOpenerService.class, myFinder); // Preferred service is not found, use the only one available instead if ((obj == null) && (!myFinder.equals(finders[0]))) obj = ServiceManager.getService(FileOpenerService.class, finders[0]); // Open the file! ((FileOpenerService)obj).openFile(fileName, view); } }