[MetaModelViewer] Sphinx-Registry UI elements are now hidden if not in use
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterEcoreFileAction.java
similarity index 68%
rename from eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
rename to eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterEcoreFileAction.java
index f1a24eb..82673b7 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterECOREfilesAction.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/utils/RegisterEcoreFileAction.java
@@ -1,6 +1,6 @@
 /**
  ********************************************************************************
- * Copyright (c) 2017-2020 Robert Bosch GmbH.
+ * Copyright (c) 2017-2021 Robert Bosch GmbH.
  * 
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -33,21 +33,15 @@
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl;
-import org.eclipse.jface.viewers.ComboViewer;
 
-public class RegisterECOREfilesAction {
+public class RegisterEcoreFileAction {
 
 	// Suppress default constructor
-	private RegisterECOREfilesAction() {
+	private RegisterEcoreFileAction() {
 		throw new IllegalStateException("Utility class");
 	}
-	
-	@SuppressWarnings({ "unused", "rawtypes", "unchecked" })
-	public static ResourceSet loadECOREs(List<String> ecoreFiles, ComboViewer combo_ecore) throws IOException {
 
-		final Registry master_ePackageRegistry = EPackage.Registry.INSTANCE;
-
-		System.out.println(master_ePackageRegistry.size());
+	public static List<String> loadEcoreFiles(List<String> ecoreFiles) throws IOException {
 
 		ResourceSet metaDataResourceSet = new ResourceSetImpl();
 
@@ -59,12 +53,8 @@
 
 		extensionToFactoryMap.put("ecore", new EcoreResourceFactoryImpl());
 
-//		extensionToFactoryMap.put("xmi", new XMIResourceFactoryImpl());
-
-		// resourceSet.getURIConverter().getURIMap().putAll(EcorePlugin.computePlatformURIMap(true));
-
 		// register Ecore model in resourceSet registry
-		Map packageRegistry = metaDataResourceSet.getPackageRegistry();
+		Registry packageRegistry = metaDataResourceSet.getPackageRegistry();
 
 		packageRegistry.put("http://www.eclipse.org/emf/2002/Ecore", EcorePackage.eINSTANCE);
 
@@ -80,42 +70,31 @@
 				}
 			} else {
 				packageRegistry.put(loadEPackage.getNsURI(), loadEPackage);
-
 			}
 
-//			master_ePackageRegistry.put(loadEPackage.getNsURI(), loadEPackage);
-
 		}
 
 		EcoreUtil.resolveAll(metaDataResourceSet);
 
 		/*-for sorting */
 
-		ArrayList arrayList = new ArrayList(master_ePackageRegistry.keySet());
+		List<String> keyList = new ArrayList<>(EPackage.Registry.INSTANCE.keySet());
+		Collections.sort(keyList);
 
-		Collections.sort(arrayList);
+		keyList.addAll(0, metaDataResourceSet.getPackageRegistry().keySet());
 
-		arrayList.addAll(0, metaDataResourceSet.getPackageRegistry().keySet());
+		EPackage.Registry.INSTANCE.putAll(metaDataResourceSet.getPackageRegistry());
 
-		master_ePackageRegistry.putAll(metaDataResourceSet.getPackageRegistry());
-
-		combo_ecore.setInput(arrayList.toArray());
-
-		return metaDataResourceSet;
+		return keyList;
 	}
 
 	private static EPackage loadEPackage(String path, ResourceSet metaResourceSet) throws IOException {
 
-//		path = path.contains("file:////") ? path : "file:////" + getCanonicalPathFullPath(path);
 		path = getCanonicalPathFullPath(path);
-
-//		Resource metaResource = metaResourceSet.getResource(URI.createURI(path), true);
 		Resource metaResource = metaResourceSet.getResource(URI.createFileURI(path), true);
-
 		metaResource.load(Collections.emptyMap());
 
 		EObject eObject = metaResource.getContents().get(0);
-
 		return (EPackage) eObject;
 
 	}
