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