|
What this is
Other links
The source code/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.pde.internal.ui.launcher; import java.io.File; import java.util.ArrayList; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.runtime.*; import org.eclipse.debug.core.*; import org.eclipse.debug.core.model.IProcess; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.pde.internal.ui.*; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.*; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.internal.views.log.LogView; public class LaunchListener implements ILaunchListener, IDebugEventSetListener { private ArrayList managedLaunches; // maximum log file size public static final long MAX_FILE_LENGTH = 1024 * 1024; // different ways to open the error log public static final int OPEN_IN_ERROR_LOG_VIEW = 0; public static final int OPEN_IN_SYSTEM_EDITOR = 1; public LaunchListener() { managedLaunches = new ArrayList(); } public void manage(ILaunch launch) { if (managedLaunches.size() == 0) hookListener(true); if (!managedLaunches.contains(launch)) managedLaunches.add(launch); } /** * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch) */ public void launchRemoved(ILaunch launch) { update(launch, true); } /** * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch) */ public void launchAdded(ILaunch launch) { } /** * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch) */ public void launchChanged(ILaunch launch) { } private void update(ILaunch launch, boolean remove) { if (managedLaunches.contains(launch)) { if (remove || launch.isTerminated()) { managedLaunches.remove(launch); if (managedLaunches.size() == 0) { hookListener(false); } } } } private void hookListener(boolean add) { DebugPlugin debugPlugin = DebugPlugin.getDefault(); ILaunchManager launchManager = debugPlugin.getLaunchManager(); if (add) { launchManager.addLaunchListener(this); debugPlugin.addDebugEventListener(this); } else { launchManager.removeLaunchListener(this); debugPlugin.removeDebugEventListener(this); } } private void doRestart(ILaunch launch) { ILaunchConfiguration config = launch.getLaunchConfiguration(); try { ILaunchConfigurationWorkingCopy copy = config.getWorkingCopy(); copy.setAttribute(IPDEUIConstants.RESTART, true); copy.launch(launch.getLaunchMode(), new NullProgressMonitor()); } catch (CoreException e) { PDEPlugin.logException(e); } } public void shutdown() { hookListener(false); } /** * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent) */ public void handleDebugEvents(DebugEvent[] events) { for (int i = 0; i < events.length; i++) { DebugEvent event = events[i]; Object source = event.getSource(); if (source instanceof IProcess && event.getKind() == DebugEvent.TERMINATE) { IProcess process = (IProcess) source; ILaunch launch = process.getLaunch(); if (launch != null) { try { launchTerminated(launch, process.getExitValue()); } catch (DebugException e) { } } } } } private void launchTerminated(final ILaunch launch, int returnValue) { if (managedLaunches.contains(launch)) { update(launch, true); if (returnValue == 23) { doRestart(launch); return; } // launch failed because the associated workspace is in use if (returnValue == 15) { Display.getDefault().asyncExec(new Runnable() { public void run() { MessageDialog.openError(PDEPlugin.getActiveWorkbenchShell(), PDEUIMessages.Launcher_error_title, PDEUIMessages.Launcher_error_code15); } }); return; } // launch failed for reasons printed to the log. if (returnValue == 13) { Display.getDefault().asyncExec(new Runnable() { public void run() { try { File log = getMostRecentLogFile(launch.getLaunchConfiguration()); if (log != null && log.exists()) { MessageDialog dialog = new MessageDialog(PDEPlugin.getActiveWorkbenchShell(), PDEUIMessages.Launcher_error_title, null, // accept the default window icon PDEUIMessages.Launcher_error_code13, MessageDialog.ERROR, new String[] {PDEUIMessages.Launcher_error_displayInLogView, PDEUIMessages.Launcher_error_displayInSystemEditor, IDialogConstants.NO_LABEL}, OPEN_IN_ERROR_LOG_VIEW); int dialog_value = dialog.open(); if (dialog_value == OPEN_IN_ERROR_LOG_VIEW) { LogView errlog = (LogView) PDEPlugin.getActivePage().showView("org.eclipse.pde.runtime.LogView"); //$NON-NLS-1$ errlog.handleImportPath(log.getAbsolutePath()); errlog.sortByDateDescending(); } else if (dialog_value == OPEN_IN_SYSTEM_EDITOR) { openInEditor(log); } } } catch (CoreException e) { } } }); } } } private void openInEditor(File log) { IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(log.getAbsolutePath())); if (!fileStore.fetchInfo().isDirectory() && fileStore.fetchInfo().exists()) { IWorkbenchWindow ww = PDEPlugin.getActiveWorkbenchWindow(); IWorkbenchPage page = ww.getActivePage(); try { IDE.openEditorOnFileStore(page, fileStore); } catch (PartInitException e) { } } } /** * Returns latest log file for Launch Configuration. * It's ".metadala/.log", file with most recent timestamp ending with ".log" * in configuration location or null if none found. * * @returns log file or null * @throws CoreException * @since 3.4 */ static File getMostRecentLogFile(ILaunchConfiguration configuration) throws CoreException { File latest = null; String workspace = LaunchArgumentsHelper.getWorkspaceLocation(configuration); if (workspace.length() > 0) { latest = new File(workspace, ".metadata/.log"); //$NON-NLS-1$ if (!latest.exists()) latest = null; } File configDir = LaunchConfigurationHelper.getConfigurationLocation(configuration); File[] children = configDir.listFiles(); if (children != null) { for (int i = 0; i < children.length; i++) { if (!children[i].isDirectory() && children[i].getName().endsWith(".log")) { //$NON-NLS-1$ if (latest == null || latest.lastModified() < children[i].lastModified()) latest = children[i]; } } } return latest; } } |
... this post is sponsored by my books ... | |
![]() #1 New Release! |
![]() FP Best Seller |
Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.