// ============================================================================
//
// 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.net.URL;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
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.Shell;
import com.amalto.workbench.i18n.Messages;
import com.amalto.workbench.models.TreeObject;
import com.amalto.workbench.utils.Util;
import com.amalto.workbench.webservices.TMDMService;
import com.amalto.workbench.webservices.WSDataClusterPK;
import com.amalto.workbench.webservices.WSDataModelPK;
import com.amalto.workbench.webservices.WSRegexDataClusterPKs;
import com.amalto.workbench.webservices.WSRegexDataModelPKs;
public class ProjectDecisionDialog extends Dialog {
protected Combo dataClustersCombo;
protected Combo dataModelsCombo;
protected Button overwriteButton;
private static Pattern dp = Pattern.compile("PROJECT\\s*\\((.*?),(.*?)[,(.*?)]?\\)\\s*", Pattern.DOTALL//$NON-NLS-1$
| Pattern.CASE_INSENSITIVE);
private TreeObject transformerObject = null;
private String decision = null;
private SelectionListener caller = null;
private String title = "";//$NON-NLS-1$
/**
* @param parentShell
*/
public ProjectDecisionDialog(TreeObject transformerObject, String decision, Shell parentShell, String title,
SelectionListener caller) {
super(parentShell);
this.transformerObject = transformerObject;
this.decision = decision;
this.caller = caller;
this.title = title;
}
@Override
protected Control createDialogArea(Composite parent) {
// Should not really be here but well,....
parent.getShell().setText(this.title);
Composite composite = (Composite) super.createDialogArea(parent);
GridLayout layout = (GridLayout) composite.getLayout();
layout.numColumns = 2;
// layout.verticalSpacing = 10;
try {
// process the decision
String dataClusterName = "";//$NON-NLS-1$
String dataModelName = "";//$NON-NLS-1$
boolean doOverwrite = true;
Matcher m = dp.matcher(decision);
if (m.matches()) {
dataClusterName = m.group(1);
dataModelName = m.group(2);
if (m.groupCount() >= 4) {
doOverwrite = (!"false".equals(m.group(3)));//$NON-NLS-1$
}
}
TMDMService port = Util.getMDMService(new URL(transformerObject.getEndpointAddress()),
transformerObject.getUsername(), transformerObject.getPassword());
// Grab the available Clusters
List<WSDataClusterPK> dcpks = port.getDataClusterPKs(new WSRegexDataClusterPKs(".*")).getWsDataClusterPKs();//$NON-NLS-1$
Label dataClustersLabel = new Label(composite, SWT.NULL);
dataClustersLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
dataClustersLabel.setText(Messages.ProjectDecisionDialog_DataContainers);
dataClustersCombo = new Combo(composite, SWT.DROP_DOWN);
dataClustersCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
int dataClusterSelect = -1;
if (dcpks != null) {
int i = 0;
for (WSDataClusterPK pk : dcpks) {
dataClustersCombo.add(pk.getPk());
if (pk.getPk().equals(dataClusterName)) {
dataClusterSelect = i;
}
i++;
}
}
dataClustersCombo.select(dataClusterSelect);
// Grab the available Models
List<WSDataModelPK> dmpks = port.getDataModelPKs(new WSRegexDataModelPKs(".*")).getWsDataModelPKs();//$NON-NLS-1$
Label dataModelsLabel = new Label(composite, SWT.NULL);
dataModelsLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
dataModelsLabel.setText(Messages.ProjectDecisionDialog_DataModels);
dataModelsCombo = new Combo(composite, SWT.DROP_DOWN);
dataModelsCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
int dataModelSelect = -1;
if (dmpks != null) {
int i = 0;
for (WSDataModelPK pk : dmpks) {
dataModelsCombo.add(pk.getPk());
if (pk.getPk().equals(dataModelName)) {
dataModelSelect = i;
}
i++;
}
}
dataModelsCombo.select(dataModelSelect);
// Overwrite
Label overwriteLabel = new Label(composite, SWT.NULL);
overwriteLabel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
overwriteLabel.setText(Messages.ProjectDecisionDialog_Overwrite);
overwriteButton = new Button(composite, SWT.CHECK);
overwriteButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
overwriteButton.setSelection(doOverwrite);
} catch (Exception e) {
if (!Util.handleConnectionException(this.getShell(), e, null)) {
MessageDialog.openError(ProjectDecisionDialog.this.getShell(), Messages.ProjectDecisionDialog_ErrorTitle,
Messages.bind(Messages.ProjectDecisionDialog_ErrorMsg, e.getMessage()));
}
}
return composite;
}
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
getButton(IDialogConstants.OK_ID).addSelectionListener(this.caller);
getButton(IDialogConstants.CANCEL_ID).addSelectionListener(this.caller);
}
@Override
protected void okPressed() {
setReturnCode(OK);
getButton(IDialogConstants.OK_ID).setData("dialog", ProjectDecisionDialog.this);//$NON-NLS-1$
// no close let Action Handler handle it
}
@Override
protected void cancelPressed() {
setReturnCode(CANCEL);
getButton(IDialogConstants.CANCEL_ID).setData("dialog", ProjectDecisionDialog.this);//$NON-NLS-1$
// no close let Action Handler handle it
}
/**************************************************************************************************
* Public getters read by caller
***************************************************************************************************/
public String getDataClusterName() {
if (dataClustersCombo.getSelectionIndex() == -1) {
return null;
}
return dataClustersCombo.getItem(dataClustersCombo.getSelectionIndex());
}
public String getDataModelName() {
if (dataModelsCombo.getSelectionIndex() == -1) {
return null;
}
return dataModelsCombo.getItem(dataModelsCombo.getSelectionIndex());
}
public boolean doOverwrite() {
return overwriteButton.getSelection();
}
public String getDecision() {
return "PROJECT(" + getDataClusterName() + "," + getDataModelName() + "," + (doOverwrite() ? "true" : "false") + ")";//$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$//$NON-NLS-5$//$NON-NLS-6$
}
}