/**
* This file Copyright (c) 2005-2008 Aptana, Inc. This program is
* dual-licensed under both the Aptana Public License and the GNU General
* Public license. You may elect to use one or the other of these licenses.
*
* This program is distributed in the hope that it will be useful, but
* AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
* NONINFRINGEMENT. Redistribution, except as permitted by whichever of
* the GPL or APL you select, is prohibited.
*
* 1. For the GPL license (GPL), you can redistribute and/or modify this
* program under the terms of the GNU General Public License,
* Version 3, as published by the Free Software Foundation. You should
* have received a copy of the GNU General Public License, Version 3 along
* with this program; if not, write to the Free Software Foundation, Inc., 51
* Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Aptana provides a special exception to allow redistribution of this file
* with certain other free and open source software ("FOSS") code and certain additional terms
* pursuant to Section 7 of the GPL. You may view the exception and these
* terms on the web at http://www.aptana.com/legal/gpl/.
*
* 2. For the Aptana Public License (APL), this program and the
* accompanying materials are made available under the terms of the APL
* v1.0 which accompanies this distribution, and is available at
* http://www.aptana.com/legal/apl/.
*
* You may view the GPL, Aptana's exception and additional terms, and the
* APL in the file titled license.html at the root of the corresponding
* plugin containing this source file.
*
* Any modifications to this file must keep this entire header intact.
*/
package com.aptana.radrails.cloud.internal;
import java.text.MessageFormat;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Image;
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.Label;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import com.aptana.ide.core.ui.CoreUIUtils;
import com.aptana.ide.server.cloud.syncing.ICloudDeployer.Endpoint;
import com.aptana.radrails.cloud.Activator;
import com.aptana.radrails.cloud.deploy.Messages;
/**
* Simple dialog to confirm Rails deployment. (Originally derived from Winston's WarUploadDialog for Java on the Cloud).
*
* @author Winston Prakash
* @author cwilliams
* @version 1.0
*/
public class EndpointDialog extends TitleAreaDialog
{
private static final String LARGE_IMAGE = "icons/deploy_large.gif"; //$NON-NLS-1$
private Endpoint target;
private Combo combo;
private Image image;
private Text comment;
private String commentStr;
public EndpointDialog(final Shell parentShell, Endpoint target)
{
super(parentShell);
this.target = target;
}
/**
* Create contents of the dialog
*
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent)
{
Composite area = (Composite) super.createDialogArea(parent);
setMessage(Messages.EndpointDialog_MSG_Verify_and_select_target);
Composite container = new Composite(area, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
container.setLayout(layout);
container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createDeployOptionSection(container);
createCommentSection(container);
if (target == Endpoint.PUBLIC)
{
combo.setText(Messages.EndpointDialog_LBL_Public_endpoint);
}
else if (target == Endpoint.STAGING)
{
combo.setText(Messages.EndpointDialog_LBL_Staging_endpoint);
}
setTitle(Messages.EndpointDialog_TTL_Header);
ImageDescriptor iconDesc = Activator.imageDescriptorFromPlugin(Activator.PLUGIN_ID, LARGE_IMAGE);
image = iconDesc.createImage();
setTitleImage(image);
return area;
}
private void createDeployOptionSection(Composite container)
{
Composite deployComp = new Composite(container, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
layout.marginLeft = -5;
deployComp.setLayout(layout);
Label deployTo = new Label(deployComp, SWT.NULL);
deployTo.setText(Messages.EndpointDialog_LBL_Deploy_to);
combo = new Combo(deployComp, SWT.DROP_DOWN | SWT.READ_ONLY);
combo.add(Messages.EndpointDialog_LBL_Public_endpoint);
combo.add(Messages.EndpointDialog_LBL_Staging_endpoint);
combo.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
String selection = combo.getItem(combo.getSelectionIndex());
if (selection.equals(Messages.EndpointDialog_LBL_Public_endpoint))
target = Endpoint.PUBLIC;
else
target = Endpoint.STAGING;
setTitle(MessageFormat.format(Messages.EndpointDialog_TTL_Header, selection));
}
});
GridData deployLayoutData = new GridData();
deployLayoutData.horizontalSpan = 2;
deployComp.setLayoutData(deployLayoutData);
}
private Composite createCommentSection(Composite parent)
{
Composite commentArea = new Composite(parent, SWT.NONE);
commentArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
GridLayout layout = new GridLayout(2, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
commentArea.setLayout(layout);
Label commentLabel = new Label(commentArea, SWT.BEGINNING);
commentLabel.setText(Messages.EndpointDialog_MSG_Enter_deploy_comment);
GridData commentLabelGridData = new GridData(SWT.BEGINNING, SWT.CENTER, false, false);
commentLabel.setLayoutData(commentLabelGridData);
Link helpLink = new Link(commentArea, SWT.END);
helpLink.setText(Messages.EndpointDialog_MSG_Help_link);
GridData helpLinkGridData = new GridData(SWT.END, SWT.CENTER, true, false);
helpLink.setLayoutData(helpLinkGridData);
helpLink.addSelectionListener(new SelectionAdapter()
{
@Override
public void widgetSelected(SelectionEvent e)
{
CoreUIUtils
.openBrowserURL("http://www.aptana.com/docs/index.php/My_Cloud_-_Team#What_is_the_Cloud_Team_Comment_feature.3F"); //$NON-NLS-1$
}
});
comment = new Text(commentArea, SWT.MULTI | SWT.BORDER);
GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
gridData.horizontalSpan = 2;
gridData.heightHint = 50;
comment.setLayoutData(gridData);
comment.setEnabled(true);
comment.setText(""); //$NON-NLS-1$
comment.selectAll();
comment.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
commentStr = comment.getText();
}
});
return commentArea;
}
@Override
public boolean close()
{
if (image != null)
image.dispose();
return super.close();
}
/**
* Create contents of the button bar
*
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent)
{
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
getButton(IDialogConstants.OK_ID).setText(Messages.EndpointDialog_LBL_Deploy_button);
createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
}
@Override
protected void configureShell(Shell newShell)
{
super.configureShell(newShell);
newShell.setText(Messages.EndpointDialog_TTL);
}
/**
* Return the initial size of the dialog
*/
@Override
protected Point getInitialSize()
{
return new Point(500, 350);
}
public Endpoint getEndpoint()
{
return target;
}
public String getComment()
{
return commentStr;
}
}