/*******************************************************************************
- * Copyright (c) 2011, 2013 Ericsson
+ * Copyright (c) 2011, 2014 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
*
* Contributors:
* Francois Chouinard - Copied and adapted from NewFolderDialog
+ * Patrick Tasse - Close editors to release resources
*******************************************************************************/
package org.eclipse.linuxtools.tmf.ui.project.wizards;
-import java.lang.reflect.InvocationTargetException;
-
import org.eclipse.core.resources.IContainer;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspace;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.linuxtools.internal.tmf.ui.Activator;
-import org.eclipse.linuxtools.tmf.ui.project.model.ITmfProjectModelElement;
-import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentElement;
-import org.eclipse.linuxtools.tmf.ui.project.model.TmfExperimentFolder;
-import org.eclipse.linuxtools.tmf.ui.project.model.TmfProjectElement;
import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceElement;
-import org.eclipse.linuxtools.tmf.ui.project.model.TmfTraceFolder;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IEditorReference;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.WorkspaceModifyOperation;
import org.eclipse.ui.dialogs.SelectionStatusDialog;
-import org.eclipse.ui.part.FileEditorInput;
/**
* Implementation of a dialog box to rename a trace.
private final TmfTraceElement fTrace;
private Text fNewTraceNameText;
- private String fNewTraceName;
- private final IContainer fTraceFolder;
- private final TmfProjectElement fProject;
// ------------------------------------------------------------------------
// Constructor
public RenameTraceDialog(Shell shell, TmfTraceElement trace) {
super(shell);
fTrace = trace;
- TmfTraceFolder folder = (TmfTraceFolder) trace.getParent();
- fTraceFolder = folder.getResource();
- fProject = trace.getProject();
setTitle(Messages.RenameTraceDialog_DialogTitle);
setStatusLineAboveButtons(true);
}
});
}
- /**
- * Returns the new trace name
- * @return the new trace name
- */
- public String getNewTraceName() {
- return fNewTraceName;
- }
-
private void validateNewTraceName() {
- fNewTraceName = fNewTraceNameText.getText();
- IWorkspace workspace = fTraceFolder.getWorkspace();
- IStatus nameStatus = workspace.validateName(fNewTraceName, IResource.FOLDER);
+ String newTraceName = fNewTraceNameText.getText();
+ IWorkspace workspace = fTrace.getResource().getWorkspace();
+ IStatus nameStatus = workspace.validateName(newTraceName, IResource.FOLDER);
- if ("".equals(fNewTraceName)) { //$NON-NLS-1$
+ if ("".equals(newTraceName)) { //$NON-NLS-1$
updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR,
Messages.Dialog_EmptyNameError, null));
return;
return;
}
- IPath path = new Path(fNewTraceName);
- if (fTraceFolder.getFolder(path).exists() || fTraceFolder.getFile(path).exists()) {
+ IContainer parentFolder = fTrace.getResource().getParent();
+ if (parentFolder.findMember(newTraceName) != null) {
updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR,
Messages.Dialog_ExistingNameError, null));
return;
@Override
protected void okPressed() {
- IResource trace = renameTrace(fNewTraceNameText.getText());
- if (trace == null) {
- return;
- }
- setSelectionResult(new IResource[] { trace });
+ setSelectionResult(new String[] { fNewTraceNameText.getText() });
super.okPressed();
-
- if (fProject != null) {
- fProject.refresh();
- }
- }
-
- private IResource renameTrace(final String newName) {
-
- final IPath oldPath = fTrace.getResource().getFullPath();
- final IPath newPath = oldPath.append("../" + newName); //$NON-NLS-1$
-
- WorkspaceModifyOperation operation = new WorkspaceModifyOperation() {
- @Override
- public void execute(IProgressMonitor monitor) throws CoreException {
- try {
- monitor.beginTask("", 1000); //$NON-NLS-1$
- if (monitor.isCanceled()) {
- throw new OperationCanceledException();
- }
- // Close the trace if open
- IFile file = fTrace.getBookmarksFile();
- FileEditorInput input = new FileEditorInput(file);
- IWorkbench wb = PlatformUI.getWorkbench();
- for (IWorkbenchWindow wbWindow : wb.getWorkbenchWindows()) {
- for (IWorkbenchPage wbPage : wbWindow.getPages()) {
- for (IEditorReference editorReference : wbPage.getEditorReferences()) {
- if (editorReference.getEditorInput().equals(input)) {
- wbPage.closeEditor(editorReference.getEditor(false), false);
- }
- }
- }
- }
- TmfExperimentFolder experimentFolder = fTrace.getProject().getExperimentsFolder();
- for (final ITmfProjectModelElement experiment : experimentFolder.getChildren()) {
- for (final ITmfProjectModelElement trace : experiment.getChildren()) {
- if (trace.equals(fTrace)) {
- // Close the experiment if open
- file = ((TmfExperimentElement) experiment).getBookmarksFile();
- input = new FileEditorInput(file);
- for (IWorkbenchWindow wbWindow : wb.getWorkbenchWindows()) {
- for (IWorkbenchPage wbPage : wbWindow.getPages()) {
- for (IEditorReference editorReference : wbPage.getEditorReferences()) {
- if (editorReference.getEditorInput().equals(input)) {
- wbPage.closeEditor(editorReference.getEditor(false), false);
- }
- }
- }
- }
- }
- }
- }
-
- if (fTrace.getResource() instanceof IFolder) {
- IFolder folder = (IFolder) fTrace.getResource();
- IFile bookmarksFile = fTrace.getBookmarksFile();
- IFile newBookmarksFile = folder.getFile(bookmarksFile.getName().replace(fTrace.getName(), newName));
- if (bookmarksFile.exists()) {
- if (!newBookmarksFile.exists()) {
- IPath newBookmarksPath = newBookmarksFile.getFullPath();
- bookmarksFile.move(newBookmarksPath, IResource.FORCE | IResource.SHALLOW, null);
- }
- }
- }
-
- fTrace.renameSupplementaryFolder(newName);
- fTrace.getResource().move(newPath, IResource.FORCE | IResource.SHALLOW, null);
- if (monitor.isCanceled()) {
- throw new OperationCanceledException();
- }
- } finally {
- monitor.done();
- }
- }
- };
-
- try {
- PlatformUI.getWorkbench().getProgressService().busyCursorWhile(operation);
- } catch (InterruptedException exception) {
- return null;
- } catch (InvocationTargetException exception) {
- MessageDialog.openError(getShell(), "", exception.getTargetException().getMessage()); //$NON-NLS-1$
- return null;
- } catch (RuntimeException exception) {
- return null;
- }
-
- return fTrace.getResource();
}
}