Search in sources :

Example 1 with AppDescriptor

use of org.phoebus.framework.spi.AppDescriptor in project phoebus by ControlSystemStudio.

the class PhoebusApplication method findApplication.

/**
 * @param resource Resource
 * @param prompt   Prompt if there are multiple applications, or use first one?
 * @return Application for opening resource, or <code>null</code> if none found
 */
private AppResourceDescriptor findApplication(final URI resource, final boolean prompt) {
    // Does resource request a specific application?
    final String app_name = ResourceParser.getAppName(resource);
    if (app_name != null) {
        final AppDescriptor app = ApplicationService.findApplication(app_name);
        if (app == null) {
            logger.log(Level.WARNING, "Unknown application '" + app_name + "'");
            return null;
        }
        if (app instanceof AppResourceDescriptor)
            return (AppResourceDescriptor) app;
        else {
            logger.log(Level.WARNING, "'" + app_name + "' application does not handle resources");
            return null;
        }
    }
    // Check all applications
    final List<AppResourceDescriptor> applications = ApplicationService.getApplications(resource);
    if (applications.isEmpty()) {
        logger.log(Level.WARNING, "No application found for opening " + resource);
        return null;
    }
    // Only one app?
    if (applications.size() == 1)
        return applications.get(0);
    // Pick default application based on preference setting?
    if (!prompt) {
        for (AppResourceDescriptor app : applications) for (String part : Preferences.default_apps) if (app.getName().contains(part))
            return app;
        // , not just the first one, which may be undefined
        logger.log(Level.WARNING, "No default application found for opening " + resource + ", using first one");
        return applications.get(0);
    }
    // Prompt user which application to use for this resource
    final List<String> options = applications.stream().map(app -> app.getDisplayName()).collect(Collectors.toList());
    final Dialog<String> which = new ListPickerDialog(main_stage.getScene().getRoot(), options, default_application);
    which.setTitle(Messages.OpenTitle);
    which.setHeaderText(Messages.OpenHdr + resource);
    which.setWidth(300);
    which.setHeight(300);
    final Optional<String> result = which.showAndWait();
    if (!result.isPresent())
        return null;
    default_application = result.get();
    return applications.get(options.indexOf(result.get()));
}
Also used : Button(javafx.scene.control.Button) JobManager(org.phoebus.framework.jobs.JobManager) Arrays(java.util.Arrays) CheckMenuItem(javafx.scene.control.CheckMenuItem) DockPaneListener(org.phoebus.ui.docking.DockPaneListener) VBox(javafx.scene.layout.VBox) KeyCombination(javafx.scene.input.KeyCombination) Preferences(org.phoebus.ui.Preferences) Application(javafx.application.Application) FullScreenAction(org.phoebus.ui.javafx.FullScreenAction) MenuTreeNode(org.phoebus.ui.application.MenuEntryService.MenuTreeNode) AlertType(javafx.scene.control.Alert.AlertType) Map(java.util.Map) DockPane(org.phoebus.ui.docking.DockPane) URI(java.net.URI) Alert(javafx.scene.control.Alert) MenuEntry(org.phoebus.ui.spi.MenuEntry) ImageCache(org.phoebus.ui.javafx.ImageCache) ResponsivenessMonitor(org.phoebus.ui.monitoring.ResponsivenessMonitor) MenuItem(javafx.scene.control.MenuItem) OpenHelp(org.phoebus.ui.help.OpenHelp) Collection(java.util.Collection) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) Platform(javafx.application.Platform) SeparatorMenuItem(javafx.scene.control.SeparatorMenuItem) List(java.util.List) SubJobMonitor(org.phoebus.framework.jobs.SubJobMonitor) MenuButton(javafx.scene.control.MenuButton) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) Optional(java.util.Optional) BorderPane(javafx.scene.layout.BorderPane) Welcome(org.phoebus.ui.welcome.Welcome) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) DialogHelper(org.phoebus.ui.dialog.DialogHelper) ButtonType(javafx.scene.control.ButtonType) MouseEvent(javafx.scene.input.MouseEvent) JobMonitor(org.phoebus.framework.jobs.JobMonitor) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) HashMap(java.util.HashMap) AuthorizationService(org.phoebus.security.authorization.AuthorizationService) ApplicationService(org.phoebus.framework.workbench.ApplicationService) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) StatusBar(org.phoebus.ui.statusbar.StatusBar) ResourceParser(org.phoebus.framework.util.ResourceParser) OpenFileDialog(org.phoebus.ui.dialog.OpenFileDialog) WeakReference(java.lang.ref.WeakReference) Tooltip(javafx.scene.control.Tooltip) DockItemWithInput(org.phoebus.ui.docking.DockItemWithInput) MementoHelper(org.phoebus.ui.internal.MementoHelper) KeyCode(javafx.scene.input.KeyCode) ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog) Dialog(javafx.scene.control.Dialog) MenuBar(javafx.scene.control.MenuBar) PlatformInfo(org.phoebus.ui.javafx.PlatformInfo) Iterator(java.util.Iterator) ToolBar(javafx.scene.control.ToolBar) DockStage(org.phoebus.ui.docking.DockStage) Node(javafx.scene.Node) MementoTree(org.phoebus.framework.persistence.MementoTree) DockItem(org.phoebus.ui.docking.DockItem) OpenAbout(org.phoebus.ui.help.OpenAbout) FileInputStream(java.io.FileInputStream) File(java.io.File) Menu(javafx.scene.control.Menu) KeyCodeCombination(javafx.scene.input.KeyCodeCombination) TimeUnit(java.util.concurrent.TimeUnit) ActionEvent(javafx.event.ActionEvent) Stage(javafx.stage.Stage) XMLMementoTree(org.phoebus.framework.persistence.XMLMementoTree) ImageView(javafx.scene.image.ImageView) Window(javafx.stage.Window) Locations(org.phoebus.framework.workbench.Locations) Comparator(java.util.Comparator) Image(javafx.scene.image.Image) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog)

