From e3334c6ccdaec9f0a5b582ca569bec5d2e5ebf3a Mon Sep 17 00:00:00 2001
From: Daniel Ratiu <ratiu@fortiss.org>
Date: Sat, 19 Nov 2011 20:23:18 +0000
Subject: [PATCH] a first implementation for feature 92 -- now the navigator
 view can filter out elements that should not be displayed in non-expert view.
 refs 92

---
 .../trunk/icons/expert_view.png               | Bin 0 -> 876 bytes
 .../ui/extension/IModelElementHandler.java    |   6 +++
 .../base/ModelElementHandlerBase.java         |   6 +++
 .../views/NavigatorTreeContentProvider.java   |  43 +++++++++++++++---
 .../ui/internal/views/NavigatorViewPart.java  |  20 +++++++-
 5 files changed, 68 insertions(+), 7 deletions(-)
 create mode 100644 org.fortiss.tooling.kernel.ui/trunk/icons/expert_view.png

diff --git a/org.fortiss.tooling.kernel.ui/trunk/icons/expert_view.png b/org.fortiss.tooling.kernel.ui/trunk/icons/expert_view.png
new file mode 100644
index 0000000000000000000000000000000000000000..ed3c1c4e3f8381ecd82eae3c992308a3129d5219
GIT binary patch
literal 876
zcmV-y1C#uTP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipr1
z6bv<Bcn_}t00QhuL_t(I%T<$2Y?O5nhkyTf`vs;YA_*?++TcYD6k1CtRTE<xFO6+t
z;=w3pP4FW@qKScUQPNbsc<^LQY#>Sq2N4M-*cwRCgVt=ITXtEkYn9fzyQM-GmX>yL
z-*+Al?^1OxbC{3c%rhBxac~fh9#>0umzGKe(fPPK1_u;?JW0+;k`o|d!i%Vs&1mBJ
z-73dp(sEE`^x0>q3>}8yvrP6sP446g00ILrFe5MsfW`7WsTZDO_|aYDE@u$HUxgy0
zZCfcF*w4+k50Yxz#{6#+P^$;1Vi<7Y%{Mr|Z96}l`~m>^wS<W?r^&?P%=h&&-_t{~
zyPFE3Y7maX<i|sdZQ07HgZnYS4+7+y5rjQRzV|LUuZh`Bo0w^6V(hhjE3vD|B$qZn
z%!%G!7Ojc_W`;1s3?Lu?zU%L2N@B`INJ~t8c7%mWg-pkGPPeu3=hb4knHgXqgOF3G
zwQ#G<`RGPwB?=N>wYQUgF~PSjYe)`{{L95cr@NiZz_%&@`HLyWB$6#_`SPhAer~L1
z<bx0S&uK6-%nZ*tC&@{YoP~br+&LlXmmQnck(<`)b!)YuFrz?{ISX^03#)33R#wQL
z{hD!!Gl`cNefbrpC5kQ0<RpGScAWp&U5HqC<E0zdx!kyl;aHrx#ak?uOZ*tUpS;Ah
z94W7kYgeuS;8z3ukOBC>9pKj|pWypQ6WQ_9ipcbZF|rcHHTRKkZXnyaljS=V{2B)j
zOc6=>Lxb|u8FAzzZE5e2Ss?RGtveo3{U?W2jjmUu^D*6Pf2;7;0ZEbq<awT_Yu}7W
zr#{zQBB5Q0J(48Pi^xShnWP6_-J?ohpH{_M)zrOHt0yN_Ja$yB&Xc>59;dwbb<J#e
zKo5O7q;>Z+%LB<dAtXccJT2c|(ConbibvOr+hyJSX+m}T_A0Wwt83to>vL*7^p0X1
z;}TZ;VJAoU&rVW(L!%<CQDrk}6+NetSEt$1g8l)HtbH*|Dow@!0000<MNUMnLSTYl
C@sXea

literal 0
HcmV?d00001

diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java
index c27bc341e..a4305a51f 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java
@@ -86,4 +86,10 @@ public interface IModelElementHandler<T extends EObject> extends
 	 * in graphical editors.
 	 */
 	List<EObject> getSpecifications(T element);
+
+	/**
+	 * Returns true if the underlying element should be visible in the navigator
+	 * in the non-expert view.
+	 */
+	boolean hiddenInNonExpertView();
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java
index bd353a15d..bb279339f 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java
@@ -93,4 +93,10 @@ public abstract class ModelElementHandlerBase<T extends EObject> implements
 	public List<EObject> getSpecifications(T element) {
 		return Collections.emptyList();
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	public boolean hiddenInNonExpertView() {
+		return false;
+	}
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java
index ef1a30000..e12e42891 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java
@@ -39,6 +39,9 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
  */
 public class NavigatorTreeContentProvider implements ITreeContentProvider {
 
+	/** Stores whether the expert view is active. **/
+	private boolean expertViewActive = false;
+
 	/** {@inheritDoc} */
 	@Override
 	public Object[] getElements(Object inputElement) {
@@ -54,22 +57,42 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
 
 	/** {@inheritDoc} */
 	@Override
-	public Object[] getChildren(Object parentElement) {
+	public Object[] getChildren(Object parent) {
 		// delegate to the model element handlers
-		if (parentElement instanceof EObject) {
+		if (parent instanceof EObject) {
+			EObject parentElement = (EObject) parent;
 			IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
-					.getModelElementHandler((EObject) parentElement);
+					.getModelElementHandler(parentElement);
 			if (handler != null) {
 				List<EObject> children = new ArrayList<EObject>();
-				children.addAll(handler.getSubnodes((EObject) parentElement));
-				children.addAll(handler
-						.getSpecifications((EObject) parentElement));
+				children.addAll(filterExpertElements(handler
+						.getSubnodes(parentElement)));
+				children.addAll(filterExpertElements(handler
+						.getSpecifications(parentElement)));
 				return children.toArray();
 			}
 		}
 		return new Object[0];
 	}
 
+	/**
+	 * If {@link #expertViewActive} is false then we filter out elements
+	 * according to {@link IModelElementHandler#hiddenInNonExpertView()}
+	 */
+	private List<EObject> filterExpertElements(List<EObject> elements) {
+		if (!expertViewActive) {
+			List<EObject> filtered = new ArrayList<EObject>();
+			for (EObject current : elements) {
+				IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
+						.getModelElementHandler(current);
+				if (!handler.hiddenInNonExpertView())
+					filtered.add(current);
+			}
+			return filtered;
+		}
+		return elements;
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public Object getParent(Object element) {
@@ -100,4 +123,12 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
 		// the input of this viewer is the persistency service singleton and
 		// therefore never changes.
 	}
+
+	/**
+	 * Toggle the expert view. When expert view is active then more objects are
+	 * displayed in the tree.
+	 */
+	public void toggleExpertView() {
+		expertViewActive = !expertViewActive;
+	}
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java
index 1c3d5c6e6..35ac297c8 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorViewPart.java
@@ -63,8 +63,8 @@ import org.fortiss.tooling.kernel.ui.service.IContextMenuService;
 import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService;
 import org.fortiss.tooling.kernel.ui.service.INavigatorService;
 import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils;
-import org.fortiss.tooling.kernel.ui.util.PropertiesConstantUtils;
 import org.fortiss.tooling.kernel.ui.util.ModelElementLabelProvider;
+import org.fortiss.tooling.kernel.ui.util.PropertiesConstantUtils;
 
 /**
  * {@link ViewPart} of the model navigator provided by the tooling kernel.
@@ -94,6 +94,9 @@ public final class NavigatorViewPart extends ViewPart implements
 	/** Stores the toggle action for editor linkage. */
 	private Action linkWithEditorAction = null;
 
+	/** Toggle expert view filter action. */
+	private Action toggleExpertViewAction = null;
+
 	/** Dialog setting ID for the link with editor action flag. */
 	private static final String LINK_WITH_EDITOR_FLAG = "navigatorSettingLinkWithEditor";
 
@@ -188,11 +191,26 @@ public final class NavigatorViewPart extends ViewPart implements
 		linkWithEditorAction.setChecked(ToolingKernelUIActivator.getDefault()
 				.getDialogSettings().getBoolean(LINK_WITH_EDITOR_FLAG));
 
+		toggleExpertViewAction = new Action("Toggle expert view", SWT.TOGGLE) {
+
+			@Override
+			public void run() {
+				((NavigatorTreeContentProvider) viewer.getContentProvider())
+						.toggleExpertView();
+				viewer.refresh();
+			}
+		};
+
+		toggleExpertViewAction.setImageDescriptor(ToolingKernelUIActivator
+				.getImageDescriptor("icons/expert_view.png"));
+		toggleExpertViewAction.setToolTipText("Toggle expert view");
+
 		IToolBarManager toolBarManager = getViewSite().getActionBars()
 				.getToolBarManager();
 		Separator additionsSeperator = new Separator("additions");
 		additionsSeperator.setVisible(true);
 		toolBarManager.add(additionsSeperator);
+		toolBarManager.insertAfter("additions", toggleExpertViewAction);
 		toolBarManager.insertAfter("additions", linkWithEditorAction);
 	}
 
-- 
GitLab