/*******************************************************************************
* Copyright 2017 Capital One Services, LLC and Bitwise, 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://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License 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 hydrograph.ui.propertywindow.widgets.customwidgets.lookupproperty;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.ICellEditorValidator;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.graphics.Color;
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.layout.RowData;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableItem;
import hydrograph.ui.common.util.Constants;
import hydrograph.ui.common.util.CustomColorRegistry;
import hydrograph.ui.common.util.ImagePathConstant;
import hydrograph.ui.common.util.OSValidator;
import hydrograph.ui.common.util.ParameterUtil;
import hydrograph.ui.datastructure.property.FilterProperties;
import hydrograph.ui.datastructure.property.LookupMapProperty;
import hydrograph.ui.datastructure.property.LookupMappingGrid;
import hydrograph.ui.propertywindow.messages.Messages;
import hydrograph.ui.propertywindow.propertydialog.PropertyDialogButtonBar;
import hydrograph.ui.propertywindow.widgets.customwidgets.joinlookupproperty.JoinContentProvider;
import hydrograph.ui.propertywindow.widgets.customwidgets.joinlookupproperty.LookupCellModifier;
import hydrograph.ui.propertywindow.widgets.customwidgets.joinlookupproperty.LookupLabelProvider;
import hydrograph.ui.propertywindow.widgets.filterproperty.ELTCellModifier;
import hydrograph.ui.propertywindow.widgets.filterproperty.ELTFilterContentProvider;
import hydrograph.ui.propertywindow.widgets.filterproperty.ELTFilterLabelProvider;
import hydrograph.ui.propertywindow.widgets.gridwidgets.basic.ELTSWTWidgets;
public class ELTLookupMapWizard extends Dialog {
private Label propertyError;
private TableViewer outputTableViewer;
private Button okButton;
private TableViewer viewer1 = null;
private TableViewer viewer2 = null;
private TableViewer[] inputTableViewer = new TableViewer[2];
public static String PROPERTY_NAME = "Source Field";
public static String PROPERTY_VALUE = "Output Field";
public static final String OPERATIONAL_INPUT_FIELD = "Field Name";
private String[] INPUT_COLUMN_NAME = { OPERATIONAL_INPUT_FIELD };
private String[] COLUMN_NAME = { PROPERTY_NAME, PROPERTY_VALUE };
private List<LookupMapProperty> joinOutputList;
private List<FilterProperties> joinInputList1;
private List<FilterProperties> joinInputList2;
private List<List<FilterProperties>> joinInputList = new ArrayList<>();
private ELTSWTWidgets eltswtWidgets = new ELTSWTWidgets();
private LookupMappingGrid lookupPropertyGrid;
private static final String INFORMATION = "Information";
private TableItem[] previousItems;
private TableItem[] currentItems;
private PropertyDialogButtonBar propertyDialogButtonBar;
private List<String> sourceFieldList=new ArrayList<>();
private HashMap<String, List<String>> inputFieldMap=new HashMap<String, List<String>>();
private Label deleteButton;
private Label upButton;
private Label downButton;
/**
* Create the dialog.
*
* @param parentShell
* @param propertyDialogButtonBar
*/
public ELTLookupMapWizard(Shell parentShell,
LookupMappingGrid lookupPropertyGrid, PropertyDialogButtonBar propertyDialogButtonBar) {
super(parentShell);
setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.WRAP | SWT.APPLICATION_MODAL);
this.lookupPropertyGrid = lookupPropertyGrid;
this.propertyDialogButtonBar=propertyDialogButtonBar;
}
/**
* Create contents of the dialog.
*
* @param parent
*/
@Override
protected Control createDialogArea(Composite parent) {
final Composite container = (Composite) super.createDialogArea(parent);
container.getShell().setText("Lookup Mapping");
container.setLayout(new GridLayout(4, false));
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
new Label(container, SWT.NONE);
Composite composite = new Composite(container, SWT.None);
GridData gd_composite = new GridData(SWT.LEFT, SWT.CENTER, false,
false, 1, 1);
gd_composite.heightHint = 574;
gd_composite.widthHint = 257;
composite.setLayoutData(gd_composite);
if (lookupPropertyGrid != null) {
if (lookupPropertyGrid.getLookupInputProperties() != null
&& !lookupPropertyGrid.getLookupInputProperties().isEmpty()) {
joinInputList1 = lookupPropertyGrid.getLookupInputProperties()
.get(0);
joinInputList2 = lookupPropertyGrid.getLookupInputProperties()
.get(1);
} else {
joinInputList1 = new ArrayList<>();
joinInputList2 = new ArrayList<>();
}
viewer1 = createComposite(composite, 10, joinInputList1, 0);
viewer2 = createComposite(composite, 290, joinInputList2, 1);
if (lookupPropertyGrid.getLookupMapProperties() != null
&& !lookupPropertyGrid.getLookupMapProperties().isEmpty()) {
joinOutputList = lookupPropertyGrid.getLookupMapProperties();
} else {
joinOutputList = new ArrayList<>();
}
}
if (joinInputList != null) {
joinInputList.add(joinInputList1);
joinInputList.add(joinInputList2);
}
Composite composite_1 = new Composite(container, SWT.None);
GridData gd_composite_1 = new GridData(SWT.LEFT, SWT.CENTER, false,
false, 1, 1);
gd_composite_1.heightHint = 600;
gd_composite_1.widthHint = 400;
composite_1.setLayoutData(gd_composite_1);
labelWidget(composite_1, SWT.None, new int[] { 0, 6, 100, 18 },
"Output Mapping");
outputTableViewer = eltswtWidgets.createTableViewer(composite_1,
COLUMN_NAME, new int[] { 0, 30, 398, 538 }, 196,
new JoinContentProvider(), new LookupLabelProvider());
outputTableViewer.getTable().addMouseListener(new MouseAdapter() {
@Override
public void mouseDoubleClick(MouseEvent e) {
joinOutputProperty(outputTableViewer, null);
changeColorOfNonMappedFields();
if (joinOutputList.size() >= 1) {
deleteButton.setEnabled(true);
}
if (joinOutputList.size() >= 2) {
upButton.setEnabled(true);
downButton.setEnabled(true);
}
}
@Override
public void mouseDown(MouseEvent e) {
validateDuplicatesInOutputField();
getListOfNonMappedFields(inputFieldMap);
changeColorOfNonMappedFields();
}
});
eltswtWidgets.createTableColumns(outputTableViewer.getTable(),
COLUMN_NAME, 196);
CellEditor[] editors = eltswtWidgets.createCellEditorList(
outputTableViewer.getTable(), 2);
editors[0].setValidator(sourceEditorValidator(outputTableViewer,
Messages.EmptySourceFieldNotification, joinOutputList));
editors[1].setValidator(outputFieldEditorValidator(outputTableViewer,
Messages.EmptySourceFieldNotification, joinOutputList));
outputTableViewer.setColumnProperties(COLUMN_NAME);
outputTableViewer.setCellModifier(new LookupCellModifier(
outputTableViewer));
outputTableViewer.setCellEditors(editors);
outputTableViewer.setInput(joinOutputList);
outputTableViewer.getTable().addListener(SWT.Selection, new Listener() {
@Override
public void handleEvent(Event event) {
if (((TableItem) event.item) != null) {
if (StringUtils.isNotBlank(((TableItem) event.item)
.getText())) {
String[] data = (((TableItem) event.item).getText())
.split(Pattern.quote("."));
if (data != null && data.length == 2) {
FilterProperties filter = new FilterProperties();
filter.setPropertyname(data[1]);
if (joinInputList1.indexOf(filter) >= 0) {
inputTableViewer[0].getTable().setSelection(
joinInputList1.indexOf(filter));
} else if (joinInputList2.indexOf(filter) >= 0) {
inputTableViewer[1].getTable().setSelection(
joinInputList2.indexOf(filter));
}
}
}
}
}
});
TableViewerEditor.create(outputTableViewer,
new ColumnViewerEditorActivationStrategy(outputTableViewer),
ColumnViewerEditor.KEYBOARD_ACTIVATION
| ColumnViewerEditor.TABBING_HORIZONTAL
| ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
| ColumnViewerEditor.TABBING_VERTICAL);
propertyError = new Label(composite_1, SWT.None);
propertyError.setBounds(0, 572, 350, 25);
propertyError.setForeground(CustomColorRegistry.INSTANCE.getColorFromRegistry( 255, 0, 0));
propertyError.setVisible(false);
Composite composite_2 = new Composite(composite_1, SWT.None);
composite_2.setBounds(276, 4, 110, 24);
createLabel(composite_2);
new Label(container, SWT.NONE);
populateWidget();
dropData(outputTableViewer, joinOutputList, true);
populatePreviousItemsOfTable();
outputTableViewer.getTable().addMouseTrackListener(new MouseTrackListener() {
@Override
public void mouseHover(MouseEvent e) {
changeColorOfNonMappedFields();
}
@Override
public void mouseExit(MouseEvent e) {
changeColorOfNonMappedFields();
}
@Override
public void mouseEnter(MouseEvent e) {
changeColorOfNonMappedFields();
}
});
inputFieldMap = setMapOfInputFieldsPerPort();
sourceFieldList=getListOfNonMappedFields(inputFieldMap);
return container;
}
public void changeColorOfNonMappedFields() {
if (outputTableViewer.getTable().getItems() != null) {
TableItem[] items = outputTableViewer.getTable().getItems();
for (int i = 0; i < joinOutputList.size(); i++) {
for (String sourceField : sourceFieldList) {
if (joinOutputList.get(i).getSource_Field().equalsIgnoreCase(sourceField) &&
!ParameterUtil.isParameter(sourceField)) {
items[i].setForeground(0, CustomColorRegistry.INSTANCE.getColorFromRegistry( 255, 0, 0));
}
}
}
}
}
private List<String> getListOfNonMappedFields(HashMap<String, List<String>> inputFieldMap) {
Iterator iterator = inputFieldMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry portFieldPair = (Map.Entry)iterator.next();
for (LookupMapProperty lookupMapProperty : joinOutputList) {
String port = "";
if (lookupMapProperty.getSource_Field().length() >= 3) {
port = lookupMapProperty.getSource_Field().substring(0, 3);
}
String source_field = lookupMapProperty.getSource_Field().substring(lookupMapProperty.getSource_Field().lastIndexOf(".") + 1);
if (portFieldPair.getKey().equals(port)) {
List<String> value = (ArrayList<String>) portFieldPair.getValue();
if (!value.isEmpty() && !checkIfSourceFieldExists(value, source_field)) {
sourceFieldList.add(port + "." + source_field);
}
}
else {
sourceFieldList.add(source_field);
}
if (port.equalsIgnoreCase("")) {
sourceFieldList.add(source_field);
}
}
}
return sourceFieldList;
}
private boolean checkIfSourceFieldExists(List<String> list, String sourceField) {
for (String field : list) {
if (field.equalsIgnoreCase(sourceField)) {
return true;
}
}
return false;
}
private HashMap<String, List<String>> setMapOfInputFieldsPerPort() {
HashMap<String, List<String>> inputFieldMap = new HashMap<String, List<String>>();
int j = 0;
for (List<FilterProperties> inputFieldList : joinInputList) {
List<String> inputFieldListPerPort = new ArrayList<>();
for (FilterProperties inputField : inputFieldList) {
for (LookupMapProperty lookupMapProperty : joinOutputList) {
char charactor = ' ';
if (lookupMapProperty.getSource_Field().length() >= 3) {
charactor = lookupMapProperty.getSource_Field().charAt(2);
}
if (Character.toString(charactor).equalsIgnoreCase(Integer.toString(j))) {
if (!inputFieldListPerPort.contains(inputField.getPropertyname())) {
inputFieldListPerPort.add(inputField.getPropertyname());
}
}
}
}
inputFieldMap.put("in" + j, inputFieldListPerPort);
j++;
}
return inputFieldMap;
}
private void populatePreviousItemsOfTable() {
if (outputTableViewer.getTable().getItems() != null) {
previousItems = outputTableViewer.getTable().getItems();
}
}
private TableViewer createComposite(Composite parent, int y,
final List<FilterProperties> joinInputList,
final int tableViewerIndex) {
Composite comGrid = new Composite(parent, SWT.BORDER);
comGrid.setLayoutData(new RowData(267, 136));
comGrid.setLayout(new RowLayout(SWT.VERTICAL));
comGrid.setBounds(15, y, 233, 268);
labelWidget(comGrid, SWT.LEFT, new int[] { 0, 5, 90, 20 },
"Input Index : in" + tableViewerIndex);
inputTableViewer[tableViewerIndex] = eltswtWidgets.createTableViewer(
comGrid, INPUT_COLUMN_NAME, new int[] { 0, 30, 229, 232 }, 224,
new ELTFilterContentProvider(), new ELTFilterLabelProvider());
inputTableViewer[tableViewerIndex].getTable().addMouseTrackListener(new MouseTrackListener() {
@Override
public void mouseHover(MouseEvent e) {
changeColorOfNonMappedFields();
}
@Override
public void mouseExit(MouseEvent e) {
changeColorOfNonMappedFields();
}
@Override
public void mouseEnter(MouseEvent e) {
changeColorOfNonMappedFields();
}
});
eltswtWidgets.createTableColumns(
inputTableViewer[tableViewerIndex].getTable(),
INPUT_COLUMN_NAME, 224);
CellEditor[] editors = eltswtWidgets.createCellEditorList(
inputTableViewer[tableViewerIndex].getTable(), 1);
editors[0]
.setValidator(valueEditorValidation(joinInputList,
Messages.EMPTYFIELDMESSAGE,
inputTableViewer[tableViewerIndex]));
inputTableViewer[tableViewerIndex].setCellModifier(new ELTCellModifier(
inputTableViewer[tableViewerIndex]));
inputTableViewer[tableViewerIndex]
.setColumnProperties(INPUT_COLUMN_NAME);
inputTableViewer[tableViewerIndex].setCellEditors(editors);
inputTableViewer[tableViewerIndex].setInput(joinInputList);
eltswtWidgets
.applyDragFromTableViewer(
inputTableViewer[tableViewerIndex].getTable(),
tableViewerIndex);
return inputTableViewer[tableViewerIndex];
}
private void createLabel(Composite parent) {
Label addButton = eltswtWidgets.labelWidget(parent, SWT.CENTER | SWT.PUSH, new int[] { 0, 0, 25, 20 }, "", ImagePathConstant.ADD_BUTTON.getImageFromRegistry());
addButton.setToolTipText(Messages.ADD_SCHEMA_TOOLTIP);
addButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
joinOutputProperty(outputTableViewer, null);
if (joinOutputList.size() >= 1) {
deleteButton.setEnabled(true);
}
if (joinOutputList.size() >= 2) {
upButton.setEnabled(true);
downButton.setEnabled(true);
}
}
});
deleteButton = eltswtWidgets.labelWidget(parent, SWT.CENTER, new int[] { 25, 0, 25, 20 }, "", ImagePathConstant.DELETE_BUTTON.getImageFromRegistry());
deleteButton.setToolTipText(Messages.DELETE_SCHEMA_TOOLTIP);
deleteButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
int index = 0;
IStructuredSelection selection = (IStructuredSelection) outputTableViewer.getSelection();
for (Iterator<?> iterator = selection.iterator(); iterator.hasNext();) {
Object selectedObject = iterator.next();
index = joinOutputList.indexOf(selectedObject);
outputTableViewer.remove(selectedObject);
joinOutputList.remove(selectedObject);
}
outputTableViewer.refresh();
if (index != 0)
outputTableViewer.editElement(outputTableViewer.getElementAt(index - 1), 0);
if (joinOutputList.size() < 1) {
deleteButton.setEnabled(false);
}
if (joinOutputList.size() <= 1) {
upButton.setEnabled(false);
downButton.setEnabled(false);
}
}
});
upButton = eltswtWidgets.labelWidget(parent, SWT.CENTER, new int[] { 50, 0, 25, 20 }, "", ImagePathConstant.UP_ICON.getImageFromRegistry());
upButton.setToolTipText(Messages.MOVE_SCHEMA_UP_TOOLTIP);
upButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
int index2 = 0;
int index1 = outputTableViewer.getTable().getSelectionIndex();
if (index1 > 0) {
String text = outputTableViewer.getTable().getItem(index1).getText(0);
String text1 = outputTableViewer.getTable().getItem(index1).getText(1);
index2 = index1 - 1;
String data = outputTableViewer.getTable().getItem(index2).getText(0);
String data2 = outputTableViewer.getTable().getItem(index2).getText(1);
LookupMapProperty property = new LookupMapProperty();
property.setSource_Field(data);
property.setOutput_Field(data2);
joinOutputList.set(index1, property);
property = new LookupMapProperty();
property.setSource_Field(text);
property.setOutput_Field(text1);
joinOutputList.set(index2, property);
outputTableViewer.refresh();
outputTableViewer.getTable().setSelection(index1 - 1);
}
}
});
downButton = eltswtWidgets.labelWidget(parent, SWT.CENTER, new int[] { 74, 0, 25, 20 }, "", ImagePathConstant.DOWN_ICON.getImageFromRegistry());
downButton.setToolTipText(Messages.MOVE_SCHEMA_DOWN_TOOLTIP);
downButton.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
int index1 = outputTableViewer.getTable().getSelectionIndex();
int index2 = 0;
if (index1 < joinOutputList.size() - 1) {
String text = outputTableViewer.getTable().getItem(index1).getText(0);
String text1 = outputTableViewer.getTable().getItem(index1).getText(1);
index2 = index1 + 1;
String data = outputTableViewer.getTable().getItem(index2).getText(0);
String data1 = outputTableViewer.getTable().getItem(index2).getText(1);
LookupMapProperty p = new LookupMapProperty();
p.setSource_Field(data);
p.setOutput_Field(data1);
joinOutputList.set(index1, p);
p = new LookupMapProperty();
p.setSource_Field(text);
p.setOutput_Field(text1);
joinOutputList.set(index2, p);
outputTableViewer.refresh();
outputTableViewer.getTable().setSelection(index1 + 1);
}
}
});
}
/**
* Create contents of the button bar.
*
* @param parent
*/
@Override
protected void createButtonsForButtonBar(Composite parent) {
okButton = createButton(parent, IDialogConstants.OK_ID,
IDialogConstants.OK_LABEL, true);
createButton(parent, IDialogConstants.CANCEL_ID,
IDialogConstants.CANCEL_LABEL, false);
}
private boolean validation(String outputFieldValue, String sourceFieldValue) {
int propertycount = 0;
int propertyValuecount = 0;
for (LookupMapProperty join : joinOutputList) {
if (join.getSource_Field().trim().isEmpty()) {
outputTableViewer.getTable().setSelection(propertycount);
propertyError.setVisible(true);
propertyError.setText(Messages.EmptySourceFieldNotification);
okButton.setEnabled(false);
return false;
} else if (join.getOutput_Field().trim().isEmpty()) {
outputTableViewer.getTable().setSelection(propertyValuecount);
propertyError.setVisible(true);
propertyError.setText(Messages.EmptyOutputFieldNotification);
return false;
} else {
propertyError.setVisible(false);
okButton.setEnabled(true);
}
propertycount++;
propertyValuecount++;
}
for (LookupMapProperty join : joinOutputList) {
if (join.getSource_Field() != null && join.getSource_Field().equalsIgnoreCase(sourceFieldValue)) {
return false;
}
}
return true;
}
private boolean inputTabvalidation() {
int propertycount = 0;
for (FilterProperties join : joinInputList.get(0)) {
if (!join.getPropertyname().trim().isEmpty()) {
Matcher match = Pattern.compile(Constants.REGEX).matcher(
join.getPropertyname());
if (!match.matches()) {
outputTableViewer.getTable().setSelection(propertycount);
propertyError.setVisible(true);
propertyError
.setText(Messages.PROPERTY_NAME_ALLOWED_CHARACTERS);
okButton.setEnabled(false);
return false;
}
} else {
outputTableViewer.getTable().setSelection(propertycount);
propertyError.setVisible(true);
propertyError.setText(Messages.EmptySourceFieldNotification);
okButton.setEnabled(false);
return false;
}
propertycount++;
}
return true;
}
// Creates Value Validator for table's cells
private ICellEditorValidator valueEditorValidation(
final List<FilterProperties> joinInputList,
final String ErrorMessage, final TableViewer viewer) {
ICellEditorValidator propertyValidator = new ICellEditorValidator() {
@Override
public String isValid(Object value) {
String selectedField = viewer.getTable()
.getItem(viewer.getTable().getSelectionIndex())
.getText();
String valueToValidate = String.valueOf(value).trim();
Matcher match = Pattern.compile(Constants.REGEX).matcher(
valueToValidate);
if (valueToValidate.isEmpty()) {
propertyError.setText(ErrorMessage);
propertyError.setVisible(true);
return "ERROR"; //$NON-NLS-1$
} else if (!match.matches()) {
propertyError.setVisible(true);
propertyError
.setText(Messages.PROPERTY_NAME_ALLOWED_CHARACTERS);
okButton.setEnabled(false);
return "ERROR";
} else {
propertyError.setVisible(false);
okButton.setEnabled(true);
}
for (FilterProperties property : joinInputList) {
if (!selectedField.equalsIgnoreCase(valueToValidate)
&& property.getPropertyname().trim()
.equalsIgnoreCase(valueToValidate)) {
propertyError.setVisible(true);
propertyError
.setText(Messages.FieldNameAlreadyExists);
okButton.setEnabled(false);
return "ERROR";
} else {
propertyError.setVisible(false);
okButton.setEnabled(true);
}
}
validateDuplicatesInOutputField();
return null;
}
};
return propertyValidator;
}
public void populateWidget() {
if (lookupPropertyGrid != null) {
inputTableViewer[0].refresh();
inputTableViewer[1].refresh();
outputTableViewer.refresh();
}
if (joinOutputList.size() != 0) {
deleteButton.setEnabled(true);
}
else
{
deleteButton.setEnabled(false);
}
if (joinOutputList.size() >= 2) {
upButton.setEnabled(true);
downButton.setEnabled(true);
}
else
{
upButton.setEnabled(false);
downButton.setEnabled(false);
}
}
public void getLookupPropertyGrid() {
lookupPropertyGrid.setLookupInputProperties(joinInputList);
lookupPropertyGrid.setLookupMapProperties(joinOutputList);
}
@Override
protected void okPressed() {
if(OSValidator.isMac()){
List<TableViewer> tableViewers = new ArrayList<TableViewer>();
tableViewers.add(outputTableViewer);
tableViewers.addAll(java.util.Arrays.asList(inputTableViewer));
for(TableViewer views : tableViewers){
if(views !=null){
for(CellEditor cellEditor : views.getCellEditors()){
if(cellEditor !=null){
cellEditor.getControl().setEnabled(false); //Saves the existing value of CellEditor
cellEditor.getControl().setEnabled(true);
}
}
}
}
}
populateCurrentItemsOfTable();
if (previousItems.length == 0 && currentItems.length != 0) {
propertyDialogButtonBar.enableApplyButton(true);
} else if ((currentItems.length != 0 && previousItems.length != 0)) {
if (!Arrays.equals(currentItems, previousItems))
propertyDialogButtonBar.enableApplyButton(true);
}
getLookupPropertyGrid();
super.close();
}
private Boolean hasOutputMappingInTableChanged() {
boolean returnValue = false;
populateCurrentItemsOfTable();
if (currentItems.length == 0 && previousItems.length == 0) {
super.close();
} else {
if (!Arrays.equals(currentItems, previousItems)) {
int style = SWT.APPLICATION_MODAL | SWT.YES | SWT.NO | SWT.ICON_INFORMATION;
MessageBox messageBox = new MessageBox(new Shell(), style);
messageBox.setText(INFORMATION);
messageBox.setMessage(Messages.MessageBeforeClosingWindow);
if (messageBox.open() == SWT.YES) {
joinOutputList.clear();
LookupMapProperty[] lookupMapPropertyObjects = new LookupMapProperty[previousItems.length];
for (int i = 0; i < previousItems.length; i++) {
if(!previousItems[i].isDisposed())
{
lookupMapPropertyObjects[i] = (LookupMapProperty) previousItems[i].getData();
joinOutputList.add(lookupMapPropertyObjects[i]);
}
}
getLookupPropertyGrid();
returnValue = super.close();
}
} else {
returnValue = super.close();
}
}
return returnValue;
}
@Override
protected void cancelPressed() {
hasOutputMappingInTableChanged();
}
@Override
public boolean close() {
return hasOutputMappingInTableChanged();
}
private void populateCurrentItemsOfTable() {
if (outputTableViewer.getTable().getItems() != null) {
currentItems = outputTableViewer.getTable().getItems();
}
}
public Button buttonWidget(Composite parent, int style, int[] bounds,
String value, Image image) {
Button button = new Button(parent, style);
button.setBounds(bounds[0], bounds[1], bounds[2], bounds[3]);
button.setText(value);
button.setImage(image);
return button;
}
public Label labelWidget(Composite parent, int style, int[] bounds,
String value) {
Label label = new Label(parent, style);
label.setBounds(bounds[0], bounds[1], bounds[2], bounds[3]);
label.setText(value);
// label.setImage(image);
return label;
}
/**
* Return the initial size of the dialog.
*/
@Override
protected Point getInitialSize() {
return new Point(700, 719);
}
// Creates CellNAme Validator for table's cells
private ICellEditorValidator sourceEditorValidator(
final TableViewer viewer, final String errorMessage,
final List<LookupMapProperty> propertyList) {
ICellEditorValidator propertyValidator = new ICellEditorValidator() {
@Override
public String isValid(Object value) {
String currentSelectedFld = viewer.getTable()
.getItem(viewer.getTable().getSelectionIndex())
.getText();
String valueToValidate = String.valueOf(value).trim();
if (StringUtils.isEmpty(valueToValidate)) {
propertyError.setText(errorMessage);
propertyError.setVisible(true);
okButton.setEnabled(false);
return "ERROR";
} else {
okButton.setEnabled(true);
}
for (LookupMapProperty temp : propertyList) {
if (!currentSelectedFld.equalsIgnoreCase(valueToValidate)
&& temp.getSource_Field().equalsIgnoreCase(
valueToValidate)) {
propertyError
.setText(Messages.SourceFieldAlreadyExists);
propertyError.setVisible(true);
okButton.setEnabled(false);
return "ERROR";
} else {
propertyError.setVisible(false);
okButton.setEnabled(true);
validateDuplicatesInOutputField();
}
}
return null;
}
};
return propertyValidator;
}
// Creates CellValue Validator for table's cells
private ICellEditorValidator outputFieldEditorValidator(
final TableViewer viewer, final String errorMessage,
final List<LookupMapProperty> propertyList) {
ICellEditorValidator propertyValidator = new ICellEditorValidator() {
@Override
public String isValid(Object value) {
String currentSelectedFld = viewer.getTable()
.getItem(viewer.getTable().getSelectionIndex())
.getText(1);
String valueToValidate = String.valueOf(value).trim();
if (StringUtils.isEmpty(valueToValidate)) {
propertyError.setText(errorMessage);
propertyError.setVisible(true);
okButton.setEnabled(false);
return "ERROR";
} else {
okButton.setEnabled(true);
}
for (LookupMapProperty temp : propertyList) {
if (!currentSelectedFld.equalsIgnoreCase(valueToValidate)
&& temp.getOutput_Field().equalsIgnoreCase(
valueToValidate)) {
propertyError.setText(Messages.OutputFieldAlreadyExists);
propertyError.setVisible(true);
okButton.setEnabled(false);
validateDuplicatesInOutputField();
return "ERROR";
} else {
propertyError.setVisible(false);
okButton.setEnabled(true);
}
}
validateDuplicatesInOutputField();
return null;
}
};
validateDuplicatesInOutputField();
return propertyValidator;
}
private void joinOutputProperty(TableViewer viewer, String sourceFieldValue) {
String outputFieldValue = null;
if (sourceFieldValue == null) {
sourceFieldValue = "";
outputFieldValue = "";
} else {
outputFieldValue = sourceFieldValue.split("\\.")[1];
}
LookupMapProperty property = new LookupMapProperty();
if (joinOutputList.size() != 0) {
if (!validation(outputFieldValue, sourceFieldValue))
return;
property.setSource_Field(sourceFieldValue);
property.setOutput_Field(outputFieldValue);
joinOutputList.add(property);
viewer.refresh();
viewer.editElement(property,
0);
} else {
property.setSource_Field(sourceFieldValue);
property.setOutput_Field(outputFieldValue);
joinOutputList.add(property);
viewer.refresh();
viewer.editElement(property, 0);
}
}
private void validateDuplicatesInOutputField() {
boolean duplicateFound = false;
TableItem[] items = outputTableViewer.getTable().getItems();
LookupMapProperty[] objectsInGui = new LookupMapProperty[items.length];
for (int i = 0; i < items.length; i++) {
objectsInGui[i] = (LookupMapProperty) items[i].getData();
for (int j = i + 1; j < items.length; j++) {
if (((LookupMapProperty) items[i].getData()).getOutput_Field().equalsIgnoreCase(
((LookupMapProperty) items[j].getData()).getOutput_Field())) {
duplicateFound = true;
break;
}
}
if (duplicateFound)
break;
}
if (duplicateFound) {
okButton.setEnabled(false);
propertyError.setText(Messages.OutputFieldAlreadyExists);
propertyError.setVisible(true);
} else {
if (okButton != null && propertyError != null) {
okButton.setEnabled(true);
propertyError.setVisible(false);
}
}
}
public void dropData(final TableViewer tableViewer,
final List<LookupMapProperty> listOfFields,
final boolean isSingleColumn) {
Transfer[] types = new Transfer[] { TextTransfer.getInstance() };
int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK;
DropTarget target = new DropTarget(tableViewer.getTable(), operations);
target.setTransfer(types);
target.addDropListener(new DropTargetAdapter() {
public void dragOver(DropTargetEvent event) {
event.feedback = DND.FEEDBACK_EXPAND | DND.FEEDBACK_SCROLL;
}
public void drop(DropTargetEvent event) {
if (event.data == null) {
event.detail = DND.DROP_NONE;
return;
}
if (isSingleColumn) {
String[] dropData = ((String) event.data).split(Pattern.quote("#"));
for (String data : dropData) {
joinOutputProperty(tableViewer, data);
}
if (joinOutputList.size() >= 1) {
deleteButton.setEnabled(true);
}
if (joinOutputList.size() >= 2) {
upButton.setEnabled(true);
downButton.setEnabled(true);
}
validateDuplicatesInOutputField();
}
}
});
}
}