Example 2 with AppDescriptor

use of org.phoebus.framework.spi.AppDescriptor in project phoebus by ControlSystemStudio.

the class PhoebusApplication method startApplications.

/**
 * Start all applications
 *
 * @param monitor
 */
private void startApplications(final JobMonitor monitor) {
    final Collection<AppDescriptor> apps = ApplicationService.getApplications();
    monitor.beginTask(Messages.MonitorTaskApps, apps.size());
    for (AppDescriptor app : apps) {
        monitor.updateTaskName(Messages.MonitorTaskStarting + app.getDisplayName());
        try {
            app.start();
        } catch (Throwable ex) {
            logger.log(Level.SEVERE, app.getDisplayName() + " startup failed", ex);
        }
        monitor.worked(1);
    }
}
Also used : AppDescriptor(org.phoebus.framework.spi.AppDescriptor)

Example 3 with AppDescriptor

use of org.phoebus.framework.spi.AppDescriptor in project phoebus by ControlSystemStudio.

the class ApplicationLauncherService method findApplication.

/**
 * Locate suitable application
 *
 * @param resource
 *            Resource {@link URI}
 * @param prompt
 *            Prompt if there are multiple applications, or use first one?
 * @param stage
 *            If prompt is enabled, a selection dialog will be launched
 *            positioned next to the provided stage. If <code>null</code> then the
 *            default or first application will be used
 * @return Application for opening resource, or <code>null</code> if none
 *         found
 */
