[572448] renaming dtp files updates editor title
renaming in the tree (or workspace) now correctly refreshes editor
title, saving changes will correctly update the new renamed file
Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=572448
Change-Id: Ibfd1a0fef9e89259878b253d1058e7c3d38dd6ea
Signed-off-by: Bianca Wiesmayr <bianca.wiesmayr@jku.at>
diff --git a/plugins/org.eclipse.fordiac.ide.datatypeeditor/src/org/eclipse/fordiac/ide/datatypeeditor/DataTypeListener.java b/plugins/org.eclipse.fordiac.ide.datatypeeditor/src/org/eclipse/fordiac/ide/datatypeeditor/DataTypeListener.java
new file mode 100644
index 0000000..8a6fbbc
--- /dev/null
+++ b/plugins/org.eclipse.fordiac.ide.datatypeeditor/src/org/eclipse/fordiac/ide/datatypeeditor/DataTypeListener.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2021 Primetals Technologies Austria GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ * Bianca Wiesmayr - initial implementation and/or initial documentation
+ *******************************************************************************/
+package org.eclipse.fordiac.ide.datatypeeditor;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.fordiac.ide.datatypeeditor.editors.DataTypeEditor;
+
+public class DataTypeListener implements IResourceChangeListener {
+ IPath file;
+ DataTypeEditor editor;
+
+ public DataTypeListener(IFile file, DataTypeEditor editor) {
+ this.file = file.getFullPath();
+ this.editor = editor;
+ }
+
+ @Override
+ public void resourceChanged(IResourceChangeEvent event) {
+ IResourceDelta delta = event.getDelta();
+
+ // Look for change to our file
+
+ delta = delta.findMember(file);
+ // renaming: kind REMOVED, flag MOVED_TO
+ if ((delta != null) && (delta.getKind() == IResourceDelta.REMOVED)) {
+ if ((delta.getFlags() & IResourceDelta.MOVED_TO) != 0) {
+ file = delta.getMovedToPath();
+ editor.updateDataType(file);
+ }
+ }
+ }
+
+}
diff --git a/plugins/org.eclipse.fordiac.ide.datatypeeditor/src/org/eclipse/fordiac/ide/datatypeeditor/editors/DataTypeEditor.java b/plugins/org.eclipse.fordiac.ide.datatypeeditor/src/org/eclipse/fordiac/ide/datatypeeditor/editors/DataTypeEditor.java
index 66813e4..af45f01 100644
--- a/plugins/org.eclipse.fordiac.ide.datatypeeditor/src/org/eclipse/fordiac/ide/datatypeeditor/editors/DataTypeEditor.java
+++ b/plugins/org.eclipse.fordiac.ide.datatypeeditor/src/org/eclipse/fordiac/ide/datatypeeditor/editors/DataTypeEditor.java
@@ -1,5 +1,6 @@
/*******************************************************************************
* Copyright (c) 2020 Johannes Kepler University, Linz
+ * 2021 Primetals Technologies Austria GmbH
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
@@ -20,8 +21,12 @@
import javax.xml.stream.XMLStreamException;
import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.fordiac.ide.datatypeeditor.Activator;
+import org.eclipse.fordiac.ide.datatypeeditor.DataTypeListener;
import org.eclipse.fordiac.ide.datatypeeditor.Messages;
import org.eclipse.fordiac.ide.datatypeeditor.widgets.StructViewingComposite;
import org.eclipse.fordiac.ide.model.data.AnyDerivedType;
@@ -71,6 +76,7 @@
private Composite errorComposite;
private boolean importFailed;
private boolean outsideWorkspace;
+ private DataTypeListener listener;
private ActionRegistry actionRegistry;
private final List<String> selectionActions = new ArrayList<>();
@@ -94,6 +100,7 @@
getCommandStack().removeCommandStackEventListener(this);
getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(this);
getActionRegistry().dispose();
+ ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
super.dispose();
}
@@ -146,16 +153,23 @@
try {
if (null != file) {
- setPartName(file.getName().substring(0, file.getName().lastIndexOf('.')));
+ setPartName(getDatatypeNameFromFile(file));
final DataTypeImporter importer = new DataTypeImporter(file);
importer.loadElement();
dataType = importer.getElement();
+ listener = new DataTypeListener(file, this);
+ final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ workspace.addResourceChangeListener(listener);
}
} catch (final Exception e) {
throw new PartInitException(e.getMessage(), e);
}
}
+ private static String getDatatypeNameFromFile(IFile file) {
+ return file.getName().substring(0, file.getName().lastIndexOf('.'));
+ }
+
private void setActionHandlers(final IEditorSite site) {
final ActionRegistry registry = getActionRegistry();
final IActionBars bars = site.getActionBars();
@@ -279,4 +293,14 @@
}
return actionRegistry;
}
+
+ public void updateDataType(IPath path) {
+ this.file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+ final String name = getDatatypeNameFromFile(file);
+ dataType.setName(name);
+ setPartName(name);
+ setTitle(name);
+ setInput(new FileEditorInput(file));
+ }
+
}