[tests] Add menu contribution for manual test szenarios

Change-Id: I21eb877474868847f3568b570faedd97ecb70e5d
Signed-off-by: Marcel Bruch <marcel.bruch@codetrails.com>
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/META-INF/MANIFEST.MF b/tests/org.eclipse.epp.logging.aeri.ide.manual/META-INF/MANIFEST.MF
index d977bfa..239b4db 100644
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.epp.logging.aeri.ide.manual/META-INF/MANIFEST.MF
@@ -12,4 +12,5 @@
  org.eclipse.core.runtime,
  org.eclipse.epp.logging.aeri.core,
  org.eclipse.epp.logging.aeri.ide,
- com.google.guava
+ com.google.guava,
+ org.eclipse.core.expressions
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/OSGI-INF/l10n/bundle.properties b/tests/org.eclipse.epp.logging.aeri.ide.manual/OSGI-INF/l10n/bundle.properties
index 8714967..a766bcd 100644
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/OSGI-INF/l10n/bundle.properties
+++ b/tests/org.eclipse.epp.logging.aeri.ide.manual/OSGI-INF/l10n/bundle.properties
@@ -1,3 +1,3 @@
 # META-INF/MANIFEST.MF
-Bundle-Name=Eclipse Automated Error Reporting Tests
+Bundle-Name=Eclipse Automated Error Reporting Manual Tests
 Bundle-Vendor=Eclipse Packaging Project
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/asterisk_orange.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/asterisk_orange.png
deleted file mode 100644
index 1ebebde..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/asterisk_orange.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/database_error.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/database_error.png
deleted file mode 100644
index 578221a..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/database_error.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/database_refresh.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/database_refresh.png
deleted file mode 100644
index ff803be..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/database_refresh.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/eclipse.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/eclipse.png
deleted file mode 100644
index 55760f9..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/eclipse.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/jbosstools.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/jbosstools.png
deleted file mode 100644
index 6acda27..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj16/jbosstools.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/ctrlflow.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/ctrlflow.png
deleted file mode 100644
index f164f27..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/ctrlflow.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/eclipse.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/eclipse.png
deleted file mode 100644
index 43edfa0..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/eclipse.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/jbosstools.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/jbosstools.png
deleted file mode 100644
index c86ef27..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj32/jbosstools.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/ctrlflow.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/ctrlflow.png
deleted file mode 100644
index 78ee36e..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/ctrlflow.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/eclipse.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/eclipse.png
deleted file mode 100644
index 34150a7..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/eclipse.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/jbosstools.png b/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/jbosstools.png
deleted file mode 100644
index ec2bba1..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/icons/obj64/jbosstools.png
+++ /dev/null
Binary files differ
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/plugin.xml b/tests/org.eclipse.epp.logging.aeri.ide.manual/plugin.xml
index 598b29b..c6be8c4 100644
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/plugin.xml
+++ b/tests/org.eclipse.epp.logging.aeri.ide.manual/plugin.xml
@@ -2,61 +2,18 @@
 <?eclipse version="3.4"?>
 <plugin>
    <extension
-         point="org.eclipse.ui.commands">
-      <command
-            defaultHandler="org.eclipse.epp.internal.logging.aeri.ide.actions.LogErrorHandler"
-            id="org.eclipse.epp.logging.aeri.ui.tests.errorCommand"
-            name="Log Error">
-            <commandParameter id="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param" name="Message" optional="true"/>
-      </command>
-   </extension>
-   <extension
          point="org.eclipse.ui.menus">
       <menuContribution
             allPopups="false"
             locationURI="toolbar:org.eclipse.ui.main.toolbar">
-          <toolbar id="org.eclipse.epp.logging.aeri.ui.tests.toolbar">
-           <command id="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="pulldown" tooltip="Log Error">
-              <parameter value="0" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-           </command>
+          <toolbar
+                id="org.eclipse.epp.logging.aeri.ide.manual.toolbar"
+                label="Error Test Szenarios">
+             <dynamic
+                   class="org.eclipse.epp.logging.aeri.ide.manual.TestSzenariosContribution"
+                   id="org.eclipse.epp.logging.aeri.ide.manual.menuContributions">
+             </dynamic>
          </toolbar>
       </menuContribution>
    </extension>