public static AppResourceDescriptor findApplication(final URI resource, final boolean prompt, final Stage stage) {
    // Does resource request a specific application?
    final String app_name = ResourceParser.getAppName(resource);
    if (app_name != null) {
        final AppDescriptor app = ApplicationService.findApplication(app_name);
        if (app == null) {
            logger.log(Level.WARNING, "Unknown application '" + app_name + "'");
            return null;
        }
        if (app instanceof AppResourceDescriptor)
            return (AppResourceDescriptor) app;
        else {
            logger.log(Level.WARNING, "'" + app_name + "' application does not handle resources");
            return null;
        }
    }
    // Check all applications
    final List<AppResourceDescriptor> applications = ApplicationService.getApplications(resource);
    if (applications.isEmpty()) {
        logger.log(Level.INFO, "No application found for opening " + resource);
        return null;
    }
    // Only one app?
    if (applications.size() == 1)
        return applications.get(0);
    // Pick default application based on preference setting?
    if (!prompt || stage == null) {
        for (AppResourceDescriptor app : applications) for (String part : Preferences.default_apps) if (app.getName().contains(part))
            return app;
        // , not just the first one, which may be undefined
        final AppResourceDescriptor first = applications.get(0);
        logger.log(Level.WARNING, "No default application found for opening " + resource + ", using first one, \"" + first.getDisplayName() + "\"");
        return first;
    }
    // Prompt user which application to use for this resource
    final List<String> options = applications.stream().map(app -> app.getDisplayName()).collect(Collectors.toList());
    final Dialog<String> which = new ListPickerDialog(stage.getScene().getRoot(), options, null);
    which.setTitle(Messages.OpenTitle);
    which.setHeaderText(Messages.OpenHdr + resource);
    which.setWidth(300);
    which.setHeight(300);
    final Optional<String> result = which.showAndWait();
    if (!result.isPresent())
        return null;
    return applications.get(options.indexOf(result.get()));
}
Also used : ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog) Dialog(javafx.scene.control.Dialog) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) Logger(java.util.logging.Logger) Collectors(java.util.stream.Collectors) ApplicationService(org.phoebus.framework.workbench.ApplicationService) File(java.io.File) Level(java.util.logging.Level) Preferences(org.phoebus.ui.Preferences) List(java.util.List) Stage(javafx.stage.Stage) ResourceParser(org.phoebus.framework.util.ResourceParser) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) Optional(java.util.Optional) URI(java.net.URI) AppDescriptor(org.phoebus.framework.spi.AppDescriptor) AppResourceDescriptor(org.phoebus.framework.spi.AppResourceDescriptor) ListPickerDialog(org.phoebus.ui.dialog.ListPickerDialog)

Example 4 with AppDescriptor

use of org.phoebus.framework.spi.AppDescriptor in project phoebus by ControlSystemStudio.

the class ApplicationLauncherService method launchApp.

/**
 * Launch application
 *
 * @param appName name of the application to be launched
 */
public static void launchApp(final String appName) {
    final AppDescriptor app = ApplicationService.findApplication(appName);
    if (app == null) {
        logger.log(Level.SEVERE, "Unknown application '" + appName + "'");
        return;
    }
    app.create();
}
Also used : AppDescriptor(org.phoebus.framework.spi.AppDescriptor)

Example 5 with AppDescriptor

use of org.phoebus.framework.spi.AppDescriptor in project phoebus by ControlSystemStudio.

the class FileTreeCell method lookup_icon.

private void lookup_icon(final File file) {
    final URI resource = ResourceParser.getURI(file);
    final AppDescriptor app = ApplicationLauncherService.findApplication(resource, false, null);
    if (app == null)
        return;
    final URL icon_url = app.getIconURL();
    if (icon_url == null)
        return;
    final ImageView icon = ImageCache.getImageView(icon_url);
    if (icon != null)
        Platform.runLater(() -> setGraphic(icon));
}
Also used : AppDescriptor(org.phoebus.framework.spi.AppDescriptor) ImageView(javafx.scene.image.ImageView) URI(java.net.URI) URL(java.net.URL)

Aggregations

AppDescriptor (org.phoebus.framework.spi.AppDescriptor)7 File (java.io.File)3 URI (java.net.URI)3 List (java.util.List)3 Logger (java.util.logging.Logger)3 AppResourceDescriptor (org.phoebus.framework.spi.AppResourceDescriptor)3 FileInputStream (java.io.FileInputStream)2 ArrayList (java.util.ArrayList)2 Optional (java.util.Optional)2 Level (java.util.logging.Level)2 Collectors (java.util.stream.Collectors)2 Dialog (javafx.scene.control.Dialog)2 Stage (javafx.stage.Stage)2 ResourceParser (org.phoebus.framework.util.ResourceParser)2 ApplicationService (org.phoebus.framework.workbench.ApplicationService)2 Preferences (org.phoebus.ui.Preferences)2 ListPickerDialog (org.phoebus.ui.dialog.ListPickerDialog)2 FileOutputStream (java.io.FileOutputStream)1 WeakReference (java.lang.ref.WeakReference)1 Method (java.lang.reflect.Method)1