// ============================================================================
//
// Copyright (C) 2006-2012 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.repository.ui.wizards.exportjob.scriptsmanager.petals;
import java.util.Arrays;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.ComboBoxCellEditor;
import org.eclipse.jface.viewers.ICellModifier;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.talend.repository.i18n.Messages;
/**
* A dialog to define the way contexts will be exported in the WSDL.
*
* @author Vincent Zurczak - EBM WebSourcing
*/
public class ContextExportDialog extends TitleAreaDialog {
private static final String NAME_PROPERTY = Messages.getString("ContextExportDialog_Name"); //$NON-NLS-1$
private static final String XSD_TYPE_PROPERTY = Messages.getString("ContextExportDialog_XsdType"); //$NON-NLS-1$
private static final String EXPORT_MODE_PROPERTY = Messages.getString("ContextExportDialog_ExportMode"); //$NON-NLS-1$
private final List<ContextTypeDefinition> contexts;
/**
* Constructor.
*
* @param parentShell
*/
public ContextExportDialog(Shell parentShell, List<ContextTypeDefinition> contexts) {
super(parentShell);
this.contexts = contexts;
setShellStyle(SWT.PRIMARY_MODAL | SWT.TITLE | SWT.BORDER | SWT.RESIZE);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.TitleAreaDialog #createDialogArea(org.eclipse.swt.widgets.Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
getShell().setText(Messages.getString("ContextExportDialog_ContextsExport")); //$NON-NLS-1$
setTitle(Messages.getString("ContextExportDialog_ContextsExport")); //$NON-NLS-1$
setMessage(Messages.getString("ContextExportDialog_ContextsExportDesc")); //$NON-NLS-1$
Table table = new Table(composite, SWT.FULL_SELECTION | SWT.BORDER);
table.setLayoutData(new GridData(GridData.FILL_BOTH));
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout layout = new TableLayout();
layout.addColumnData(new ColumnWeightData(30, 75, true));
layout.addColumnData(new ColumnWeightData(25, 75, true));
layout.addColumnData(new ColumnWeightData(45, 75, true));
table.setLayout(layout);
TableColumn column = new TableColumn(table, SWT.LEFT);
column.setText(NAME_PROPERTY);
column = new TableColumn(table, SWT.LEFT);
column.setText(XSD_TYPE_PROPERTY);
column = new TableColumn(table, SWT.LEFT);
column.setText(EXPORT_MODE_PROPERTY);
final TableViewer viewer = new TableViewer(table);
viewer.setContentProvider(new ArrayContentProvider());
viewer.setLabelProvider(new ITableLabelProvider() {
public Image getColumnImage(Object element, int columnIndex) {
return null;
}
public String getColumnText(Object element, int columnIndex) {
String result = ""; //$NON-NLS-1$
ContextTypeDefinition def = (ContextTypeDefinition) element;
switch (columnIndex) {
case 0:
result = def.getDefinition().getName();
break;
case 1:
result = def.getDefinition().getType();
break;
case 2:
result = def.getExportType().toString();
break;
}
return result;
}
public void addListener(ILabelProviderListener listener) {
// nothing
}
public void dispose() {
// nothing
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
public void removeListener(ILabelProviderListener listener) {
// nothing
}
});
final String[] choices = new String[] { ContextExportType.NOT_EXPORTED.toString(),
ContextExportType.PARAMETER.toString(), ContextExportType.IN_ATTACHMENT.toString(),
ContextExportType.OUT_ATTACHMENT.toString(), ContextExportType.PARAMETER_AND_OUT_ATTACHMENT.toString() };
viewer.setCellModifier(new ICellModifier() {
public void modify(Object element, String property, Object value) {
TableItem tableItem = (TableItem) element;
ContextTypeDefinition data = (ContextTypeDefinition) tableItem.getData();
if (EXPORT_MODE_PROPERTY.equals(property)) {
Integer pos = (Integer) value;
data.setExportType(ContextExportType.resolve(choices[pos]));
viewer.refresh(data);
validate();
}
}
public Object getValue(Object element, String property) {
Object value = null;
ContextTypeDefinition def = (ContextTypeDefinition) element;
if (NAME_PROPERTY.equals(property))
value = def.getDefinition().getName();
else if (XSD_TYPE_PROPERTY.equals(property))
value = def.getDefinition().getType();
else {
int pos = Arrays.asList(choices).indexOf(def.getExportType().toString());
value = Integer.valueOf(pos);
}
return value;
}
public boolean canModify(Object element, String property) {
return EXPORT_MODE_PROPERTY.equals(property);
}
});
viewer.setCellEditors(new CellEditor[] { new TextCellEditor(table), new TextCellEditor(table),
new ComboBoxCellEditor(table, choices, SWT.READ_ONLY) });
viewer.setColumnProperties(new String[] { NAME_PROPERTY, XSD_TYPE_PROPERTY, EXPORT_MODE_PROPERTY });
viewer.setInput(this.contexts);
return composite;
}
/**
* @return the contexts
*/
public List<ContextTypeDefinition> getContexts() {
return this.contexts;
}
/**
* Validates the user choices.
*/
private void validate() {
// Error message to show
for (ContextTypeDefinition def : this.contexts) {
if (!def.attachmentSupported) {
if (def.exportType != ContextExportType.NOT_EXPORTED && def.exportType != ContextExportType.PARAMETER)
updateStatus(def.definition.getName() + Messages.getString("ContextExportDialog_AttachmentsNotSupported")); //$NON-NLS-1$
else
updateStatus(null);
}
}
}
/**
* Updates the error message and enables or disables the OK button.
*
* @param msg the error message
*/
private void updateStatus(String msg) {
setErrorMessage(msg);
if (getButton(IDialogConstants.OK_ID) != null)
getButton(IDialogConstants.OK_ID).setEnabled(msg == null);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.Dialog #createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true);
validate();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.TitleAreaDialog#getInitialSize()
*/
@Override
protected Point getInitialSize() {
return new Point(440, 260);
}
}