/******************************************************************************* * 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.dialogs.join; import java.util.ArrayList; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; 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.layout.TableColumnLayout; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ColumnViewerEditor; import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy; import org.eclipse.jface.viewers.ColumnViewerToolTipSupport; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.TableViewerEditor; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSource; import org.eclipse.swt.dnd.DragSourceAdapter; import org.eclipse.swt.dnd.DragSourceEvent; 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.ControlAdapter; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.MouseListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; 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.ExpandBar; import org.eclipse.swt.widgets.ExpandItem; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; 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 hydrograph.ui.common.util.Constants; import hydrograph.ui.common.util.CustomColorRegistry; import hydrograph.ui.common.util.ImagePathConstant; import hydrograph.ui.common.util.ParameterUtil; import hydrograph.ui.datastructure.property.FilterProperties; import hydrograph.ui.datastructure.property.GridRow; import hydrograph.ui.datastructure.property.JoinConfigProperty; import hydrograph.ui.datastructure.property.JoinMappingGrid; import hydrograph.ui.datastructure.property.LookupMapProperty; import hydrograph.ui.datastructure.property.Schema; import hydrograph.ui.graph.model.Component; import hydrograph.ui.propertywindow.messages.Messages; import hydrograph.ui.propertywindow.propertydialog.PropertyDialogButtonBar; import hydrograph.ui.propertywindow.widgets.dialogs.join.support.JoinMappingEditingSupport; import hydrograph.ui.propertywindow.widgets.dialogs.join.utils.JoinMapDialogConstants; import hydrograph.ui.propertywindow.widgets.utility.WidgetUtility; /** * * Join mapping dialog * * @author Bitwise * */ public class JoinMapDialog extends Dialog { private Component component; private JoinMappingGrid joinMappingGrid; private List<List<FilterProperties>> inputPorts; private PropertyDialogButtonBar propertyDialogButtonBar; private int inputPortValue; private TableViewer mappingTableViewer; private List<LookupMapProperty> mappingTableItemList; private Map<String, Button> radioButtonMap; private JoinMappingGrid oldJoinMappingGrid; private JoinMappingGrid newJoinMappingGrid; private List<String> allInputFields; private Button btnPull; private Button btnDown; private Button btnUp; private Button btnDelete; private Button btnAdd; private static final String PORT_ID_KEY = "PORT_ID"; private static final String NO_COPY="None"; private static final String INPUT_PORT_ID_PREFIX="in"; private static final String COPY_RADIO_BUTTON_TEXT_PREFIX="Copy of in"; private static final String EXPAND_ITEM_TEXT_PREFIX="Port in"; private static final String FIELD_TOOLTIP_MESSAGE_NO_SUCH_INPUT_FIELD="No such input field"; private static final String FIELD_TOOLTIP_MESSAGE_FIELD_CANT_BE_EMPTY="Field can not be empty"; private static final String FIELD_TOOLTIP_MESSAGE_DUPLICATE_FIELDS="Duplicate field"; private static final String MAPPING_TABLE_ITEM_DELIMILATOR="#"; private static final String PULL_TOOLTIP = "Pull schema"; private static final String INPUT_TABLE_COLUMN_TEXT="Input Fields"; private static final String DIALOG_TITLE="Join Mapping Dialog"; private boolean ctrlKeyPressed = false; private Table table; private JoinMappingEditingSupport outputEditingSupport; private JoinMappingEditingSupport inputEditingSupport; /** * Create the dialog. * * @param parentShell * @wbp.parser.constructor */@Deprecated public JoinMapDialog(Shell parentShell) { super(parentShell); setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.WRAP | SWT.APPLICATION_MODAL | SWT.RESIZE); } public JoinMapDialog(Shell parentShell, Component component, JoinMappingGrid joinPropertyGrid, PropertyDialogButtonBar propertyDialogButtonBar) { super(parentShell); setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.WRAP | SWT.APPLICATION_MODAL | SWT.RESIZE); this.joinMappingGrid = joinPropertyGrid; this.component=component; radioButtonMap = new LinkedHashMap<>(); inputPorts = new ArrayList<>(); this.propertyDialogButtonBar = propertyDialogButtonBar; allInputFields = new LinkedList<>(); } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); container.setLayout(new GridLayout(1, false)); container.getShell().setText(DIALOG_TITLE); SashForm composite = new SashForm(container, SWT.SMOOTH); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); createInputFieldExpandBarSection(composite); creatFieldMappingSection(composite); createCopyInputToOutputFieldSection(composite); composite.setWeights(new int[] {215, 559, 116}); populateJoinMapDialog(); return container; } private void createCopyInputToOutputFieldSection(Composite composite) { Composite composite_3 = new Composite(composite, SWT.NONE); GridLayout gl_composite_3 = new GridLayout(1, false); gl_composite_3.verticalSpacing = 0; gl_composite_3.marginWidth = 0; gl_composite_3.marginHeight = 0; gl_composite_3.horizontalSpacing = 0; composite_3.setLayout(gl_composite_3); GridData gd_composite_3 = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1); gd_composite_3.widthHint = 121; composite_3.setLayoutData(gd_composite_3); composite_3.setBounds(0, 0, 64, 64); Composite composite_8 = new Composite(composite_3, SWT.BORDER); GridLayout gl_composite_8 = new GridLayout(1, false); gl_composite_8.verticalSpacing = 0; gl_composite_8.marginWidth = 0; gl_composite_8.horizontalSpacing = 0; gl_composite_8.marginHeight = 0; composite_8.setLayout(gl_composite_8); composite_8.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); ScrolledComposite scrolledComposite_2 = new ScrolledComposite( composite_8, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); scrolledComposite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); scrolledComposite_2.setExpandHorizontal(true); scrolledComposite_2.setExpandVertical(true); scrolledComposite_2.setAlwaysShowScrollBars(false); attachMouseScrollButtonListener(scrolledComposite_2); Composite composite_12 = new Composite(scrolledComposite_2, SWT.NONE); composite_12.setLayout(new GridLayout(1, false)); Button btnRadioButton_None = new Button(composite_12, SWT.RADIO); btnRadioButton_None.setText(NO_COPY); btnRadioButton_None.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (!mappingTableViewer.getTable().isEnabled()) { joinMappingGrid.setButtonText(((Button) e.widget).getText()); joinMappingGrid.setIsSelected(false); mappingTableItemList.clear(); mappingTableViewer.refresh(); mappingTableViewer.getTable().setEnabled(true); btnAdd.setEnabled(true); btnPull.setEnabled(true); } } }); radioButtonMap.put(btnRadioButton_None.getText(), btnRadioButton_None); for (int i = 0; i < inputPortValue; i++) { Button btnRadioButton = new Button(composite_12, SWT.RADIO); btnRadioButton.setText(COPY_RADIO_BUTTON_TEXT_PREFIX + i); btnRadioButton.setData(PORT_ID_KEY, i); radioButtonMap.put(btnRadioButton.getText(), btnRadioButton); btnRadioButton.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { enableMappingTableButtonPanel(false); joinMappingGrid.setButtonText(((Button) e.widget).getText()); joinMappingGrid.setIsSelected(true); mappingTableViewer.getTable().setEnabled(false); List<FilterProperties> inputFieldList = inputPorts .get((int) ((Button) e.widget).getData(PORT_ID_KEY)); String inputPortID = INPUT_PORT_ID_PREFIX + ((Button) e.widget).getData(PORT_ID_KEY); if (inputFieldList != null) { copyFieldsWhenCopyOfIsSelected(inputFieldList, inputPortID); mappingTableViewer.refresh(); } } }); } scrolledComposite_2.setContent(composite_12); scrolledComposite_2.setMinSize(composite_12.computeSize(SWT.DEFAULT, SWT.DEFAULT)); } private void attachMouseScrollButtonListener(final ScrolledComposite scrolledComposite){ scrolledComposite.addListener(SWT.MouseWheel, new Listener() { @Override public void handleEvent(Event event) { int wheelCount = event.count; wheelCount = (int) Math.ceil(wheelCount / 3.0f); while (wheelCount < 0) { scrolledComposite.getVerticalBar().setIncrement(4); wheelCount++; } while (wheelCount > 0) { scrolledComposite.getVerticalBar().setIncrement(-4); wheelCount--; } } }); } private void copyFieldsWhenCopyOfIsSelected(List<FilterProperties> inputFieldList, String inputPortID) { mappingTableItemList.clear(); for (FilterProperties properties : inputFieldList) { LookupMapProperty property = new LookupMapProperty(); property.setSource_Field(inputPortID + "." + properties.getPropertyname()); property.setOutput_Field(properties.getPropertyname()); mappingTableItemList.add(property); } } private void creatFieldMappingSection(Composite composite) { Composite composite_2 = new Composite(composite, SWT.NONE); GridLayout gl_composite_2 = new GridLayout(1, false); gl_composite_2.verticalSpacing = 0; gl_composite_2.marginWidth = 0; gl_composite_2.marginHeight = 0; gl_composite_2.horizontalSpacing = 0; composite_2.setLayout(gl_composite_2); composite_2.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); composite_2.setBounds(0, 0, 64, 64); createButtonSectionInFieldMappingSection(composite_2); createMappingTableInFieldMappingSection(composite_2); } private void createMappingTableInFieldMappingSection(Composite composite_2) { Composite composite_5 = new Composite(composite_2, SWT.NONE); GridLayout gl_composite_5 = new GridLayout(1, false); gl_composite_5.verticalSpacing = 0; gl_composite_5.marginWidth = 0; gl_composite_5.marginHeight = 0; gl_composite_5.horizontalSpacing = 0; composite_5.setLayout(gl_composite_5); composite_5.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); ScrolledComposite scrolledComposite = new ScrolledComposite( composite_5, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); scrolledComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); scrolledComposite.setExpandHorizontal(true); scrolledComposite.setExpandVertical(true); Composite composite_6 = new Composite(scrolledComposite, SWT.NONE); GridLayout gl_composite_6 = new GridLayout(1, false); gl_composite_6.verticalSpacing = 0; gl_composite_6.marginWidth = 0; gl_composite_6.marginHeight = 0; gl_composite_6.horizontalSpacing = 0; composite_6.setLayout(gl_composite_6); table = createMappingTable(composite_6); attachShortcutListner(); addTabFunctionalityInMappingTable(); createInputFieldColumnInMappingTable(); createOutputFieldColumnInMappingTable(); setTableLayoutToMappingTable(table); mappingTableViewer.setInput(mappingTableItemList); attachDropFunctionalityToMappingTable(); scrolledComposite.setContent(composite_6); scrolledComposite.setMinSize(composite_6.computeSize(SWT.DEFAULT, SWT.DEFAULT)); } private void setTableLayoutToMappingTable(Table table) { TableColumnLayout layout = new TableColumnLayout(); mappingTableViewer.getControl().getParent().setLayout(layout); for (int columnIndex = 0, n = table.getColumnCount(); columnIndex < n; columnIndex++) { table.getColumn(columnIndex).pack(); } for (int i = 0; i < mappingTableViewer.getTable().getColumnCount(); i++) { layout.setColumnData(mappingTableViewer.getTable().getColumn(i), new ColumnWeightData(1)); } } private void addTabFunctionalityInMappingTable() { TableViewerEditor.create(mappingTableViewer, new ColumnViewerEditorActivationStrategy(mappingTableViewer), ColumnViewerEditor.KEYBOARD_ACTIVATION | ColumnViewerEditor.TABBING_HORIZONTAL | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_VERTICAL); } private Table createMappingTable(Composite composite_6) { mappingTableViewer = new TableViewer(composite_6, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI); Table table = mappingTableViewer.getTable(); table.setLinesVisible(true); table.setHeaderVisible(true); GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1); gd_table.widthHint = 374; table.setLayoutData(gd_table); mappingTableViewer.setContentProvider(new ArrayContentProvider()); ColumnViewerToolTipSupport.enableFor(mappingTableViewer); return table; } private void attachDropFunctionalityToMappingTable() { Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK; DropTarget target = new DropTarget(mappingTableViewer.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; } String[] dropData = ((String) event.data).split(Pattern .quote(MAPPING_TABLE_ITEM_DELIMILATOR)); List<String> tempOutputFieldList = getOutputFieldList(); if(getDuplicateDropAllowed()){ for (String data : dropData) { dropItem(data); } }else{ for (String data : dropData) { dropItem(data); //Currently, we allowed duplicate values /*if(!tempOutputFieldList.contains(StringUtils.lowerCase(data.split("\\.")[1]))){ } else{ WidgetUtility.errorMessage(Messages.MAPPING_WINDOW_DUPLICATE_FIELD); break; }*/ } } refreshButtonStatus(); } }); } private void dropItem(String data){ LookupMapProperty mappingTableItem = new LookupMapProperty(); mappingTableItem.setSource_Field(data); mappingTableItem.setOutput_Field(data.split("\\.")[1]); mappingTableItemList.add(mappingTableItem); mappingTableViewer.refresh(); } private List<String> getOutputFieldList(){ List<String> outputFieldList = new LinkedList<>(); for(LookupMapProperty lookupMapProperty : mappingTableItemList){ outputFieldList.add(StringUtils.lowerCase(lookupMapProperty.getOutput_Field())); } return outputFieldList; } private boolean getDuplicateDropAllowed(){ List<JoinConfigProperty> configObject = (List) component.getProperties().get("join_config"); if(configObject == null || configObject.size() == 0){ return false; } else{ for(int i = 0 ; i<configObject.size(); i++){ if(configObject.get(i).getRecordRequired() == 0){ return false; } } } return true; } private void createOutputFieldColumnInMappingTable() { TableViewerColumn tableViewerColumn_1 = new TableViewerColumn( mappingTableViewer, SWT.NONE); TableColumn tblclmnPropertyValue = tableViewerColumn_1.getColumn(); tblclmnPropertyValue.setWidth(148); tblclmnPropertyValue.setText(JoinMapDialogConstants.OUTPUT_FIELD); outputEditingSupport = new JoinMappingEditingSupport(mappingTableViewer, JoinMapDialogConstants.OUTPUT_FIELD); WidgetUtility.addVerifyListnerToOutputEditingSupport(outputEditingSupport); tableViewerColumn_1.setEditingSupport(outputEditingSupport); tableViewerColumn_1.setLabelProvider(new ColumnLabelProvider() { String tooltipText; @Override public Image getImage(Object element) { Image image = ImagePathConstant.DELETE_ICON.getImageFromRegistry(); LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if (StringUtils.isBlank(lookupMapProperty.getOutput_Field())) return image; else return super.getImage(element); } private List<String> getOutputFieldList(){ List<String> outputFieldList = new LinkedList<>(); for(LookupMapProperty lookupMapProperty : mappingTableItemList){ outputFieldList.add(lookupMapProperty.getOutput_Field()); } return outputFieldList; } @Override public String getToolTipText(Object element) { tooltipText = null; int occurrences = Collections.frequency(getOutputFieldList(), ((LookupMapProperty)element).getOutput_Field()); if (occurrences > 1) { tooltipText = FIELD_TOOLTIP_MESSAGE_DUPLICATE_FIELDS; } LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if (StringUtils.isBlank(lookupMapProperty.getSource_Field())) tooltipText = FIELD_TOOLTIP_MESSAGE_FIELD_CANT_BE_EMPTY; return tooltipText; } @Override public Color getForeground(Object element) { int occurrences = Collections.frequency(getOutputFieldList(), ((LookupMapProperty)element).getOutput_Field()); if (occurrences > 1) { return CustomColorRegistry.INSTANCE.getColorFromRegistry( 255, 0, 0); } else { return super.getForeground(element); } } @Override public Color getBackground(Object element) { LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if (StringUtils.isBlank(lookupMapProperty.getOutput_Field())) return CustomColorRegistry.INSTANCE.getColorFromRegistry( 0xFF, 0xDD, 0xDD); else return super.getBackground(element); } @Override public String getText(Object element) { LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if(ParameterUtil.isParameter(lookupMapProperty.getOutput_Field())) lookupMapProperty.setSource_Field(lookupMapProperty.getOutput_Field()); return lookupMapProperty.getOutput_Field(); } }); } private void createInputFieldColumnInMappingTable() { TableViewerColumn tableViewerColumn = new TableViewerColumn( mappingTableViewer, SWT.NONE); TableColumn tblclmnPropertyName = tableViewerColumn.getColumn(); tblclmnPropertyName.setWidth(169); tblclmnPropertyName.setText(JoinMapDialogConstants.INPUT_FIELD); inputEditingSupport = new JoinMappingEditingSupport(mappingTableViewer, JoinMapDialogConstants.INPUT_FIELD); tableViewerColumn.setEditingSupport(inputEditingSupport); tableViewerColumn.setLabelProvider(new ColumnLabelProvider() { String tooltipText; @Override public Image getImage(Object element) { Image image = ImagePathConstant.DELETE_ICON.getImageFromRegistry(); LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if (StringUtils.isBlank(lookupMapProperty.getSource_Field())) return image; else return super.getImage(element); } @Override public String getToolTipText(Object element) { tooltipText = null; LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if (!allInputFields.contains(lookupMapProperty .getSource_Field()) && !ParameterUtil.isParameter(lookupMapProperty.getSource_Field())) { tooltipText = FIELD_TOOLTIP_MESSAGE_NO_SUCH_INPUT_FIELD; } if (StringUtils.isBlank(lookupMapProperty.getSource_Field())) tooltipText = FIELD_TOOLTIP_MESSAGE_FIELD_CANT_BE_EMPTY; return tooltipText; } @Override public Color getForeground(Object element) { LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if (!allInputFields.contains(lookupMapProperty .getSource_Field()) && !ParameterUtil.isParameter(lookupMapProperty.getSource_Field())) { return CustomColorRegistry.INSTANCE.getColorFromRegistry( 255, 0, 0); } else { return super.getForeground(element); } } @Override public Color getBackground(Object element) { LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if (StringUtils.isBlank(lookupMapProperty.getSource_Field())) return CustomColorRegistry.INSTANCE.getColorFromRegistry( 0xFF, 0xDD, 0xDD); else return super.getBackground(element); } @Override public String getText(Object element) { LookupMapProperty lookupMapProperty = (LookupMapProperty) element; if(ParameterUtil.isParameter(lookupMapProperty.getSource_Field())) lookupMapProperty.setOutput_Field(lookupMapProperty.getSource_Field()); return lookupMapProperty.getSource_Field(); } }); } private void createButtonSectionInFieldMappingSection(Composite composite) { Composite composite_4 = new Composite(composite, SWT.NONE); composite_4.setLayout(new GridLayout(2, false)); GridData gd_composite_4 = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); gd_composite_4.heightHint = 40; composite_4.setLayoutData(gd_composite_4); Composite composite_10 = new Composite(composite_4, SWT.NONE); GridLayout gl_composite_10 = new GridLayout(1, false); gl_composite_10.verticalSpacing = 0; gl_composite_10.marginWidth = 0; gl_composite_10.marginHeight = 0; composite_10.setLayout(gl_composite_10); composite_10.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, true, 1, 1)); Label lblMappingView = new Label(composite_10, SWT.NONE); lblMappingView.setText("Output Mapping"); Composite composite_11 = new Composite(composite_4, SWT.NONE); GridLayout gl_composite_11 = new GridLayout(5, false); gl_composite_11.verticalSpacing = 0; gl_composite_11.marginWidth = 0; gl_composite_11.marginHeight = 0; composite_11.setLayout(gl_composite_11); composite_11.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true, 1, 1)); createPullButton(composite_11); createAddButton(composite_11); createDeleteButton(composite_11); createUpButton(composite_11); createDownButton(composite_11); } private void deleteRow(){ Table table = mappingTableViewer.getTable(); setValueForCellEditor(); int selectionIndex = table.getSelectionIndex(); int[] indexs = table.getSelectionIndices(); if (selectionIndex == -1) { WidgetUtility.errorMessage("Select Rows to delete"); } else { table.remove(indexs); int itemsRemoved=0; for (int index : indexs) { mappingTableItemList.remove(index-itemsRemoved); if(index-itemsRemoved-1 != -1){ table.setSelection(index-itemsRemoved-1); }else{ table.setSelection(0); } itemsRemoved++; } mappingTableViewer.refresh(); } refreshButtonStatus(); } private void addNewRow(){ setValueForCellEditor(); LookupMapProperty lookupMapProperty = new LookupMapProperty(); lookupMapProperty.setOutput_Field(""); lookupMapProperty.setSource_Field(""); if(!mappingTableItemList.contains(lookupMapProperty)){ mappingTableItemList.add(lookupMapProperty); mappingTableViewer.refresh(); mappingTableViewer.editElement(lookupMapProperty, 0); refreshButtonStatus(); } } private void moveRowUp(){ Table table = mappingTableViewer.getTable(); setValueForCellEditor(); int[] indexes = table.getSelectionIndices(); for (int index : indexes) { if (index > 0) { Collections.swap( (List<LookupMapProperty>) mappingTableItemList, index, index - 1); mappingTableViewer.refresh(); } } refreshButtonStatus(); } private void moveRowDown(){ Table table = mappingTableViewer.getTable(); setValueForCellEditor(); int[] indexes = table.getSelectionIndices(); for (int i = indexes.length - 1; i > -1; i--) { if (indexes[i] < mappingTableItemList.size() - 1) { Collections.swap( (List<LookupMapProperty>) mappingTableItemList, indexes[i], indexes[i] + 1); mappingTableViewer.refresh(); } } refreshButtonStatus(); } private void attachShortcutListner(){ Control currentControl= table; currentControl.addKeyListener(new KeyListener() { @Override public void keyReleased(KeyEvent event) { if(event.keyCode == SWT.CTRL || event.keyCode == SWT.COMMAND){ ctrlKeyPressed = false; } } @Override public void keyPressed(KeyEvent event) { if(event.keyCode == SWT.CTRL || event.keyCode == SWT.COMMAND){ ctrlKeyPressed = true; } if (ctrlKeyPressed && event.keyCode == Constants.KEY_D) { deleteRow(); } else if (ctrlKeyPressed && event.keyCode == Constants.KEY_N){ addNewRow(); } else if (ctrlKeyPressed && event.keyCode == SWT.ARROW_UP){ moveRowUp(); } else if (ctrlKeyPressed && event.keyCode == SWT.ARROW_DOWN){ moveRowDown(); } } }); } private void createPullButton(Composite composite_11) { btnPull = new Button(composite_11, SWT.NONE); btnPull.setImage(ImagePathConstant.PULL_BUTTON.getImageFromRegistry()); btnPull.setToolTipText(PULL_TOOLTIP); btnPull.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { List<LookupMapProperty> mappingTableItemListCopy=new LinkedList<>(); mappingTableItemListCopy.addAll(mappingTableItemList); mappingTableItemList.clear(); mappingTableViewer.refresh(); Schema schema = (Schema) component.getProperties().get(Constants.SCHEMA_PROPERTY_NAME); if(schema==null){ return; } List<String> schemaFieldList = getSchemaFieldList(schema); if(schemaFieldList.size() == 0){ return; } for(String fieldName:schemaFieldList){ LookupMapProperty row = getMappingTableItem(mappingTableItemListCopy,fieldName); if(row!=null){ mappingTableItemList.add(row); }else{ row=new LookupMapProperty(); row.setSource_Field(""); row.setOutput_Field(fieldName); mappingTableItemList.add(row); } } mappingTableViewer.refresh(); } private List<String> getSchemaFieldList(Schema schema) { List<String> schemaFieldList = new LinkedList<>(); for(GridRow gridRow: schema.getGridRow()){ schemaFieldList.add(gridRow.getFieldName()); } return schemaFieldList; } }); } private LookupMapProperty getMappingTableItem(List<LookupMapProperty> mappingTableItemListClone, String fieldName) { for(LookupMapProperty row:mappingTableItemListClone){ if(StringUtils.equals(fieldName, row.getOutput_Field())){ return row; } } return null; } private void createDownButton(Composite composite_11) { btnDown = new Button(composite_11, SWT.NONE); btnDown.setToolTipText(Messages.MOVE_DOWN_KEY_SHORTCUT_TOOLTIP); btnDown.setImage(ImagePathConstant.MOVEDOWN_BUTTON.getImageFromRegistry()); btnDown.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveRowDown(); } }); } private void createUpButton(Composite composite_11) { btnUp = new Button(composite_11, SWT.NONE); btnUp.setToolTipText(Messages.MOVE_UP_KEY_SHORTCUT_TOOLTIP); btnUp.setImage(ImagePathConstant.MOVEUP_BUTTON.getImageFromRegistry()); btnUp.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveRowUp(); } }); } private void createDeleteButton(Composite composite_11) { btnDelete = new Button(composite_11, SWT.NONE); btnDelete.setToolTipText(Messages.DELETE_KEY_SHORTCUT_TOOLTIP); btnDelete.setImage(ImagePathConstant.DELETE_BUTTON.getImageFromRegistry()); btnDelete.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { deleteRow(); } }); } private void createAddButton(Composite composite_11) { btnAdd = new Button(composite_11, SWT.NONE); btnAdd.setToolTipText(Messages.ADD_KEY_SHORTCUT_TOOLTIP); btnAdd.setImage(ImagePathConstant.ADD_BUTTON.getImageFromRegistry()); btnAdd.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { addNewRow(); } }); } private void createInputFieldExpandBarSection(Composite composite) { Composite composite_1 = new Composite(composite, SWT.NONE); GridLayout gl_composite_1 = new GridLayout(1, false); gl_composite_1.horizontalSpacing = 0; gl_composite_1.verticalSpacing = 0; gl_composite_1.marginWidth = 0; gl_composite_1.marginHeight = 0; composite_1.setLayout(gl_composite_1); GridData gd_composite_1 = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1); gd_composite_1.widthHint = 276; composite_1.setLayoutData(gd_composite_1); composite_1.setBounds(0, 0, 64, 64); final ScrolledComposite scrolledComposite_1 = new ScrolledComposite( composite_1, SWT.BORDER | SWT.V_SCROLL ); scrolledComposite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); scrolledComposite_1.setExpandHorizontal(true); scrolledComposite_1.setExpandVertical(true); Composite composite_7 = new Composite(scrolledComposite_1, SWT.NONE); composite_7.setLayout(new GridLayout(1, false)); final ExpandBar expandBar = new ExpandBar(composite_7, SWT.H_SCROLL); expandBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); expandBar.setBackground(CustomColorRegistry.INSTANCE.getColorFromRegistry( 240, 240, 240)); populateInputFieldExpandBarSection(expandBar); expandBar.getItem(0).setExpanded(true); scrolledComposite_1.setContent(composite_7); scrolledComposite_1.setMinSize(composite_7.computeSize(SWT.DEFAULT, SWT.DEFAULT)); composite_7.addControlListener(new ControlAdapter() { @Override public void controlResized(ControlEvent e) { for(ExpandItem expandItem:expandBar.getItems()){ ((TableColumn)expandItem.getData("TableColumn")).setWidth(scrolledComposite_1.getSize().x); } } }); } private void populateInputFieldExpandBarSection(ExpandBar expandBar) { List<FilterProperties> inputPortFieldList = null; String count=(String)component.getProperties().get(Constants.INPUT_PORT_COUNT_PROPERTY); inputPortValue=Integer.valueOf(count); for (int i = 0; i < inputPortValue; i++) { if (joinMappingGrid != null) { if (joinMappingGrid.getLookupInputProperties() != null && !joinMappingGrid.getLookupInputProperties() .isEmpty()) { if (i < joinMappingGrid.getLookupInputProperties().size()) inputPortFieldList = joinMappingGrid .getLookupInputProperties().get(i); else inputPortFieldList = new ArrayList<>(); } else { inputPortFieldList = new ArrayList<>(); } } if (inputPorts != null) { inputPorts.add(inputPortFieldList); if (inputPortFieldList != null) { for (FilterProperties inputField : inputPortFieldList) { allInputFields.add(INPUT_PORT_ID_PREFIX + i + "." + inputField.getPropertyname()); } } } addExpandItem(expandBar, inputPortFieldList, i); } } private void addExpandItem(ExpandBar expandBar, List<FilterProperties> inputPortFieldList, int portNumber) { ExpandItem xpndtmItem = new ExpandItem(expandBar, SWT.NONE); xpndtmItem.setText(EXPAND_ITEM_TEXT_PREFIX + portNumber); Composite composite_13 = new Composite(expandBar, SWT.NONE); xpndtmItem.setControl(composite_13); composite_13.setLayout(new GridLayout(1, false)); TableViewer tableViewer_1 = new TableViewer(composite_13, SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI ); final Table table_1 = tableViewer_1.getTable(); table_1.setLinesVisible(true); table_1.setHeaderVisible(true); table_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); tableViewer_1.setContentProvider(new ArrayContentProvider()); TableViewerColumn tableViewerColumn_2 = new TableViewerColumn( tableViewer_1, SWT.NONE); TableColumn tblclmnInputFields = tableViewerColumn_2.getColumn(); tblclmnInputFields.setText(INPUT_TABLE_COLUMN_TEXT); tableViewerColumn_2.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { FilterProperties tableField = (FilterProperties) element; return tableField.getPropertyname(); } }); tableViewer_1.setInput(inputPortFieldList); xpndtmItem.setData("TableColumn", table_1.getColumn(0)); Transfer[] types = new Transfer[] { TextTransfer.getInstance() }; final String portLabel = INPUT_PORT_ID_PREFIX + portNumber + "."; int operations = DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_LINK; // final Table table = (Table) sourceControl; DragSource source = new DragSource(table_1, operations); source.setTransfer(types); source.addDragListener(new DragSourceAdapter() { public void dragSetData(DragSourceEvent event) { // Set the data to be the first selected item's text event.data = addDelimeter(portLabel, table_1.getSelection()); } }); xpndtmItem.setHeight(190); xpndtmItem.setExpanded(true); table_1.addControlListener(new ControlListener() { @Override public void controlResized(ControlEvent e) { Table table = (Table) e.widget; Rectangle area = table.getClientArea(); int totalAreaWidth = area.width; int diff = totalAreaWidth - (table.getColumn(0).getWidth()); table.getColumn(0).setWidth(diff + table.getColumn(0).getWidth()); } @Override public void controlMoved(ControlEvent e) { } }); } private String addDelimeter(String portLabel, TableItem[] selectedTableItems) { StringBuffer buffer = new StringBuffer(); for (TableItem tableItem : selectedTableItems) { buffer.append(portLabel + tableItem.getText() + MAPPING_TABLE_ITEM_DELIMILATOR); } return buffer.toString(); } /** * Create contents of the button bar. * * @param parent */ @Override protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } @Override protected void okPressed() { setValueForCellEditor(); joinMappingGrid.setLookupInputProperties(inputPorts); joinMappingGrid.setLookupMapProperties(mappingTableItemList); populateCurrentItemsOfTable(); if (!oldJoinMappingGrid.equals(newJoinMappingGrid)) { propertyDialogButtonBar.enableApplyButton(true); } super.okPressed(); } @Override protected void cancelPressed(){ joinMappingGrid.setLookupInputProperties(oldJoinMappingGrid.getLookupInputProperties()); joinMappingGrid.setLookupMapProperties(oldJoinMappingGrid.getLookupMapProperties()); super.cancelPressed(); } private void populateJoinMapDialog() { if (joinMappingGrid.getLookupMapProperties() != null && !joinMappingGrid.getLookupMapProperties().isEmpty()) { mappingTableItemList = joinMappingGrid.getLookupMapProperties(); } else { mappingTableItemList = new LinkedList<>(); } if (joinMappingGrid.getButtonText() != null && !StringUtils.equals(joinMappingGrid.getButtonText(), NO_COPY)) { radioButtonMap.get(joinMappingGrid.getButtonText()).setSelection( true); mappingTableViewer.getTable().setEnabled(false); enableMappingTableButtonPanel(false); String inputPortID=StringUtils.remove(joinMappingGrid.getButtonText(), Constants.COPY_FROM_INPUT_PORT_PROPERTY); copyFieldsWhenCopyOfIsSelected(inputPorts.get(Integer.parseInt(StringUtils.remove(inputPortID, Constants.INPUT_SOCKET_TYPE))), inputPortID); } else { radioButtonMap.get(NO_COPY).setSelection(true); } mappingTableViewer.setInput(mappingTableItemList); mappingTableViewer.refresh(); populatePreviousItemsOfTable(); mouseDoubleClick(); } private void mouseDoubleClick() { mappingTableViewer.getTable().addMouseListener(new MouseListener() { @Override public void mouseUp(MouseEvent e) { } @Override public void mouseDown(MouseEvent e) { } @Override public void mouseDoubleClick(MouseEvent e) { addNewRow(); } }); if(mappingTableViewer.getTable().getEnabled()){ refreshButtonStatus(); } } private void populatePreviousItemsOfTable() { oldJoinMappingGrid = joinMappingGrid.clone(); } private void populateCurrentItemsOfTable() { newJoinMappingGrid = joinMappingGrid.clone(); } private void enableMappingTableButtonPanel(boolean enabled){ btnAdd.setEnabled(enabled); btnDelete.setEnabled(enabled); btnDown.setEnabled(enabled); btnUp.setEnabled(enabled); btnPull.setEnabled(enabled); } private void refreshButtonStatus(){ if(mappingTableItemList.size()>=1){ btnDelete.setEnabled(true); } if(mappingTableItemList.size()>1){ btnDown.setEnabled(true); btnUp.setEnabled(true); } if(mappingTableItemList.size() == 0){ btnDelete.setEnabled(false); btnDown.setEnabled(false); btnUp.setEnabled(false); } } private void setValueForCellEditor(){ if(outputEditingSupport !=null && outputEditingSupport.getEditor()!=null){ outputEditingSupport.getEditor().getControl().setEnabled(false); outputEditingSupport.getEditor().getControl().setEnabled(true); } if(inputEditingSupport !=null && inputEditingSupport.getEditor()!=null){ inputEditingSupport.getEditor().getControl().setEnabled(false); inputEditingSupport.getEditor().getControl().setEnabled(true); } } @Override protected Point getInitialSize() { return new Point(800,500); } }