/* * Copyright 2011-2012 Amazon Technologies, Inc. * * 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://aws.amazon.com/apache2.0 * * This file 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 com.amazonaws.eclipse.explorer.sqs; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Text; import com.amazonaws.eclipse.core.AwsToolkitCore; import com.amazonaws.eclipse.core.ui.IRefreshable; import com.amazonaws.services.sqs.AmazonSQS; import com.amazonaws.services.sqs.model.SendMessageRequest; public class AddMessageAction extends Action { private final AmazonSQS sqs; private final String queueUrl; private final IRefreshable refreshable; public AddMessageAction(AmazonSQS sqs, String queueUrl, IRefreshable refreshable) { this.sqs = sqs; this.queueUrl = queueUrl; this.refreshable = refreshable; this.setText("Send Message"); this.setToolTipText("Sends a new message to this queue"); this.setImageDescriptor(AwsToolkitCore.getDefault().getImageRegistry().getDescriptor(AwsToolkitCore.IMAGE_PUBLISH)); } @Override public void run() { AddMessageDialog addMessageDialog = new AddMessageDialog(); if (addMessageDialog.open() >= 0) { SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, addMessageDialog.getMessage()); if (addMessageDialog.getDelay() > -1) { sendMessageRequest.setDelaySeconds(addMessageDialog.getDelay()); } sqs.sendMessage(sendMessageRequest); if (refreshable != null) { refreshable.refreshData(); } } } private static class AddMessageDialog extends MessageDialog { private Text text; private String message; private int messageDelay = -1; private Spinner messageDelaySpinner; public AddMessageDialog() { super(Display.getDefault().getActiveShell(), "Send Message", AwsToolkitCore.getDefault().getImageRegistry().get(AwsToolkitCore.IMAGE_AWS_ICON), "Enter your message:", 0, new String[] { "OK" }, 0); } @Override protected Control createCustomArea(Composite parent) { GridLayout parentGridLayout = new GridLayout(); parentGridLayout.verticalSpacing = 1; parentGridLayout.marginHeight = 1; parent.setLayout(parentGridLayout); Composite composite = new Composite(parent, SWT.BORDER); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); gridData.heightHint = 100; gridData.widthHint = 400; composite.setLayoutData(gridData); composite.setLayout(new FillLayout()); text = new Text(composite, SWT.MULTI | SWT.BORDER); Composite composite2 = new Composite(parent, SWT.NONE); gridData = new GridData(SWT.FILL, SWT.FILL, true, true); gridData.widthHint = 400; composite2.setLayoutData(gridData); GridLayout gridLayout = new GridLayout(3, false); gridLayout.marginHeight = 1; gridLayout.marginWidth = 0; gridLayout.horizontalSpacing = 1; composite2.setLayout(gridLayout); final Button delayCheckButton = new Button(composite2, SWT.CHECK); delayCheckButton.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { if (delayCheckButton.getSelection()) { messageDelay = messageDelaySpinner.getSelection(); } else { messageDelay = -1; } } public void widgetDefaultSelected(SelectionEvent e) {} }); delayCheckButton.setSelection(false); new Label(composite2, SWT.NONE).setText("Message Delay (seconds):"); messageDelaySpinner = new Spinner(composite2, SWT.BORDER); messageDelaySpinner.setMinimum(0); messageDelaySpinner.setMaximum(50000); messageDelaySpinner.setIncrement(1); messageDelaySpinner.setSelection(0); messageDelaySpinner.setPageIncrement(60); messageDelaySpinner.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); messageDelaySpinner.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { delayCheckButton.setSelection(true); messageDelay = messageDelaySpinner.getSelection(); } }); messageDelaySpinner.addFocusListener(new FocusListener() { public void focusLost(FocusEvent e) {} public void focusGained(FocusEvent e) { delayCheckButton.setSelection(true); } }); return parent; } @Override public boolean close() { message = text.getText(); return super.close(); } public String getMessage() { return message; } public int getDelay() { return messageDelay; } } }