-   <extension point="org.eclipse.ui.menus">
-     <menuContribution locationURI="menu:org.eclipse.epp.logging.aeri.ui.tests.errorCommand">
-        <command label="Log Verify Error" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="1" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Log MS Error" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="2" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-         <command label="UI Freeze" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="3" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Log CE Error" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="4" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Test UI Deadlock" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="5" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Log job error w/o exception" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="6" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Log in Display.asyncExec" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="7" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Log in Display.syncExec" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="8" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Log in Handler.execute" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="9" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Trigger New End-Points Available Notification" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="10" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-        <command label="Trigger JBoss Error" commandId="org.eclipse.epp.logging.aeri.ui.tests.errorCommand" style="push">
-           <parameter value="11" name="org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"/>
-        </command>
-     </menuContribution>
-  </extension>
 </plugin>
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/src/org/eclipse/epp/internal/logging/aeri/ide/actions/LogErrorHandler.java b/tests/org.eclipse.epp.logging.aeri.ide.manual/src/org/eclipse/epp/internal/logging/aeri/ide/actions/LogErrorHandler.java
deleted file mode 100644
index 2943308..0000000
--- a/tests/org.eclipse.epp.logging.aeri.ide.manual/src/org/eclipse/epp/internal/logging/aeri/ide/actions/LogErrorHandler.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/**
- * Copyright (c) 2015 Codetrails GmbH.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Daniel Haftstein - initial API and implementation.
- */
-package org.eclipse.epp.internal.logging.aeri.ide.actions;
-
-import java.util.List;
-
-import org.eclipse.core.commands.AbstractHandler;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.runtime.ILog;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.IJobFunction;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.epp.internal.logging.aeri.ide.IDEWorkflow;
-import org.eclipse.epp.internal.logging.aeri.ide.IServerDescriptor;
-import org.eclipse.epp.logging.aeri.core.SystemControl;
-import org.eclipse.epp.logging.aeri.tests.util.TestStatuses;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.handlers.HandlerUtil;
-import org.osgi.framework.FrameworkUtil;
-
-import com.google.common.base.Throwables;
-
-public class LogErrorHandler extends AbstractHandler {
-
-    private ILog log = Platform.getLog(FrameworkUtil.getBundle(getClass()));
-
-    @Override
-    public Object execute(final ExecutionEvent event) throws ExecutionException {
-        System.setProperty("eclipse.buildId", "unit-tests");
-        final int parameter = Integer.parseInt(event.getParameter("org.eclipse.epp.logging.aeri.ui.tests.errorCommand.param"));
-
-        switch (parameter) {
-        case 9:
-            throw new RuntimeException("Exception in handler.execute");
-        case 10:
-            IServerDescriptor server = getServers().get(1);
-            server.setConfigured(false);
-            server.setEnabled(true);
-            server = getServers().get(2);
-            server.setConfigured(false);
-            server.setEnabled(true);
-            throw new RuntimeException("Exception in handler.execute");
-        case 11: {
-            logJBossError();
-            break;
-        }
-        default:
-            break;
-        }
-        Job job = new Job("test exceptions") {
-
-            @Override
-            public IStatus run(IProgressMonitor monitor) {
-
-                switch (parameter) {
-                case 0: {
-                    logError();
-                    break;
-                }
-                case 1: {
-                    logVerifyError();
-                    break;
-                }
-                case 2: {
-                    logMultiStatus();
-                    break;
-                }
-                case 3: {
-                    uiFreeze();
-                    break;
-                }
-                case 4: {
-                    logCoreExceptionError();
-                    break;
-                }
-                case 5: {
-                    Display.getDefault().asyncExec(new Runnable() {
-
-                        @Override
-                        public void run() {
-                            try {
-                                testUiDeadlock(event);
-                            } catch (ExecutionException e) {
-                                Throwables.propagate(e);
-                            }
-                        }
-                    });
-                }
-                case 6: {
-                    logEmptyJob();
-                    break;
-                }
-                case 7: {
-                    logInDisplayAsyncExec();
-                    break;
-                }
-                case 8: {
-                    logDisplaySyncExec();
-                    break;
-                }
-                default:
-                    break;
-                }
-                return Status.OK_STATUS;
-            }
-
-        };
-        job.schedule();
-        return null;
-    }
-
-    private List<IServerDescriptor> getServers() {
-        return SystemControl.get(IDEWorkflow.CTX_SERVERS);
-    }
-
-    private void logError() {
-        log.log(TestStatuses.thirdPartyStatus());
-    }
-
-    private void logVerifyError() {
-        log.log(new Status(IStatus.ERROR, "org.eclipse.epp.logging.aeri", "Test Error without exception", new VerifyError(
-                "Bad type on operand stack Exception Details: Location: org/eclipse/recommenders/internal/snipmatch/rcp/EclipseGitSnippetRepository.push(Lorg/eclipse/jgit/lib/Repository;Lorg/eclipse/swt/widgets/Shell;)V @47: invokevirtual Reason: Type 'org/eclipse/egit/ui/internal/credentials/EGitCredentialsProvider' (current frame, stack[1]) is not assignable to 'org/eclipse/jgit/transport/CredentialsProvider' Current Frame: bci: @47 flags: { } locals: { 'org/eclipse/recommenders/internal/snipmatch/rcp/EclipseGitSnippetRepository', 'org/eclipse/jgit/lib/Repository', 'org/eclipse/swt/widgets/Shell', 'org/eclipse/jgit/transport/RemoteConfig', integer, 'org/eclipse/egit/core/op/PushOperation' } stack: { 'org/eclipse/egit/core/op/PushOperation', 'org/eclipse/egit/ui/internal/credentials/EGitCredentialsProvider' } Bytecode: 0x0000000: 2bb8 032b 4eb8 0316 b603 1713 0146 b903 0x0000010: 7f02 0036 04bb 016f 592b 2db6 0338 0315 0x0000020: 04b7 0315 3a05 1905 bb01 7359 b703 1db6 0x0000030: 0314 bb01 8459 2ab2 02ec 1905 b703 513a 0x0000040: 0619 062a b402 e2b6 030e 1906 bb01 8559 0x0000050: 2a2c b703 52b6 030d 1906 b603 0cb1")));
-    }
-
-    private void logMultiStatus() {
-        log.log(TestStatuses.multiStatus());
-    }
-
-    private void uiFreeze() {
-        PlatformUI.getWorkbench().getDisplay().syncExec(new Runnable() {
-
-            @Override
-            public void run() {
-                try {
-                    Thread.sleep(6000);
-                } catch (InterruptedException e) {
-                }
-            }
-        });
-
-    }
-
-    private void logCoreExceptionError() {
-        log.log(TestStatuses.coreExceptionStatus());
-    }
-
-    private void testUiDeadlock(ExecutionEvent event) throws ExecutionException {
-
-        final Object lock = new Object();
-        IWorkbenchWindow window;
-        window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
-        MessageDialog.openInformation(window.getShell(), "TestLogingLock", "Test lock");
-        Job longRunningJob = Job.create("Test Log running job", new IJobFunction() {
-
-            @Override
-            public IStatus run(IProgressMonitor monitor) {
-                try {
-                    Thread.sleep(100);
-                } catch (InterruptedException e) {
-                    //
-                }
-                Platform.getLog(FrameworkUtil.getBundle(getClass()))
-                        .log(new Status(IStatus.ERROR, "org.eclipse.epp.logging.aeri", "Test logging errors"));
-                synchronized (lock) {
-                    lock.notifyAll();
-                }
-                return Status.OK_STATUS;
-            }
-        });
-        longRunningJob.schedule();
-        synchronized (lock) {
-            try {
-                lock.wait();
-            } catch (InterruptedException e) {
-                Platform.getLog(FrameworkUtil.getBundle(getClass())).log(Status.CANCEL_STATUS);
-            }
-        }
-        MessageDialog.openInformation(window.getShell(), "TestLogingLock", "No lock.");
-    }
-
-    private void logEmptyJob() {
-        new Job("log error status") {
-
-            @Override
-            protected IStatus run(IProgressMonitor monitor) {
-                return new Status(IStatus.ERROR, "org.eclipse.some", "Some failure in a error job w/o exception");
-            }
-        }.schedule();
-    }
-
-    private void logInDisplayAsyncExec() {
-        Display.getDefault().asyncExec(new Runnable() {
-
-            @Override
-            public void run() {
-                throw new RuntimeException("Exception in ui thread");
-            }
-        });
-    }
-
-    private void logDisplaySyncExec() {
-        Display.getDefault().syncExec(new Runnable() {
-
-            @Override
-            public void run() {
-                throw new RuntimeException("Exception in ui thread");
-            }
-        });
-    }
-
-    private void logJBossError() {
-        log.log(TestStatuses.jbossTools());
-    }
-
-}
diff --git a/tests/org.eclipse.epp.logging.aeri.ide.manual/src/org/eclipse/epp/logging/aeri/ide/manual/TestSzenariosContribution.java b/tests/org.eclipse.epp.logging.aeri.ide.manual/src/org/eclipse/epp/logging/aeri/ide/manual/TestSzenariosContribution.java
new file mode 100644
index 0000000..33f3bbc
--- /dev/null
+++ b/tests/org.eclipse.epp.logging.aeri.ide.manual/src/org/eclipse/epp/logging/aeri/ide/manual/TestSzenariosContribution.java
@@ -0,0 +1,60 @@
+package org.eclipse.epp.logging.aeri.ide.manual;
+
+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.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+
+public class TestSzenariosContribution extends org.eclipse.ui.menus.WorkbenchWindowControlContribution {
+
+    public TestSzenariosContribution() {
+    }
+
+    public TestSzenariosContribution(String id) {
+        super(id);
+    }
+
+    @Override
+    protected Control createControl(Composite parent) {
+
+        ToolBar toolBar = new ToolBar(parent, SWT.FLAT);
+        Menu menu = new Menu(toolBar);
+        hookFillMenu(menu);
+
+        ToolItem toolItem = new ToolItem(toolBar, SWT.DROP_DOWN);
+        toolItem.setText("Log...");
+        toolItem.addSelectionListener(new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                Rectangle rect = ((ToolItem) e.getSource()).getBounds();
+                Point pt = new Point(rect.x, rect.y + rect.height);
+                pt = toolBar.toDisplay(pt);
+                menu.setLocation(pt.x, pt.y);
+                menu.setVisible(true);
+            }
+        });
+
+        return toolBar;
+    }
+
+    private void hookFillMenu(Menu menu) {
+        for (int i = 0; i < 10; i++) {
+            MenuItem menuItem = new MenuItem(menu, SWT.NONE);
+            menuItem.setText("item " + i);
+            menuItem.addSelectionListener(new SelectionAdapter() {
+                @Override
+                public void widgetSelected(SelectionEvent event) {
+                    MenuItem selected = (MenuItem) event.widget;
+                    System.out.println(selected);
+                }
+            });
+        }
+    }
+}