diff --git a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
index ba1f441..b30a4e5 100644
--- a/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
+++ b/eclipse-tools/emf-graphical-viewer/plugins/org.eclipse.app4mc.emf.metamodelviewer/src/org/eclipse/app4mc/emf/metamodelviewer/views/MetaModelExplorerView.java
@@ -1,6 +1,6 @@
 /**
  ********************************************************************************
-  * Copyright (c) 2017-2020 Robert Bosch GmbH.
+  * Copyright (c) 2017-2021 Robert Bosch GmbH.
  * 
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -27,14 +27,9 @@
 import org.eclipse.app4mc.emf.metamodelviewer.preferences.MetaModelViewerPreferenceConstants;
 import org.eclipse.app4mc.emf.metamodelviewer.utils.ElementSearchPatternFilter;
 import org.eclipse.app4mc.emf.metamodelviewer.utils.PluginUtils;
-import org.eclipse.app4mc.emf.metamodelviewer.utils.RegisterECOREfilesAction;
+import org.eclipse.app4mc.emf.metamodelviewer.utils.RegisterEcoreFileAction;
 import org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewContentProvider;
 import org.eclipse.app4mc.emf.metamodelviewer.views.providers.ViewLabelProvider;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IConfigurationElement;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EPackage.Registry;
@@ -55,10 +50,12 @@
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Combo;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Label;
@@ -78,7 +75,7 @@
 	 * The ID of the view as specified by the extension.
 	 */
 	public static final String ID = "org.eclipse.app4mc.emf.metamodelviewer.views.MetaModelExplorerView";
-	private static int id_Counter = 1;
+	private static int viewCounter = 1;
 	private TreeViewer viewer;
 	private Action filterClassesAction;
 	private Action registerEcoreFilesAction;
@@ -87,14 +84,16 @@
 	private boolean filterForEClassifiersBoolean = true;
 	private boolean filterForAttributesBoolean;
 	private ElementSearchPatternFilter patternFilter;
-	private ComboViewer combo_ecore;
+	private ComboViewer ecoreCombo;
 
 	private ISphinxWrapper sphinxWrapper;
+
 	@Override
 	public void init(IViewSite site) throws PartInitException {
 		super.init(site);
-		sphinxWrapper=PluginUtils.getObjectOfSphinxWrapper();
+		sphinxWrapper = PluginUtils.getObjectOfSphinxWrapper();
 	}
+
 	/**
 	 * This is a callback that will allow us to create the viewer and initialize it.
 	 */
