From 6e85bd1759657d89fe60a9d77304c75d6a5bb643 Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Tue, 3 May 2016 12:04:03 +0000 Subject: [PATCH] Filtering of prototype new menu entries working properly now. refs 2567 --- .../ui/extension/ITutorialUIProvider.java | 4 +- .../ITutorialUIWhitelistProvider.java | 6 ++- .../base/TutorialUIBlacklistAllProvider.java | 6 ++- .../base/TutorialUIWhitelistAllProvider.java | 6 ++- .../ui/extension/data/TutorialStepUI.java | 40 +++++++++++++++++++ .../kernel/ui/internal/ActionService.java | 18 +++++++++ .../kernel/ui/internal/TutorialUIService.java | 33 +++++++++++---- .../ui/internal/views/NavigatorNewMenu.java | 7 +++- .../kernel/ui/service/IActionService.java | 8 ++++ .../extension/ITutorialWhitelistProvider.java | 7 ++-- .../kernel/extension/data/TutorialStep.java | 8 +++- 11 files changed, 120 insertions(+), 23 deletions(-) create mode 100644 org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/data/TutorialStepUI.java diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIProvider.java index 3afb58b6f..f5f712cc3 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIProvider.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIProvider.java @@ -17,7 +17,7 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.extension; -import org.fortiss.tooling.kernel.extension.data.TutorialStep; +import org.fortiss.tooling.kernel.ui.extension.data.TutorialStepUI; /** * Interface UI parts of tutorial providers. @@ -37,5 +37,5 @@ public interface ITutorialUIProvider { * Returns the local whitelist provider for the given step. This method MUST never return * <code>null</code>. */ - public ITutorialUIWhitelistProvider getLocalUIWhitelistProvider(TutorialStep step); + public ITutorialUIWhitelistProvider getLocalUIWhitelistProvider(TutorialStepUI step); } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIWhitelistProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIWhitelistProvider.java index 742dfe70e..4829bec1d 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIWhitelistProvider.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/ITutorialUIWhitelistProvider.java @@ -20,6 +20,7 @@ package org.fortiss.tooling.kernel.ui.extension; import java.util.List; import org.eclipse.emf.ecore.EObject; +import org.eclipse.jface.action.IContributionItem; /** * Tutorial whitelist provider interface for the UI kernel services. @@ -38,9 +39,10 @@ public interface ITutorialUIWhitelistProvider { public boolean globalDefaultActionsVisible(); /** Returns whether the given context menu contribution is visible. */ - public boolean contextMenuContributionVisible(EObject element, Object contribution); + public boolean contextMenuContributionVisible(EObject element, IContributionItem contribution); /** Returns whether the given context menu contribution is visible. */ - public boolean contextMenuContributionVisible(List<EObject> element, Object contribution); + public boolean contextMenuContributionVisible(List<EObject> element, + IContributionItem contribution); // TODO: define other methods } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIBlacklistAllProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIBlacklistAllProvider.java index 5f1bc7dbf..fb1402e2d 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIBlacklistAllProvider.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIBlacklistAllProvider.java @@ -20,6 +20,7 @@ package org.fortiss.tooling.kernel.ui.extension.base; import java.util.List; import org.eclipse.emf.ecore.EObject; +import org.eclipse.jface.action.IContributionItem; import org.fortiss.tooling.kernel.ui.extension.ITutorialUIWhitelistProvider; /** @@ -45,13 +46,14 @@ public class TutorialUIBlacklistAllProvider implements ITutorialUIWhitelistProvi /** {@inheritDoc} */ @Override - public boolean contextMenuContributionVisible(EObject element, Object contribution) { + public boolean contextMenuContributionVisible(EObject element, IContributionItem contribution) { return false; } /** {@inheritDoc} */ @Override - public boolean contextMenuContributionVisible(List<EObject> element, Object contribution) { + public boolean contextMenuContributionVisible(List<EObject> element, + IContributionItem contribution) { return false; } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIWhitelistAllProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIWhitelistAllProvider.java index d8e937f48..3be11c93c 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIWhitelistAllProvider.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/TutorialUIWhitelistAllProvider.java @@ -20,6 +20,7 @@ package org.fortiss.tooling.kernel.ui.extension.base; import java.util.List; import org.eclipse.emf.ecore.EObject; +import org.eclipse.jface.action.IContributionItem; import org.fortiss.tooling.kernel.ui.extension.ITutorialUIWhitelistProvider; /** @@ -45,13 +46,14 @@ public class TutorialUIWhitelistAllProvider implements ITutorialUIWhitelistProvi /** {@inheritDoc} */ @Override - public boolean contextMenuContributionVisible(EObject element, Object contribution) { + public boolean contextMenuContributionVisible(EObject element, IContributionItem contribution) { return true; } /** {@inheritDoc} */ @Override - public boolean contextMenuContributionVisible(List<EObject> element, Object contribution) { + public boolean contextMenuContributionVisible(List<EObject> element, + IContributionItem contribution) { return true; } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/data/TutorialStepUI.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/data/TutorialStepUI.java new file mode 100644 index 000000000..dc2faafc7 --- /dev/null +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/data/TutorialStepUI.java @@ -0,0 +1,40 @@ +/*--------------------------------------------------------------------------+ +$Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +| | +| Copyright 2016 ForTISS GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.tooling.kernel.ui.extension.data; + +import org.fortiss.tooling.kernel.extension.data.TutorialStep; +import org.fortiss.tooling.kernel.ui.extension.ITutorialUIWhitelistProvider; +import org.fortiss.tooling.kernel.ui.extension.base.TutorialUIBlacklistAllProvider; + +/** + * Data class for UI parts of {@link TutorialStep}s. + * + * @author hoelzl + * @author $Author: hoelzl $ + * @version $Rev: 18709 $ + * @ConQAT.Rating RED Hash: + */ +public abstract class TutorialStepUI extends TutorialStep { + /** + * Returns the step-specific whitelist provider. The default returns a provider blacklisting + * everything. + */ + public ITutorialUIWhitelistProvider getUIWhitelistProvider() { + return new TutorialUIBlacklistAllProvider(); + } +} diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java index 7bfa4e047..87ff5d4ad 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/ActionService.java @@ -23,10 +23,13 @@ import java.util.List; import org.eclipse.emf.common.command.CommandStackListener; import org.eclipse.emf.ecore.EObject; import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuManager; import org.eclipse.ui.IActionBars; import org.eclipse.ui.actions.ActionFactory; import org.fortiss.tooling.kernel.extension.data.ITopLevelElement; +import org.fortiss.tooling.kernel.extension.data.Prototype; import org.fortiss.tooling.kernel.service.ICommandStackService; import org.fortiss.tooling.kernel.service.IPersistencyService; import org.fortiss.tooling.kernel.service.listener.IPersistencyServiceListener; @@ -36,6 +39,7 @@ import org.fortiss.tooling.kernel.ui.internal.actions.DeleteAction; import org.fortiss.tooling.kernel.ui.internal.actions.PasteAction; import org.fortiss.tooling.kernel.ui.internal.actions.RedoAction; import org.fortiss.tooling.kernel.ui.internal.actions.UndoAction; +import org.fortiss.tooling.kernel.ui.internal.views.NavigatorNewMenu; import org.fortiss.tooling.kernel.ui.service.IActionService; import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils; @@ -216,4 +220,18 @@ public class ActionService implements IActionService, IPersistencyServiceListene public void runGlobalCutAction() { globalCutAction.run(); } + + /** {@inheritDoc} */ + @Override + public Prototype getNewMenuContributionPrototype(IContributionItem contributionItem) { + if(contributionItem instanceof ActionContributionItem) { + ActionContributionItem aItem = (ActionContributionItem)contributionItem; + if(aItem.getAction() instanceof NavigatorNewMenu.AddPrototypeAction) { + NavigatorNewMenu.AddPrototypeAction action = + (NavigatorNewMenu.AddPrototypeAction)aItem.getAction(); + return action.getPrototype(); + } + } + return null; + } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java index 7cefc2e21..90bb6bf54 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/TutorialUIService.java @@ -24,11 +24,13 @@ import java.util.List; import java.util.Map; import org.eclipse.emf.ecore.EObject; +import org.eclipse.jface.action.IContributionItem; import org.fortiss.tooling.kernel.extension.ITutorialProvider; import org.fortiss.tooling.kernel.extension.data.TutorialStep; import org.fortiss.tooling.kernel.service.ITutorialService; import org.fortiss.tooling.kernel.ui.ToolingKernelUIActivator; import org.fortiss.tooling.kernel.ui.extension.ITutorialUIProvider; +import org.fortiss.tooling.kernel.ui.extension.data.TutorialStepUI; import org.fortiss.tooling.kernel.ui.service.ITutorialUIService; /** @@ -85,7 +87,11 @@ public final class TutorialUIService implements ITutorialUIService { return true; } TutorialStep step = ITutorialService.INSTANCE.getActiveTutorialStep(); - return p.getLocalUIWhitelistProvider(step).elementVisibleInNavigator(element); + if(step instanceof TutorialStepUI) { + return p.getLocalUIWhitelistProvider((TutorialStepUI)step).elementVisibleInNavigator( + element); + } + return false; } /** {@inheritDoc} */ @@ -96,30 +102,41 @@ public final class TutorialUIService implements ITutorialUIService { return true; } TutorialStep step = ITutorialService.INSTANCE.getActiveTutorialStep(); - return p.getLocalUIWhitelistProvider(step).globalDefaultActionsVisible(); + if(step instanceof TutorialStepUI) { + return p.getLocalUIWhitelistProvider((TutorialStepUI)step) + .globalDefaultActionsVisible(); + } + return false; } /** {@inheritDoc} */ @Override - public boolean contextMenuContributionVisible(EObject element, Object contribution) { + public boolean contextMenuContributionVisible(EObject element, IContributionItem contribution) { ITutorialUIProvider p = getCurrentUIProvider(); if(p.getGlobalUIWhitelistProvider().contextMenuContributionVisible(element, contribution)) { return true; } TutorialStep step = ITutorialService.INSTANCE.getActiveTutorialStep(); - return p.getLocalUIWhitelistProvider(step).contextMenuContributionVisible(element, - contribution); + if(step instanceof TutorialStepUI) { + return p.getLocalUIWhitelistProvider((TutorialStepUI)step) + .contextMenuContributionVisible(element, contribution); + } + return false; } /** {@inheritDoc} */ @Override - public boolean contextMenuContributionVisible(List<EObject> element, Object contribution) { + public boolean contextMenuContributionVisible(List<EObject> element, + IContributionItem contribution) { ITutorialUIProvider p = getCurrentUIProvider(); if(p.getGlobalUIWhitelistProvider().contextMenuContributionVisible(element, contribution)) { return true; } TutorialStep step = ITutorialService.INSTANCE.getActiveTutorialStep(); - return p.getLocalUIWhitelistProvider(step).contextMenuContributionVisible(element, - contribution); + if(step instanceof TutorialStepUI) { + return p.getLocalUIWhitelistProvider((TutorialStepUI)step) + .contextMenuContributionVisible(element, contribution); + } + return false; } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorNewMenu.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorNewMenu.java index a1ddee8c8..ff832453a 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorNewMenu.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorNewMenu.java @@ -89,7 +89,7 @@ public class NavigatorNewMenu implements IContextMenuContributor { } /** Action for creating a new prototype. */ - private static class AddPrototypeAction extends Action { + public static class AddPrototypeAction extends Action { /** The prototype. */ private final Prototype prototype; @@ -152,5 +152,10 @@ public class NavigatorNewMenu implements IContextMenuContributor { return IElementCompositorService.INSTANCE.canCompose(container, prototype.getPrototype(), null); } + + /** Returns the associated prototype. */ + public Prototype getPrototype() { + return prototype; + } } } diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IActionService.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IActionService.java index 0ba78dbaf..bce2072d3 100644 --- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IActionService.java +++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/service/IActionService.java @@ -17,8 +17,10 @@ $Id$ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.service; +import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuManager; import org.eclipse.ui.IActionBars; +import org.fortiss.tooling.kernel.extension.data.Prototype; import org.fortiss.tooling.kernel.ui.internal.ActionService; /** @@ -83,4 +85,10 @@ public interface IActionService { * service when any command stack changes. */ void refresh(); + + /** + * Returns whether the given contribution item was provided by the navigator's new menu and + * returns the associated prototype. + */ + Prototype getNewMenuContributionPrototype(IContributionItem contributionItem); } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialWhitelistProvider.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialWhitelistProvider.java index 3bdd5e594..b23be6357 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialWhitelistProvider.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/ITutorialWhitelistProvider.java @@ -17,11 +17,10 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.extension; -import org.eclipse.emf.ecore.EObject; import org.fortiss.tooling.kernel.extension.data.Prototype; /** - * Instances of this interface provide white lists for tool functions + * Instances of this interface provide white lists for non-UI tool functions * globally enabled in tutorial or locally enabled in a tutorial step. * * @author hoelzl @@ -33,8 +32,8 @@ public interface ITutorialWhitelistProvider { /** * Returns whether the given prototype is active in this tutorial. Note that active - * prototypes may still be filtered by other methods of this whitelist provider, e.g., - * {@link #contextMenuContributionVisible(EObject, Object)}. + * prototypes may still be filtered by other methods of whitelist providers, in particular those + * related to the UI services. */ public boolean prototypeActive(Prototype prototype); } diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/TutorialStep.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/TutorialStep.java index ed5e29b87..9c946a81f 100644 --- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/TutorialStep.java +++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/extension/data/TutorialStep.java @@ -18,6 +18,7 @@ $Id: codetemplates.xml 1 2011-01-01 00:00:01Z hoelzl $ package org.fortiss.tooling.kernel.extension.data; import org.fortiss.tooling.kernel.extension.ITutorialWhitelistProvider; +import org.fortiss.tooling.kernel.extension.base.TutorialBlacklistAllProvider; /** * Data class for steps of tutorials. @@ -28,8 +29,11 @@ import org.fortiss.tooling.kernel.extension.ITutorialWhitelistProvider; * @ConQAT.Rating RED Hash: */ public abstract class TutorialStep { - /** Returns the step-specific whitelist provider. */ + /** + * Returns the step-specific whitelist provider. The default returns a provider blacklisting + * everything. + */ public ITutorialWhitelistProvider getWhitelistProvider() { - return null; + return new TutorialBlacklistAllProvider(); } } -- GitLab