// ============================================================================
//
// Copyright (C) 2006-2016 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 com.amalto.workbench.dialogs;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.FormToolkit;
import com.amalto.workbench.editors.TransformerMainPage;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.models.Line;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.utils.EContentType;
import com.amalto.workbench.utils.EInputTemplate;
import com.amalto.workbench.webservices.WSTransformerProcessStep;
import com.amalto.workbench.webservices.WSTransformerV2;
import com.amalto.workbench.webservices.WSTransformerVariablesMapping;
import com.amalto.workbench.widgets.ComplexTableViewer;
import com.amalto.workbench.widgets.ComplexTableViewerColumn;
import com.amalto.workbench.widgets.ComplexTableViewerR;
public class SetupTransformerInputVariablesDialog extends Dialog {
WSTransformerV2 transformer;
FormToolkit toolkit;
TreeObject object;
private ComplexTableViewer objectViewer;
TransformerMainPage page;
public SetupTransformerInputVariablesDialog(Shell parentShell, FormToolkit toolkit, TreeObject obj, TransformerMainPage page) {
super(parentShell);
this.toolkit = toolkit;
object = obj;
this.page = page;
transformer = (WSTransformerV2) obj.getWsObject();
}
@Override
protected Control createDialogArea(Composite parent) {
Group comp = new Group(parent, SWT.NONE);
comp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
((GridLayout) parent.getLayout()).marginTop = 5;
((GridLayout) parent.getLayout()).marginLeft = 5;
((GridLayout) parent.getLayout()).marginRight = 5;
((GridLayout) parent.getLayout()).marginBottom = 5;
parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
comp.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
comp.setLayout(new GridLayout(1, false));
comp.setText(Messages.bind(Messages.SetupTransformerInputVariablesDialog_CompText, transformer.getName()));
// Get the input variable names
Set<String> inputVariables = new HashSet<String>();
for (WSTransformerProcessStep step : transformer.getProcessSteps()) {
for (WSTransformerVariablesMapping mapping : step.getInputMappings()) {
inputVariables.add(mapping.getPipelineVariable() == null ? TransformerMainPage.DEFAULT_VAR : mapping
.getPipelineVariable());
}
}
ComplexTableViewerColumn[] columns = new ComplexTableViewerColumn[] {
new ComplexTableViewerColumn(Messages.SetupTransformerInputVariablesDialog_InputVariables, // name
true, // is Nillable ?
"_DEFAULT_", // Nill value//$NON-NLS-1$
"_DEFAULT_", // Nill display//$NON-NLS-1$
"", // Default Value//$NON-NLS-1$
ComplexTableViewerColumn.COMBO_STYLE, // is Combo ?
inputVariables.toArray(new String[inputVariables.size()]), // Combo Values
0 // Text Lines
), new ComplexTableViewerColumn(Messages.SetupTransformerInputVariablesDialog_ContentType, // name
false, // is Nillable ?
"", // Nill value//$NON-NLS-1$
"", // Nill display//$NON-NLS-1$
"text/xml", // Default Value//$NON-NLS-1$
ComplexTableViewerColumn.COMBO_STYLE, // is Combo ?
EContentType.allTypes().toArray(new String[EContentType.allTypes().size()]), // Combo Values
0 // Text Lines
), new ComplexTableViewerColumn(Messages.SetupTransformerInputVariablesDialog_Value, // name
true, // is Nillable ?
"", // Nill value//$NON-NLS-1$
"", // Nill display//$NON-NLS-1$
"", // Default Value//$NON-NLS-1$
ComplexTableViewerColumn.TEXT_STYLE, // is Combo ?
null, // Combo Values
10 // Text Lines
) };
objectViewer = new ComplexTableViewerR(Arrays.asList(columns), toolkit, comp, page.getSite());
objectViewer.create();
Table table = objectViewer.getViewer().getTable();
table.getColumns()[2].setWidth(500);
// GridData gd=(GridData)objectViewer.getTxtLists().get(0).getLayoutData();
// gd.minimumHeight=200;
// gd.minimumWidth=300;
table.setHeaderVisible(true);
table.setLinesVisible(true);
// ((GridData)table.getLayoutData()).minimumHeight = 100;
// ((GridData)table.getLayoutData()).minimumWidth = 600;
if (page.getCacheList() != null) {
objectViewer.getViewer().setInput(page.getCacheList());
} else {
List<Line> list = new ArrayList<Line>();
objectViewer.getViewer().setInput(list);
}
final CCombo combo = (CCombo) objectViewer.getColumns().get(1).getControl();
combo.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
if (combo.getText().equals(EInputTemplate.APPLICATION_ITEMPK.getName())) {
Text t = (Text) objectViewer.getColumns().get(2).getControl();
t.setText(EInputTemplate.APPLICATION_ITEMPK.getContent());
}
}
});
return comp;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
parent.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
}
private void processOk() {
// objectViewer.add();
java.util.List<Line> list = (java.util.List<Line>) objectViewer.getViewer().getInput();
if (list.size() == 0) {
return;
}
page.setCacheList(list);
page.execute();
}
@Override
protected void okPressed() {
setReturnCode(OK);
processOk();
super.okPressed();
}
@Override
protected void cancelPressed() {
setReturnCode(CANCEL);
super.cancelPressed();
}
}