@@ -102,86 +101,68 @@
 	public void createPartControl(final Composite parent) {
 		parent.setLayout(new GridLayout(2, false));
 
-		final Label label = new Label(parent, 0);
+		final Label sphinxLabel = new Label(parent, 0);
+		final Combo sphinxCombo = new Combo(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
 
-		label.setText("SPHINX Registry");
+		Label ecoreLabel = new Label(parent, 0);
+		ecoreLabel.setText("ECORE Registry");
+		ecoreLabel.setLayoutData(new GridData());
 
-		label.setLayoutData(new GridData());
-
-		final Combo combo = new Combo(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
-
-		final Label label_ecore = new Label(parent, 0);
-
-		label_ecore.setText("ECORE Registry");
-
-		label_ecore.setLayoutData(new GridData());
-
-		combo_ecore = new ComboViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
+		ecoreCombo = new ComboViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.READ_ONLY);
 
 		final Registry ePackageRegistry = EPackage.Registry.INSTANCE;
-
 		final Set<String> keySet = ePackageRegistry.keySet();
-		// for (final String string : new TreeSet<String>(keySet)) {
-		//
-		// combo_ecore.add(string);
-		// }
-		combo_ecore.setContentProvider(ArrayContentProvider.getInstance());
-		combo_ecore.setLabelProvider(new LabelProvider() {
-			@Override
-			public String getText(Object element) {
-				return super.getText(element);
-			}
-		});
-
 		ArrayList<String> arrayList = new ArrayList<>(keySet);
-
 		Collections.sort(arrayList);
 
-		combo_ecore.setInput(arrayList.toArray());
+		ecoreCombo.setContentProvider(ArrayContentProvider.getInstance());
+		ecoreCombo.setLabelProvider(new LabelProvider());
+		ecoreCombo.setInput(arrayList.toArray());
 
-		combo_ecore.getCombo().addSelectionListener(new SelectionAdapter() {
+		ecoreCombo.getCombo().addSelectionListener(new SelectionAdapter() {
 			@Override
 			public void widgetSelected(final SelectionEvent e) {
-				combo.deselectAll();
+				sphinxCombo.deselectAll();
 
-				final String text = combo_ecore.getCombo().getText();
-
+				final String text = ecoreCombo.getCombo().getText();
 				final EPackage ePackage = ePackageRegistry.getEPackage(text);
-
 				getViewer().setInput(ePackage);
 			}
 		});
 
-//		final List<IMetaModelDescriptor> descriptors = MetaModelDescriptorRegistry.INSTANCE
-//				.getDescriptors(MetaModelDescriptorRegistry.ANY_MM);
+		if (sphinxWrapper == null) {
+			// hide Sphinx row
+			hideControl(sphinxLabel);
+			hideControl(sphinxCombo);
+		} else {
+			// initialize
+			sphinxLabel.setText("SPHINX Registry");
+			sphinxLabel.setLayoutData(new GridData());
 
-//		for (final IMetaModelDescriptor iMetaModelDescriptor : descriptors) {
-		
-		if(sphinxWrapper!=null) {
 			for (final String identifier : sphinxWrapper.getListOfMetaModelDescriptorIDs()) {
-				combo.add(identifier);
+				sphinxCombo.add(identifier);
 			}
-		}
 
-		combo.addSelectionListener(new SelectionAdapter() {
-			@Override
-			public void widgetSelected(final SelectionEvent e) {
-				combo_ecore.getCombo().deselectAll();
-
-				final String text = combo.getText();
-
-				if(sphinxWrapper !=null) {
-					final Object descriptor =sphinxWrapper.getMetaModelDescriptor(text);
-					getViewer().setInput(descriptor);
+			sphinxCombo.addSelectionListener(new SelectionAdapter() {
+				@Override
+				public void widgetSelected(final SelectionEvent e) {
+					ecoreCombo.getCombo().deselectAll();
+					
+					final String text = sphinxCombo.getText();
+					
+					if (sphinxWrapper != null) {
+						final Object descriptor = sphinxWrapper.getMetaModelDescriptor(text);
+						getViewer().setInput(descriptor);
+					}
 				}
-			}
-		});
+			});
+		}
 
 		this.patternFilter = new ElementSearchPatternFilter(this.filterForEClassifiersBoolean,
 				this.filterForAttributesBoolean);
 
 		final FilteredTree filteredTree = new FilteredTree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER,
-				this.patternFilter, true);
+				this.patternFilter, true, false);
 
 		filteredTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 0));
 
@@ -195,11 +176,8 @@
 		gridLayoutData.verticalAlignment = GridData.FILL;
 
 		this.viewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 0));
-
 		this.viewer.setContentProvider(new ViewContentProvider(sphinxWrapper));
-
 		this.viewer.setInput(getViewSite());
-
 		this.viewer.setLabelProvider(new ViewLabelProvider());
 
 		getSite().setSelectionProvider(this.viewer);
@@ -213,6 +191,20 @@
 		contributeToActionBars();
 	}
 
+	private void hideControl(Control control) {
+
+		control.setVisible(false);
+
+		GridData data = (GridData) control.getLayoutData();
+		if (data == null) {
+			data = new GridData();
+		}
+
+		data.exclude = true;
+		control.setLayoutData(data);
+		control.setSize(new Point(0, 0));
+	}
+
 	public TreeViewer getViewer() {
 		return this.viewer;
 	}
@@ -281,11 +273,7 @@
 		this.filterClassesAction = new Action("Filter for EClassifers", IAction.AS_CHECK_BOX) {
 			@Override
 			public void run() {
-				if (isChecked()) {
-					setFilterForEClassifiersBoolean(true);
-				} else {
-					setFilterForEClassifiersBoolean(false);
-				}
+				setFilterForEClassifiersBoolean(isChecked());
 			}
 		};
 
