Skip to content

Commit

Permalink
TEIIDDES-1776: Be far less aggressive with closing editors
Browse files Browse the repository at this point in the history
* The TeiidServerManager is responsible for closing all editors on startup
  since the default server version is assigned (so changed from null to
  the restored version).

* Adds in a RESTORING state which can be checked by the closeEditors
  function to avoid closing any editors on startup

* Instead of closing all editors, try and find the resource associated with
  each editor and if the resource's parent project has a modelling nature
  then close the editor. This should confine closures to just modelling
  diagrams.

* DiagramEditorInput
 * May be called and be used for displaying a model, in which case implement
   adaption into an eclipse resource so that it too close be closed if
   required.
  • Loading branch information
Paul Richardson committed Jul 16, 2013
1 parent 83f70c0 commit 8ad6142
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 8 deletions.
Expand Up @@ -8,9 +8,12 @@
package org.teiid.designer.diagram.ui.editor;


import org.eclipse.core.resources.IResource;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPersistableElement;
import org.teiid.designer.core.workspace.WorkspaceResourceFinderUtil;
import org.teiid.designer.diagram.ui.DiagramUiConstants;
import org.teiid.designer.metamodels.diagram.Diagram;

Expand Down Expand Up @@ -40,6 +43,11 @@ public Diagram getDiagram() {

@Override
public Object getAdapter(Class key) {
if (IResource.class.isAssignableFrom(key)) {
Resource eResource = getDiagram().eResource();
return WorkspaceResourceFinderUtil.findIResource(eResource);
}

return null;
}

Expand Down
Expand Up @@ -26,13 +26,16 @@
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.wst.server.core.IServer;
import org.teiid.core.designer.util.Base64;
Expand All @@ -42,6 +45,7 @@
import org.teiid.designer.core.util.KeyInValueHashMap;
import org.teiid.designer.core.util.KeyInValueHashMap.KeyFromValueAdapter;
import org.teiid.designer.core.util.StringUtilities;
import org.teiid.designer.core.workspace.DotProjectUtils;
import org.teiid.designer.runtime.connection.spi.IPasswordProvider;
import org.teiid.designer.runtime.importer.ImportManager;
import org.teiid.designer.runtime.preview.PreviewManager;
Expand Down Expand Up @@ -70,6 +74,7 @@ public final class TeiidServerManager implements ITeiidServerManager {
private enum RuntimeState {
INVALID,
STARTED,
RESTORING,
SHUTTING_DOWN,
SHUTDOWN
}
Expand Down Expand Up @@ -540,6 +545,8 @@ public IStatus removeServer( ITeiidServer teiidServer ) {

@Override
public IStatus restoreState() {
this.state = RuntimeState.RESTORING;

if (this.stateLocationPath != null) {
if (stateFileExists()) {
try {
Expand Down Expand Up @@ -709,6 +716,8 @@ public IStatus restoreState() {
}
}

this.state = RuntimeState.STARTED;

// do nothing of there is no save location or state file does not exist
return Status.OK_STATUS;
}
Expand Down Expand Up @@ -768,13 +777,7 @@ public void setDefaultServer( ITeiidServer teiidServer ) {

if (teiidServerVersionListeners != null && ! getDefaultServerVersion().equals(oldServerVersion)) {
// Server version change has occurred so close all editors and notify server version listeners
for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
for (IWorkbenchPage page : window.getPages()) {
// TODO
// This should not be so broad!!
page.closeAllEditors(true);
}
}
closeEditors();

for (ITeiidServerVersionListener listener : teiidServerVersionListeners) {
listener.versionChanged(getDefaultServerVersion());
Expand All @@ -784,6 +787,37 @@ public void setDefaultServer( ITeiidServer teiidServer ) {
notifyListeners(ExecutionConfigurationEvent.createSetDefaultServerEvent(oldDefaultServer, this.defaultServer));
}

/**
* Close editors associated with modelling projects
*/
private void closeEditors() {
if (RuntimeState.RESTORING == state) {
// Avoid closing editors on startup since the default server is simply being assigned
return;
}

for (IWorkbenchWindow window : PlatformUI.getWorkbench().getWorkbenchWindows()) {
for (IWorkbenchPage page : window.getPages()) {
IEditorReference[] editorReferences = page.getEditorReferences();
for (IEditorReference editorRef : editorReferences) {
IEditorInput input;
try {
input = editorRef.getEditorInput();
IResource resource = (IResource) input.getAdapter(IResource.class);

// Only close those editors associated with modelling projects
// rather than blindly closing all editors
if (resource != null && DotProjectUtils.isModelerProject(resource.getProject())) {
page.closeEditor(editorRef.getEditor(false), true);
}
} catch (PartInitException ex) {
DqpPlugin.Util.log(ex);
}
}
}
}
}

@Override
public void shutdown( IProgressMonitor monitor ) throws Exception {
// return if already being shutdown
Expand Down

0 comments on commit 8ad6142

Please sign in to comment.