// ============================================================================ // // 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 org.talend.mdm.repository.ui.dialogs.datacontent; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ICheckStateProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; 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.widgets.Button; 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 org.eclipse.swt.widgets.Table; import org.talend.mdm.repository.core.datacontent.DataEntityUnit; import org.talend.mdm.repository.core.datacontent.DataProcessRule; import org.talend.mdm.repository.i18n.Messages; import com.amalto.workbench.image.EImage; import com.amalto.workbench.image.ImageCache; /** * created by HHB on 2012-10-9 Detailled comment * */ public class DataProcessRuleDialog extends Dialog { private static final Image IMG_CONCEPT = ImageCache.getCreatedImage(EImage.CONCEPT.getPath()); private class TableLabelProvider extends LabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { return IMG_CONCEPT; } public String getColumnText(Object element, int columnIndex) { if (element instanceof DataEntityUnit) { return ((DataEntityUnit) element).getEntityName(); } return element.toString(); } } private Button okButton; private final DataProcessRule rule; private Button selectAllBun; private Button upBun; private Table table; private CheckboxTableViewer tableViewer; private Label lblNewLabel; private Button downBun; /** * Create the dialog. * * @param parentShell */ public DataProcessRuleDialog(Shell parentShell, DataProcessRule rule) { super(parentShell); this.rule = rule; setShellStyle(getShellStyle() | SWT.RESIZE); } /** * Create contents of the dialog. * * @param parent */ @Override protected Control createDialogArea(Composite parent) { Composite container = (Composite) super.createDialogArea(parent); GridLayout gridLayout = (GridLayout) container.getLayout(); gridLayout.numColumns = 2; lblNewLabel = new Label(container, SWT.NONE); lblNewLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); lblNewLabel.setText(Messages.DataProcessRuleDialog_title); tableViewer = CheckboxTableViewer.newCheckList(container, SWT.BORDER | SWT.FULL_SELECTION); table = tableViewer.getTable(); table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3)); upBun = new Button(container, SWT.NONE); upBun.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveUp(); } }); upBun.setImage(ImageCache.getCreatedImage(EImage.PREV_NAV.getPath())); upBun.setEnabled(false); downBun = new Button(container, SWT.NONE); downBun.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { moveDown(); } }); downBun.setImage(ImageCache.getCreatedImage(EImage.NEXT_NAV.getPath())); downBun.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1)); downBun.setEnabled(false); new Label(container, SWT.NONE); selectAllBun = new Button(container, SWT.CHECK); selectAllBun.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { selectAll(selectAllBun.getSelection()); updateOKButton(); } }); selectAllBun.setText(Messages.DataProcessRuleDialog_selectAll); new Label(container, SWT.NONE); initTableViewer(); updateSelectAllBun(); return container; } private void updateSelectAllBun() { boolean selectAll = true; for (DataEntityUnit unit : rule.getEntityUnits()) { if (!unit.isSelected()) { selectAll = false; break; } } selectAllBun.setSelection(selectAll); } private void updateOKButton() { if (okButton != null) { okButton.setEnabled(rule.returnSelectedEntityUnits().size() > 0); } } /** * DOC HHB Comment method "moveUp". */ protected void moveUp() { moveUnit(true); } protected void moveDown() { moveUnit(false); } private void moveUnit(boolean up) { DataEntityUnit curSelectedUnit = getCurSelectedUnit(); if (curSelectedUnit == null) { return; } List<DataEntityUnit> units = rule.getEntityUnits(); int index = units.indexOf(curSelectedUnit); int newIndex = -1; if (index >= 0) { if (up) { newIndex = index - 1; } else { newIndex = index + 1; } DataEntityUnit bakUnit = units.get(newIndex); units.set(newIndex, curSelectedUnit); units.set(index, bakUnit); tableViewer.refresh(); enableButtons(); } } private void selectAll(boolean selectAll) { for (DataEntityUnit unit : rule.getEntityUnits()) { unit.setSelected(selectAll); } tableViewer.refresh(); } private void initTableViewer() { tableViewer.setLabelProvider(new TableLabelProvider()); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setCheckStateProvider(new ICheckStateProvider() { public boolean isGrayed(Object element) { return false; } public boolean isChecked(Object element) { if (element instanceof DataEntityUnit) { return ((DataEntityUnit) element).isSelected(); } return false; } }); tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { enableButtons(); } }); tableViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { DataEntityUnit unit = (DataEntityUnit) event.getElement(); unit.setSelected(event.getChecked()); updateSelectAllBun(); updateOKButton(); } }); // tableViewer.setInput(rule.getEntityUnits()); } private DataEntityUnit getCurSelectedUnit() { ISelection selection = tableViewer.getSelection(); if (!selection.isEmpty() && selection instanceof IStructuredSelection) { Object selectedObj = ((IStructuredSelection) selection).getFirstElement(); return (DataEntityUnit) selectedObj; } return null; } private void enableButtons() { DataEntityUnit curSelectedUnit = getCurSelectedUnit(); if (curSelectedUnit == null) { return; } List<DataEntityUnit> entityUnits = rule.getEntityUnits(); upBun.setEnabled(entityUnits.get(0) != curSelectedUnit); downBun.setEnabled(entityUnits.get(entityUnits.size() - 1) != curSelectedUnit); } /** * 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); } /** * Return the initial size of the dialog. */ @Override protected Point getInitialSize() { return new Point(500, 300); } }