@@ -307,7 +295,7 @@
 			@Override
 			public void run() {
 				try {
-					getViewSite().getPage().showView(ID, id_Counter++ + "", IWorkbenchPage.VIEW_VISIBLE);
+					getViewSite().getPage().showView(ID, viewCounter++ + "", IWorkbenchPage.VIEW_VISIBLE);
 				} catch (PartInitException e) {
 					e.printStackTrace();
 				}
@@ -319,13 +307,9 @@
 		this.registerEcoreFilesAction = new Action("Register ECORE files") {
 			@Override
 			public void run() {
-				// TODO: add implementation for CSV report generation
-				Object input = viewer.getInput();
 
 				FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.OPEN | SWT.MULTI);
-
 				dialog.setFilterExtensions(new String[] { "*.ecore" });
-
 				dialog.open();
 
 				if ((dialog.getFileName() == null) || (dialog.getFileNames() == null)) {
@@ -333,20 +317,19 @@
 				}
 
 				List<String> files = new ArrayList<>();
-
 				for (String fileName : dialog.getFileNames()) {
 					String filePath = dialog.getFilterPath() + File.separator + fileName;
-
 					files.add(filePath);
 				}
 
+				List<String> keyList = Collections.emptyList();
 				try {
-					RegisterECOREfilesAction.loadECOREs(files, combo_ecore);
+					keyList = RegisterEcoreFileAction.loadEcoreFiles(files);
 				} catch (Exception e) {
-					Display.getDefault().asyncExec(
-							() -> MessageDialog.openError(Display.getDefault().getActiveShell(), "Error", e.getMessage())
-							);
+					Display.getDefault().asyncExec(() -> MessageDialog.openError(Display.getDefault().getActiveShell(),
+							"Error", e.getMessage()));
 				}
+				ecoreCombo.setInput(keyList.toArray());
 			}
 		};
 		this.registerEcoreFilesAction.setToolTipText("Register ECORE files");
@@ -354,46 +337,44 @@
 	}
 
 	private void hookDoubleClickAction() {
-		this.viewer.addDoubleClickListener(
-				event -> {
-					final ISelection selection = event.getSelection();
+		this.viewer.addDoubleClickListener(event -> {
+			final ISelection selection = event.getSelection();
 
-					if (selection instanceof TreeSelection) {
-						final Object firstElement = ((TreeSelection) selection).getFirstElement();
+			if (selection instanceof TreeSelection) {
+				final Object firstElement = ((TreeSelection) selection).getFirstElement();
 
-						if (firstElement instanceof EObject) {
-							Shell parentShell = null;
+				if (firstElement instanceof EObject) {
+					Shell parentShell = null;
 
-							String displayDialogStyle = (Activator.getDefault().getPreferenceStore()
-									.getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY));
+					String displayDialogStyle = (Activator.getDefault().getPreferenceStore()
+							.getString(MetaModelViewerPreferenceConstants.P_DIALOG_DISPLAY));
 
-							if ((displayDialogStyle != null)
-									&& displayDialogStyle.equals(MetaModelViewerPreferenceConstants.V_ON_TOP)) {
-								parentShell = new Shell(SWT.ON_TOP);
-							} else {
-								parentShell = new Shell();
-							}
-
-							// final String name = ((firstElement instanceof EClass) ? ((EClass)
-							// firstElement).getName() :
-							// "");
-							//
-							// parentShell.setText("Details of : " + ((EClass)
-							// firstElement).eClass().getName() + " " +
-							// name);
-							//
-							//
-							// final TaskBar systemTaskBar = parentShell.getDisplay().getSystemTaskBar();
-							// final TaskItem taskItem = systemTaskBar.getItem(parentShell);
-							//
-							// taskItem.setData(parentShell);
-							// taskItem.setOverlayText(name);
-							// taskItem.setText(name);
-							new SelectedElementContentDialog(parentShell, getSite(), (EObject) firstElement).open();
-						}
+					if ((displayDialogStyle != null)
+							&& displayDialogStyle.equals(MetaModelViewerPreferenceConstants.V_ON_TOP)) {
+						parentShell = new Shell(SWT.ON_TOP);
+					} else {
+						parentShell = new Shell();
 					}
+
+					// final String name = ((firstElement instanceof EClass) ? ((EClass)
+					// firstElement).getName() :
+					// "");
+					//
+					// parentShell.setText("Details of : " + ((EClass)
+					// firstElement).eClass().getName() + " " +
+					// name);
+					//
+					//
+					// final TaskBar systemTaskBar = parentShell.getDisplay().getSystemTaskBar();
+					// final TaskItem taskItem = systemTaskBar.getItem(parentShell);
+					//
+					// taskItem.setData(parentShell);
+					// taskItem.setOverlayText(name);
+					// taskItem.setText(name);
+					new SelectedElementContentDialog(parentShell, getSite(), (EObject) firstElement).open();
 				}
-				);
+			}
+		});
 	}
 
 	/**
@@ -439,7 +420,5 @@
 
 		this.patternFilter.setFilterForAttributesBoolean(filterForAttributesBoolean);
 	}
-	
-	
-	
+
 }