feature[ats_ATS328836]: Add some common ui message stuff
Change-Id: I3ef39593e50f10063ac074b97e43558cfb80d773
diff --git a/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF b/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF
index 39d86a9..9ac3415 100644
--- a/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF
+++ b/org.eclipse.ote.ui.message.util/META-INF/MANIFEST.MF
@@ -15,6 +15,7 @@
Export-Package: org.eclipse.ote.ui.message.util
Import-Package: org.eclipse.osee.framework.jdk.core.persistence,
org.eclipse.osee.framework.plugin.core.util,
+ org.eclipse.osee.framework.ui.swt,
org.eclipse.osee.ote.messaging.dds.service,
org.eclipse.ote.message.lookup
Bundle-Vendor: Eclipse Open System Engineering Environment
diff --git a/org.eclipse.ote.ui.message.util/build.properties b/org.eclipse.ote.ui.message.util/build.properties
index 34d2e4d..c6baffa 100644
--- a/org.eclipse.ote.ui.message.util/build.properties
+++ b/org.eclipse.ote.ui.message.util/build.properties
@@ -1,4 +1,5 @@
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
- .
+ .,\
+ icons/
diff --git a/org.eclipse.ote.ui.message.util/icons/add.png b/org.eclipse.ote.ui.message.util/icons/add.png
new file mode 100644
index 0000000..5b051f6
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/icons/add.png
Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/icons/deleteAll.gif b/org.eclipse.ote.ui.message.util/icons/deleteAll.gif
new file mode 100644
index 0000000..28a3785
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/icons/deleteAll.gif
Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/icons/remove.png b/org.eclipse.ote.ui.message.util/icons/remove.png
new file mode 100644
index 0000000..7fb4e90
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/icons/remove.png
Binary files differ
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java
new file mode 100644
index 0000000..4f53bf3
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/AddMessagesAction.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Boeing.
+ * 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:
+ * Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ote.ui.message.util;
+
+import java.util.ArrayList;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osee.framework.ui.swt.Displays;
+import org.eclipse.ote.message.lookup.MessageLookupResult;
+import org.eclipse.ote.ui.message.util.MessageSelectionDialog;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Ken J. Aguilar
+ */
+public class AddMessagesAction extends Action {
+
+
+ private final MessageSelectComposite composite;
+
+ public AddMessagesAction(MessageSelectComposite composite) {
+ super("Select Messages", IAction.AS_PUSH_BUTTON);
+ setToolTipText("Select messages to append to the list of messages that will be recorded");
+ this.composite = composite;
+ setImageDescriptor(Images.ADD.getImageDescriptor());
+
+ }
+
+ @Override
+ public void run() {
+ Shell shell = Displays.getActiveShell();
+ MessageSelectionDialog msgSelectionDialog = new MessageSelectionDialog(shell);
+ msgSelectionDialog.setMultipleSelection(true);
+ if (msgSelectionDialog.open() == Window.OK) {
+ Object[] result = (Object[])msgSelectionDialog.getResult();
+ ArrayList<MessageLookupResult> list = new ArrayList<MessageLookupResult>(result.length);
+ for (Object item : result) {
+ MessageLookupResult lookupResult = (MessageLookupResult) item;
+ list.add(lookupResult);
+ }
+ composite.addMessages(list);
+ }
+
+ }
+
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java
new file mode 100644
index 0000000..b13a3a1
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteAllMessagesAction.java
@@ -0,0 +1,20 @@
+package org.eclipse.ote.ui.message.util;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+
+public class DeleteAllMessagesAction extends Action{
+ private final MessageSelectComposite composite;
+
+ public DeleteAllMessagesAction(MessageSelectComposite composite) {
+ super("Delete All Messages", IAction.AS_PUSH_BUTTON);
+ setToolTipText("Delete all messages from the recording list");
+ this.composite = composite;
+ setImageDescriptor(Images.DELETE_ALL.getImageDescriptor());
+
+ }
+
+ public void run() {
+ composite.deleteAll();
+ }
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java
new file mode 100644
index 0000000..a61f5d9
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/DeleteMessagesAction.java
@@ -0,0 +1,19 @@
+package org.eclipse.ote.ui.message.util;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+
+public class DeleteMessagesAction extends Action{
+ private final MessageSelectComposite composite;
+
+ public DeleteMessagesAction(MessageSelectComposite composite) {
+ super("Delete Selected Messages", IAction.AS_PUSH_BUTTON);
+ setToolTipText("Delete all selected from the recording list");
+ setImageDescriptor(Images.DELETE.getImageDescriptor());
+ this.composite = composite;
+ }
+
+ public void run() {
+ composite.deleteSelection();
+ }
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java
new file mode 100644
index 0000000..7904a3b
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/Images.java
@@ -0,0 +1,64 @@
+package org.eclipse.ote.ui.message.util;
+
+import java.io.IOException;
+import java.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ImageRegistry;
+import org.eclipse.swt.graphics.Image;
+import org.osgi.framework.FrameworkUtil;
+
+public enum Images {
+ ADD("icons/add.png"),
+ DELETE_ALL("icons/deleteAll.gif"),
+ DELETE("icons/remove.png"),
+ RECORD("icons/record_action.png");
+
+ private final String path;
+
+ private static ImageRegistry ir = new ImageRegistry();
+ /**
+ * @param path
+ */
+ private Images(String path) {
+ this.path = path;
+ }
+
+ /**
+ * @return the path
+ */
+ public String getPath() {
+ return path;
+ }
+
+ public Image getImage() {
+ Image image = ir.get(path);
+ if (image == null) {
+ image = ImageDescriptor.createFromURL(getFile(path)).createImage();
+ ir.put(path, image);
+ }
+ return image;
+ }
+
+ public ImageDescriptor getImageDescriptor() {
+ ImageDescriptor descriptor = ir.getDescriptor(path);
+ if (descriptor == null) {
+ descriptor = ImageDescriptor.createFromURL(getFile(path));
+ ir.put(path, descriptor);
+ }
+ return descriptor;
+ }
+
+ private static URL getFile(String path) {
+ URL url = FrameworkUtil.getBundle(Images.class).getEntry(path);
+ if (url == null) {
+ return null;
+ }
+ try {
+ return FileLocator.resolve(url);
+ } catch (IOException e) {
+ throw new RuntimeException("could not resolve URL from path: " + path, e);
+ }
+ }
+}
diff --git a/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java
new file mode 100644
index 0000000..5abf523
--- /dev/null
+++ b/org.eclipse.ote.ui.message.util/src/org/eclipse/ote/ui/message/util/MessageSelectComposite.java
@@ -0,0 +1,224 @@
+package org.eclipse.ote.ui.message.util;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.osee.framework.ui.swt.Widgets;
+import org.eclipse.ote.message.lookup.MessageLookupResult;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+
+public class MessageSelectComposite extends Composite{
+
+
+ private final TableViewer viewer;
+
+ private final HashSet<MessageLookupResult> items = new HashSet<MessageLookupResult>();
+
+ private final AddMessagesAction addMessageAction;
+ private final DeleteMessagesAction deleteMessageAction;
+ private final DeleteAllMessagesAction deleteAllMessagesAction;
+
+// private Button browseBtn;
+
+ public MessageSelectComposite(Composite parent, int style) {
+ super(parent, style);
+ Widgets.setFormLayout(this, 5, 5);
+// Label label = new Label(this, SWT.RIGHT);
+// label.setText("Output File:");
+
+// outputFilePathTxt = new Text(this, SWT.SINGLE | SWT.BORDER);
+// outputFilePathTxt.addModifyListener(new ModifyListener() {
+//
+// @Override
+// public void modifyText(ModifyEvent e) {
+//// updateUiStatus();
+// }
+// });
+// browseBtn = new Button(this, SWT.PUSH);
+// browseBtn.setText("Browse");
+// browseBtn.addSelectionListener(new SelectionAdapter() {
+//
+// @Override
+// public void widgetSelected(SelectionEvent e) {
+// doBrowseForFile();
+// }
+// });
+ addMessageAction = new AddMessagesAction(this);
+ deleteMessageAction = new DeleteMessagesAction(this);
+ deleteAllMessagesAction = new DeleteAllMessagesAction(this);
+
+ Label titleLabel = new Label(this, SWT.LEFT);
+ titleLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT));
+ titleLabel.setText("Selected Messages");
+ titleLabel.setBackground(getBackground());
+ viewer = new TableViewer(this, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL);
+ viewer.setContentProvider(new ArrayContentProvider());
+ viewer.setLabelProvider(new LabelProvider() {
+
+ @Override
+ public String getText(Object element) {
+ MessageLookupResult item = (MessageLookupResult) element;
+ return String.format("%s [%s]", item.getMessageName(), item.getMessageType());
+ }
+
+
+ });
+
+
+ ActionContributionItem addItem = new ActionContributionItem(addMessageAction);
+ addItem.fill(this);
+ Button addButton = (Button)addItem.getWidget();
+
+ ActionContributionItem delItem = new ActionContributionItem(deleteMessageAction);
+ delItem.fill(this);
+ Button delButton = (Button)delItem.getWidget();
+
+ ActionContributionItem delAllItem = new ActionContributionItem(deleteAllMessagesAction);
+ delAllItem.fill(this);
+ Button delAllButton = (Button)delAllItem.getWidget();
+
+
+// Label statusLabel = new Label(this, SWT.RIGHT);
+// statusLabel.setText("Status:");
+//
+// statusValueLabel = new Label(this, SWT.LEFT);
+// statusValueLabel.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT));
+
+// Widgets.attachToParent(outputFilePathTxt, SWT.TOP, 0, 5);
+// Widgets.attachToControl(label, outputFilePathTxt, SWT.TOP, SWT.CENTER, 0);
+// Widgets.attachToControl(browseBtn, outputFilePathTxt, SWT.TOP, SWT.CENTER, 0);
+//
+// Widgets.attachToParent(label, SWT.LEFT, 0, 0);
+// Widgets.attachToControl(outputFilePathTxt, label, SWT.LEFT, SWT.RIGHT, 5);
+// Widgets.attachToControl(outputFilePathTxt, browseBtn, SWT.RIGHT, SWT.LEFT, -5);
+
+// Widgets.attachToParent(browseBtn, SWT.RIGHT, 100, 0);
+//
+// Widgets.attachToControl(titleLabel, browseBtn, SWT.TOP, SWT.BOTTOM, 5);
+ Widgets.attachToParent(titleLabel, SWT.LEFT, 0, 0);
+ Widgets.attachToParent(titleLabel, SWT.RIGHT, 100, 0);
+
+ Widgets.attachToControl(viewer.getControl(), titleLabel, SWT.TOP, SWT.BOTTOM, 0);
+ Widgets.attachToParent(viewer.getControl(), SWT.LEFT, 0, 0, 400, 600);
+// final Object ld = viewer.getControl().getLayoutData();
+// final FormData fd = ld != null ? (FormData) ld : new FormData();
+// fd.bottom = new FormAttachment(100, 100, 0);
+
+ Widgets.attachToParent(viewer.getControl(), SWT.BOTTOM, 100, 0);
+
+ Widgets.attachToParent(addButton, SWT.RIGHT, 100, 0, 400, 600);
+ Widgets.attachToParent(delButton, SWT.RIGHT, 100, 0, 400, 600);
+ Widgets.attachToParent(delAllButton, SWT.RIGHT, 100, 0, 400, 600);
+
+ Widgets.attachToControl(viewer.getControl(), addButton, SWT.RIGHT, SWT.LEFT, 0);
+ Widgets.attachToControl(viewer.getControl(), delButton, SWT.RIGHT, SWT.LEFT, 0);
+ Widgets.attachToControl(viewer.getControl(), delAllButton, SWT.RIGHT, SWT.LEFT, 0);
+
+ Widgets.attachToControl(addButton, titleLabel, SWT.TOP, SWT.BOTTOM, 0);
+ Widgets.attachToControl(delButton, addButton, SWT.TOP, SWT.BOTTOM, 0);
+ Widgets.attachToControl(delAllButton, delButton, SWT.TOP, SWT.BOTTOM, 0);
+
+ hookContextMenu();
+ }
+
+ private void hookContextMenu() {
+ MenuManager menuMgr = new MenuManager("#PopupMenu");
+ menuMgr.setRemoveAllWhenShown(true);
+ menuMgr.addMenuListener(new IMenuListener() {
+ @Override
+ public void menuAboutToShow(IMenuManager manager) {
+ manager.add(addMessageAction);
+ manager.add(deleteMessageAction);
+ manager.add(deleteAllMessagesAction);
+ }
+ });
+ Menu menu = menuMgr.createContextMenu(this.getViewer().getControl());
+ this.getViewer().getControl().setMenu(menu);
+ }
+
+
+// private void doBrowseForFile() {
+// FileDialog dialog = new FileDialog(Display.getDefault().getActiveShell(), SWT.SAVE);
+// dialog.setFilterExtensions(new String[]{"*.bmr"});
+// dialog.setFilterIndex(0);
+// dialog.setOverwrite(false);
+// String path = dialog.open();
+// if (path != null) {
+// outputFilePathTxt.setText(path);
+// }
+// }
+
+ TableViewer getViewer() {
+ return viewer;
+ }
+
+ void addMessages(Collection<MessageLookupResult> messages) {
+ items.addAll(messages);
+ setInput();
+ }
+
+ void deleteAll() {
+ items.clear();
+ setInput();
+ }
+
+ void deleteSelection() {
+ items.removeAll(Arrays.asList(((IStructuredSelection)viewer.getSelection()).toArray()));
+ setInput();
+ }
+
+ private void setInput() {
+ viewer.setInput(items.toArray());
+ }
+
+// private static boolean isValidPath(String string) {
+// if (string == null || string.isEmpty()) {
+// return false;
+// }
+// File file = new File(string);
+// // check parent directory
+// File dir = file.getParentFile();
+// return dir != null && dir.isDirectory() && dir.exists();
+// }
+
+ public AddMessagesAction getAddMessageAction() {
+ return addMessageAction;
+ }
+
+ public DeleteMessagesAction getDeleteMessageAction() {
+ return deleteMessageAction;
+ }
+
+ public DeleteAllMessagesAction getDeleteAllMessagesAction() {
+ return deleteAllMessagesAction;
+ }
+
+ public HashSet<MessageLookupResult> getMessages() {
+ return items;
+ }
+
+ public void setMessages(HashSet<MessageLookupResult> messages) {
+ if(messages != null){
+ items.addAll(messages);
+ setInput();
+ }
+ }
+
+}