diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java index 78344635e701a5222790c46828c7cbccd624b3bf..610287bce7e4f5a9b0eb1632f03d4192a647bd5b 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ModelEditorBindingService.java @@ -53,7 +53,7 @@ import org.fortiss.tooling.kernel.utils.LoggingUtils; * @author hoelzl * @author $Author$ * @version $Rev$ - * @ConQAT.Rating GREEN Hash: CFD88AAA5841CB3544A2499BEAC01733 + * @ConQAT.Rating YELLOW Hash: 62C3F0ECA931171A7FCCE384F7FA3131 */ public class ModelEditorBindingService extends EObjectAwareServiceBase<IModelEditorBinding<EObject>> implements @@ -165,12 +165,27 @@ public class ModelEditorBindingService extends /** {@inheritDoc} */ @Override public void closeEditors(EObject parentElement) { - for(IEditorPart editor : currentEditors.keySet()) { + IEditorPart[] parts = new IEditorPart[0]; + for(IEditorPart editor : currentEditors.keySet().toArray(parts)) { EObject editedElement = currentEditors.get(editor); if(KernelModelElementUtils.isChildElementOf(editedElement, parentElement)) { closeEditor(editor); } } + + } + + /** {@inheritDoc} */ + @Override + public void closeEditor(EObject element) { + IEditorPart[] parts = new IEditorPart[0]; + for(IEditorPart editor : currentEditors.keySet().toArray(parts)) { + EObject editedElement = currentEditors.get(editor); + if(editedElement.equals(element)) { + closeEditor(editor); + } + } + } /** Closes the given editor. */ @@ -181,6 +196,7 @@ public class ModelEditorBindingService extends editor.getSite().getPage().closeEditor(editor, false); } }); + currentEditors.remove(editor); } /** {@inheritDoc} */ @@ -203,6 +219,7 @@ public class ModelEditorBindingService extends ITopLevelElement top = currentCommandStacks.get(eo); currentCommandStacks.remove(eo); currentEditors.remove(part); + // clean up command stack registration for(IEditorPart other : currentEditors.keySet()) { if(top == currentCommandStacks.get(currentEditors.get(other))) { @@ -258,4 +275,11 @@ public class ModelEditorBindingService extends } return null; } + + /** {@inheritDoc} */ + @Override + public boolean isOpen(EObject element) { + return currentEditors.containsValue(element); + } + } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IModelEditorBindingService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IModelEditorBindingService.java index 1a7d08ab7da0910334bc59dff424c60e96f3a09a..08da00ba99fa6c7cf237aa5a4e5b8f20e7992480 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IModelEditorBindingService.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IModelEditorBindingService.java @@ -33,7 +33,7 @@ import org.fortiss.tooling.kernel.ui.internal.ModelEditorBindingService; * @author hoelzl * @author $Author$ * @version $Rev$ - * @ConQAT.Rating GREEN Hash: 1BD1646F7084B0FDF5CC9E6A225C03CA + * @ConQAT.Rating YELLOW Hash: 655524C280C4FB1C627803B821E087B8 */ public interface IModelEditorBindingService { @@ -46,6 +46,12 @@ public interface IModelEditorBindingService { /** Closes editors which depend on the given element or a sub-element. */ void closeEditors(EObject parentElement); + /** Closes editor of the given element. */ + void closeEditor(EObject element); + + /** Check whether editor of the given element is opened. */ + boolean isOpen(EObject element); + /** Returns the currently active editor. */ IModelEditor<EObject> getActiveEditor();