Skip to content
Snippets Groups Projects
Commit 8569be90 authored by Dongyue Mou's avatar Dongyue Mou
Browse files

added model and UI elements for BMC parameter

modified ts specification editor to observe all changes in the part list and update the UI.
refs 802
parent f912ee8e
No related branches found
No related tags found
No related merge requests found
...@@ -53,14 +53,15 @@ import org.fortiss.tooling.kernel.utils.LoggingUtils; ...@@ -53,14 +53,15 @@ import org.fortiss.tooling.kernel.utils.LoggingUtils;
* @author hoelzl * @author hoelzl
* @author $Author$ * @author $Author$
* @version $Rev$ * @version $Rev$
* @ConQAT.Rating GREEN Hash: 5D8E3357E3B8F103A782BBD7096D5616 * @ConQAT.Rating YELLOW Hash: 7F415EAA11A7C0E77D09F08D2E615DF8
*/ */
public class ModelEditorBindingService extends public class ModelEditorBindingService extends
EObjectAwareServiceBase<IModelEditorBinding<EObject>> implements EObjectAwareServiceBase<IModelEditorBinding<EObject>> implements
IModelEditorBindingService, IPartListener, CommandStackListener { IModelEditorBindingService, IPartListener, CommandStackListener {
/** The compositor extension point ID. */ /** The compositor extension point ID. */
private static final String EXTENSION_POINT_NAME = "org.fortiss.tooling.kernel.ui.modelEditorBinding"; private static final String EXTENSION_POINT_NAME =
"org.fortiss.tooling.kernel.ui.modelEditorBinding";
/** The compositor configuration element name. */ /** The compositor configuration element name. */
private static final String CONFIGURATION_ELEMENT_NAME = "modelEditorBinding"; private static final String CONFIGURATION_ELEMENT_NAME = "modelEditorBinding";
...@@ -72,14 +73,15 @@ public class ModelEditorBindingService extends ...@@ -72,14 +73,15 @@ public class ModelEditorBindingService extends
private final Map<IEditorPart, EObject> currentEditors = new HashMap<IEditorPart, EObject>(); private final Map<IEditorPart, EObject> currentEditors = new HashMap<IEditorPart, EObject>();
/** Stores the command stack registrations. */ /** Stores the command stack registrations. */
private final Map<EObject, ITopLevelElement> currentCommandStacks = new HashMap<EObject, ITopLevelElement>(); private final Map<EObject, ITopLevelElement> currentCommandStacks =
new HashMap<EObject, ITopLevelElement>();
/** Constructor. */ /** Constructor. */
public ModelEditorBindingService() { public ModelEditorBindingService() {
super(); super();
// sort editor bindings by priority. // sort editor bindings by priority.
EditorBindingComparator comparator = new EditorBindingComparator(); EditorBindingComparator comparator = new EditorBindingComparator();
for (Class<?> clazz : handlerMap.keySet()) { for(Class<?> clazz : handlerMap.keySet()) {
Collections.sort(handlerMap.get(clazz), comparator); Collections.sort(handlerMap.get(clazz), comparator);
} }
} }
...@@ -93,42 +95,39 @@ public class ModelEditorBindingService extends ...@@ -93,42 +95,39 @@ public class ModelEditorBindingService extends
/** Opens the editor or proceeds with parent element. */ /** Opens the editor or proceeds with parent element. */
private void openInEditor(EObject element, int depth) { private void openInEditor(EObject element, int depth) {
Assert.isTrue(depth >= 0); Assert.isTrue(depth >= 0);
if (getBindings(element).isEmpty()) { if(getBindings(element).isEmpty()) {
if (depth > 0 && element.eContainer() != null) { if(depth > 0 && element.eContainer() != null) {
openInEditor(element.eContainer(), depth - 1); openInEditor(element.eContainer(), depth - 1);
} }
return; return;
} }
try { try {
IEditorPart part = PlatformUI IEditorPart part =
.getWorkbench() PlatformUI
.getActiveWorkbenchWindow() .getWorkbench()
.getActivePage() .getActiveWorkbenchWindow()
.openEditor(new ModelElementEditorInput(element), .getActivePage()
ExtendableMultiPageEditor.ID); .openEditor(new ModelElementEditorInput(element),
ExtendableMultiPageEditor.ID);
currentEditors.put(part, element); currentEditors.put(part, element);
// ensure registration with part service // ensure registration with part service
IPartService service = (IPartService) part.getSite().getService( IPartService service = (IPartService)part.getSite().getService(IPartService.class);
IPartService.class);
service.addPartListener(this); service.addPartListener(this);
// ensure registration with command stack service // ensure registration with command stack service
ITopLevelElement top = IPersistencyService.INSTANCE ITopLevelElement top = IPersistencyService.INSTANCE.getTopLevelElementFor(element);
.getTopLevelElementFor(element);
ICommandStackService.INSTANCE.addCommandStackListener(top, this); ICommandStackService.INSTANCE.addCommandStackListener(top, this);
currentCommandStacks.put(element, top); currentCommandStacks.put(element, top);
} catch (final PartInitException e) { } catch(final PartInitException e) {
LoggingUtils.error(ToolingKernelActivator.getDefault(), LoggingUtils.error(ToolingKernelActivator.getDefault(),
"Could not open editor with ID " "Could not open editor with ID " + ExtendableMultiPageEditor.ID, e);
+ ExtendableMultiPageEditor.ID, e);
} }
} }
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public List<IModelEditorBinding<EObject>> getBindings(EObject element) { public List<IModelEditorBinding<EObject>> getBindings(EObject element) {
List<IModelEditorBinding<EObject>> bindings = getRegisteredHandlers(element List<IModelEditorBinding<EObject>> bindings = getRegisteredHandlers(element.getClass());
.getClass()); if(bindings == null) {
if (bindings == null) {
bindings = CollectionUtils.emptyList(); bindings = CollectionUtils.emptyList();
} }
return bindings; return bindings;
...@@ -158,8 +157,7 @@ public class ModelEditorBindingService extends ...@@ -158,8 +157,7 @@ public class ModelEditorBindingService extends
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public int compare(IModelEditorBinding<EObject> eb0, public int compare(IModelEditorBinding<EObject> eb0, IModelEditorBinding<EObject> eb1) {
IModelEditorBinding<EObject> eb1) {
return eb1.getPriority() - eb0.getPriority(); return eb1.getPriority() - eb0.getPriority();
} }
} }
...@@ -201,14 +199,14 @@ public class ModelEditorBindingService extends ...@@ -201,14 +199,14 @@ public class ModelEditorBindingService extends
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void partClosed(IWorkbenchPart part) { public void partClosed(IWorkbenchPart part) {
if (currentEditors.containsKey(part)) { if(currentEditors.containsKey(part)) {
EObject eo = currentEditors.get(part); EObject eo = currentEditors.get(part);
ITopLevelElement top = currentCommandStacks.get(eo); ITopLevelElement top = currentCommandStacks.get(eo);
currentCommandStacks.remove(eo); currentCommandStacks.remove(eo);
currentEditors.remove(part); currentEditors.remove(part);
// clean up command stack registration // clean up command stack registration
for (IEditorPart other : currentEditors.keySet()) { for(IEditorPart other : currentEditors.keySet()) {
if (top == currentCommandStacks.get(currentEditors.get(other))) { if(top == currentCommandStacks.get(currentEditors.get(other))) {
return; return;
} }
} }
...@@ -232,52 +230,32 @@ public class ModelEditorBindingService extends ...@@ -232,52 +230,32 @@ public class ModelEditorBindingService extends
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public void commandStackChanged(EventObject event) { public void commandStackChanged(EventObject event) {
for (IEditorPart part : currentEditors.keySet()) { for(IEditorPart part : currentEditors.keySet()) {
ITopLevelElement top = IPersistencyService.INSTANCE ITopLevelElement top =
.getTopLevelElementFor(currentEditors.get(part)); IPersistencyService.INSTANCE.getTopLevelElementFor(currentEditors.get(part));
if (top == null) { if(top == null) {
closeEditor(part); closeEditor(part);
} }
} }
} }
/** {@inheritDoc} */
@SuppressWarnings("unchecked")
@Override
public <T extends EObject, E extends IModelEditor<T>> E getOpenEditor(
T editedElement, Class<E> editorClass) {
for (IEditorPart part : currentEditors.keySet()) {
if (currentEditors.get(part) == editedElement) {
if (part instanceof ExtendableMultiPageEditor) {
E inner = ((ExtendableMultiPageEditor) part)
.getPageEditor(editorClass);
if (inner != null) {
return inner;
}
} else if (editorClass.isInstance(part)) {
return (E) part;
}
}
}
return null;
}
/** {@inheritDoc} */ /** {@inheritDoc} */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Override @Override
public IModelEditor<EObject> getActiveEditor() { public IModelEditor<EObject> getActiveEditor() {
IEditorPart activeEditor = PlatformUI.getWorkbench() IEditorPart activeEditor =
.getActiveWorkbenchWindow().getActivePage().getActiveEditor(); PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage()
if (activeEditor instanceof ExtendableMultiPageEditor) { .getActiveEditor();
ExtendableMultiPageEditor extEditor = (ExtendableMultiPageEditor) activeEditor; if(activeEditor instanceof ExtendableMultiPageEditor) {
ExtendableMultiPageEditor extEditor = (ExtendableMultiPageEditor)activeEditor;
IModelEditor<EObject> inner = extEditor.getActiveModelEditor(); IModelEditor<EObject> inner = extEditor.getActiveModelEditor();
if (inner != null) { if(inner != null) {
return inner; return inner;
} }
return extEditor; return extEditor;
} }
if (activeEditor instanceof IModelEditor) { if(activeEditor instanceof IModelEditor) {
return (IModelEditor<EObject>) activeEditor; return (IModelEditor<EObject>)activeEditor;
} }
return null; return null;
} }
......
...@@ -33,7 +33,7 @@ import org.fortiss.tooling.kernel.ui.internal.ModelEditorBindingService; ...@@ -33,7 +33,7 @@ import org.fortiss.tooling.kernel.ui.internal.ModelEditorBindingService;
* @author hoelzl * @author hoelzl
* @author $Author$ * @author $Author$
* @version $Rev$ * @version $Rev$
* @ConQAT.Rating GREEN Hash: A76E99E4EAF5A391267B44D9EE22B3DF * @ConQAT.Rating YELLOW Hash: 8C3DE2C0EDF7A9B71DA28244180538DD
*/ */
public interface IModelEditorBindingService { public interface IModelEditorBindingService {
...@@ -49,14 +49,6 @@ public interface IModelEditorBindingService { ...@@ -49,14 +49,6 @@ public interface IModelEditorBindingService {
/** Returns the currently active editor. */ /** Returns the currently active editor. */
IModelEditor<EObject> getActiveEditor(); IModelEditor<EObject> getActiveEditor();
/**
* Returns an {@link IModelEditor} instance of the given class for the given
* model if such an editor is currently open. Otherwise, returns
* <code>null</code>.
*/
<T extends EObject, E extends IModelEditor<T>> E getOpenEditor(
T editedElement, Class<E> editorClass);
/** Returns registered editor bindings for the given {@link EObject}. */ /** Returns registered editor bindings for the given {@link EObject}. */
List<IModelEditorBinding<EObject>> getBindings(EObject element); List<IModelEditorBinding<EObject>> getBindings(EObject element);
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment