blob: a6f3d4a0352dbbec2772ccacb11f868f3cfabc35 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2002, 2005 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM - Initial API and implementation
*******************************************************************************/
package org.eclipse.core.tools.metadata;
import java.io.File;
import org.eclipse.core.tools.*;
import org.eclipse.jface.action.*;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
/**
* Dump Contents Spy view. This view shows the contents resulting of a dumping
* process.
*/
public class DumpContentsView extends SpyView {
/** Stores the initially assigned view title. */
private String initialTitle;
/** The JFace widget that shows the current selected file dump contents. */
protected TextViewer viewer;
/** The file names registered in the DumperFactory. */
protected String[] registeredFileNames;
/** The dumper factory used to instantiate dumpers. */
private DumperFactory dumperFactory;
/** The current selected file. */
private File currentFile;
/** The id by which this view is known in the plug-in registry */
public static final String VIEW_ID = DumpContentsView.class.getName();
/**
* Constructs a DumpContentsView.
*/
public DumpContentsView() {
dumperFactory = DumperFactory.getInstance();
this.registeredFileNames = dumperFactory.getRegisteredFileNames();
}
/**
* Creates this view widget and actions.
*
* @param parent the parent control
* @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
*/
@Override
public void createPartControl(final Composite parent) {
// creates a read-only text viewer
viewer = new TextViewer(parent, SWT.V_SCROLL | SWT.H_SCROLL);
viewer.setDocument(new Document());
viewer.setEditable(false);
// creates the actions
final IAction loadFileAction = new LoadFileAction();
final IAction copySelectionAction = new CopyTextSelectionAction(viewer);
final IAction clearContentsAction = new ClearTextAction(viewer.getDocument());
// adds actions to the menu bar
IMenuManager barMenuManager = getViewSite().getActionBars().getMenuManager();
barMenuManager.add(loadFileAction);
barMenuManager.add(copySelectionAction);
barMenuManager.add(clearContentsAction);
// creates a context menu with actions and adds it to the viewer control
MenuManager menuMgr = new MenuManager();
menuMgr.add(loadFileAction);
menuMgr.add(copySelectionAction);
menuMgr.add(clearContentsAction);
Menu menu = menuMgr.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
}
/**
* Sets the file to be dumped. The view state will be updated to reflect
* changes.
*
* @param file the file to be dumped
*/
public void setFile(File file) {
IDumper dumper = null;
// tries to get the associated file dumper
try {
dumper = dumperFactory.getDumper(file.getName());
} catch (DumpException de) {
ErrorUtil.logException(de, null);
ErrorUtil.showErrorMessage(de.getMessage(), "Error creating file dumper"); //$NON-NLS-1$
return;
}
// dumps file
IDump dump = dumper.dump(file);
if (dump.isFailed()) {
CoreToolsPlugin.getDefault().log("Error during file dump", dump.getFailureReason()); //$NON-NLS-1$
String message = "File dumping did not complete successfully. Reason: " + dump.getFailureReason(); //$NON-NLS-1$
ErrorUtil.showErrorMessage(message, "Error during file dump"); //$NON-NLS-1$
}
// loads the new dump object
load(dump);
}
/**
* Rebuilds the view with the dump object provided.
*
* @param dump a dump object to be shown on this view
*/
private void load(IDump dump) {
this.currentFile = dump.getFile();
// now it is safe to get the part title
// (during createPartControl it gets Workbench window title)
if (initialTitle == null)
this.initialTitle = this.getTitle();
// updates title and title tool tip
this.setContentDescription(initialTitle + " : " + this.currentFile.getName()); //$NON-NLS-1$
this.setTitleToolTip("Dump contents for " + this.currentFile.getAbsolutePath()); //$NON-NLS-1$
// updates viewer
viewer.getDocument().set(dump.getContents().toString());
// tries to show summary information in Dump Summary view
IWorkbenchPage page = this.getSite().getPage();
String summaryId = DumpSummaryView.VIEW_ID;
// maybe the summary view is already open
DumpSummaryView summaryView = (DumpSummaryView) page.findView(summaryId);
// if it is not the case and the dump failed, tries to open it
if (summaryView == null && dump.isFailed())
try {
summaryView = (DumpSummaryView) page.showView(summaryId);
} catch (PartInitException pie) {
ErrorUtil.logException(pie, "Error opening view"); //$NON-NLS-1$
}
// if the Dump Summary view is available, updates it
if (summaryView != null)
summaryView.load(dump);
}
/**
* File load action implementation.
*/
private class LoadFileAction extends Action {
/** Sets action text and tool tip. */
LoadFileAction() {
this.setText("Load File..."); //$NON-NLS-1$
this.setToolTipText("Load file..."); //$NON-NLS-1$
}
/**
* Executes this action, opening a file dialog so the user can select the
* file to be dumped. If a file is successfully selected, opens it by
* calling <code>#setFile(File)</code>.
*
* @see DumpContentsView#setFile
* @see org.eclipse.jface.action.IAction#run()
*/
@Override
public void run() {
// opens a file dialog
FileDialog fileDialog = new FileDialog(viewer.getControl().getShell(), SWT.OPEN);
fileDialog.setText("Please choose a metadata file to view"); //$NON-NLS-1$
fileDialog.setFilterExtensions(DumpContentsView.this.registeredFileNames);
// if a file hasn't been selected, ignore
String filePath = fileDialog.open();
if (filePath == null)
return;
// opens the selected file
DumpContentsView.this.setFile(new File(filePath));
}
}
}