// ============================================================================
//
// 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.dataprofiler.core.ui.wizard.patterns;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.nebula.jface.gridviewer.GridTableViewer;
import org.eclipse.nebula.widgets.grid.Grid;
import org.eclipse.nebula.widgets.grid.GridColumn;
import org.eclipse.nebula.widgets.grid.GridItem;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FillLayout;
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.Label;
import org.eclipse.swt.widgets.Widget;
import org.talend.dataprofiler.core.ImageLib;
import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl;
import org.talend.dataquality.indicators.RegexpMatchingIndicator;
import org.talend.dataquality.indicators.columnset.impl.AllMatchIndicatorImpl;
import org.talend.dataquality.indicators.impl.RegexpMatchingIndicatorImpl;
import org.talend.metadata.managment.utils.MetadataConnectionUtils;
import orgomg.cwm.objectmodel.core.ModelElement;
/**
* DOC zshen class global comment. Detailled comment
*/
public class PatternsSelectPage extends WizardPage {
private SelectPatternsWizard selectPatternsWizard;
private Grid table;
private DataFilterType filterType = null;
private List<Map<Integer, RegexpMatchingIndicator>> tableInputList;
private List<Map<Integer, RegexpMatchingIndicator>> oldTableInputList;
/**
* DOC zshen PatternsSelectPage constructor comment.
*
* @param pageName
*/
protected PatternsSelectPage(SelectPatternsWizard selectPatternsWizard) {
super(DefaultMessagesImpl.getString("PatternsSelectPage.title")); //$NON-NLS-1$
setTitle(DefaultMessagesImpl.getString("PatternsSelectPage.title")); //$NON-NLS-1$
setMessage(DefaultMessagesImpl.getString("PatternsSelectPage.message")); //$NON-NLS-1$
this.selectPatternsWizard = selectPatternsWizard;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite)
*/
public void createControl(Composite parent) {
GridLayout parentGridLayout = new GridLayout();
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
data.grabExcessVerticalSpace = true;
parent.setLayout(parentGridLayout);
List<ModelElement> analysisColumns = this.selectPatternsWizard.getSsIndicator().getAnalyzedColumns();
// add tableView
// MOD msjian TDQ-4631 2012-2-10: add horizontal scroll bar
GridTableViewer tableView = new GridTableViewer(parent, SWT.H_SCROLL);
// TDQ-4631~
this.table = tableView.getGrid();
this.table.setLayoutData(data);
table.setHeaderVisible(true);
table.setLinesVisible(true);
for (ModelElement element : analysisColumns) {
GridColumn tableCum = new GridColumn(table, SWT.CHECK);
String elementName = MetadataConnectionUtils.getMetadataColumnName(element);
if (elementName != null) {
tableCum.setText(elementName);
}
}
tableView.setContentProvider(new PatternSelectContentProvider());
tableView.setLabelProvider(new PatternSelectLabelProvider());
this.tableInputList = organizeTableInput();
tableView.setInput(tableInputList);
for (GridColumn tableCum : table.getColumns()) {
tableCum.pack();
}
// add data filter section.
initDataFilterSection(parent);
inItitemCheck();
this.setControl(parent);
this.setPageComplete(true);
}
private void initDataFilterSection(Composite parent) {
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
FillLayout dataFilterSectionGridLayout = new FillLayout();
Composite dataFilterSection = new Composite(parent, SWT.NONE);
dataFilterSection.setLayoutData(data);
dataFilterSection.setLayout(dataFilterSectionGridLayout);
DataFilterListener dataFilterListener = new DataFilterListener();
Label displayLabel = new Label(dataFilterSection, SWT.CENTER | SWT.VERTICAL);
displayLabel.setText(DefaultMessagesImpl.getString("PatternsSelectPage.display"));//$NON-NLS-1$
Button dataRadio = null;
for (DataFilterType newfilterType : DataFilterType.values()) {
dataRadio = new Button(dataFilterSection, SWT.RADIO);
dataRadio.setText(newfilterType.getTextName());
dataRadio.addSelectionListener(dataFilterListener);
// set previous selection
if (filterType != null && newfilterType.equals(filterType)) {
dataRadio.setSelection(true);
// default selection
} else if (filterType == null && newfilterType.equals(DataFilterType.ALL_DATA)) {
dataRadio.setSelection(true);
}
}
}
/**
*
* zshen Comment method "inItitemCheck". initialization the table to decide which pattern has been selected.
*/
private void inItitemCheck() {
int index = 0;
for (GridItem theItem : this.table.getItems()) {
for (int columnIndex = 0; columnIndex < this.table.getColumnCount(); columnIndex++) {
if (this.oldTableInputList != null && this.tableInputList.size() <= this.oldTableInputList.size()
&& this.oldTableInputList.get(index).get(columnIndex) != null) {
theItem.setChecked(columnIndex, true);
} else if (this.tableInputList.get(index).get(columnIndex) == null) {
theItem.setCheckable(columnIndex, false);
theItem.setGrayed(columnIndex, true);
}
}
index++;
}
}
/**
* zshen.
*
* @return the input of table.
*/
private List<Map<Integer, RegexpMatchingIndicator>> organizeTableInput() {
List<Map<Integer, RegexpMatchingIndicator>> returnList = new ArrayList<Map<Integer, RegexpMatchingIndicator>>();
AllMatchIndicatorImpl allMatchIndicator = this.selectPatternsWizard.getAllMatchIndicator();
if (allMatchIndicator == null) {
return returnList;
}
List<ModelElement> analysisColumns = this.selectPatternsWizard.getAllMatchIndicator().getAnalyzedColumns();
List<RegexpMatchingIndicator> regexpMatchingIndicatorList = this.selectPatternsWizard.getAllMatchIndicator()
.getCompositeRegexMatchingIndicators();
for (RegexpMatchingIndicator regexIndicator : regexpMatchingIndicatorList) {
int index = analysisColumns.indexOf(regexIndicator.getAnalyzedElement());
Map<Integer, RegexpMatchingIndicator> returnMap = getMapLocation(returnList, index);
// new HashMap<Integer, String>();
returnMap.put(index, regexIndicator);
if (returnMap.size() == 1) {
returnList.add(returnMap);
}
}
return returnList;
}
/**
*
* DOC zshen Comment method "getMapLocation".
*
* @return
*/
private Map<Integer, RegexpMatchingIndicator> getMapLocation(List<Map<Integer, RegexpMatchingIndicator>> theList, int index) {
for (Map<Integer, RegexpMatchingIndicator> mapElement : theList) {
if (mapElement.get(index) != null) {
continue;
} else {
return mapElement;
}
}
return new HashMap<Integer, RegexpMatchingIndicator>();
}
/**
*
* DOC zshen PatternsSelectPage class global comment. Detailled comment
*
* FIXME this inner class should be static. Confirm and fix the error.
*/
private class PatternSelectContentProvider implements IStructuredContentProvider {
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
*/
public Object[] getElements(Object inputElement) {
Object[] elementsArray = new Object[] {};
if (inputElement instanceof List<?>) {
elementsArray = ((List<?>) inputElement).toArray();
}
return elementsArray;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#dispose()
*/
public void dispose() {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
* java.lang.Object, java.lang.Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// TODO Auto-generated method stub
}
}
/**
*
* DOC zshen PatternsSelectPage class global comment. Detailled comment
*
* FIXME this inner class should be static. Confirm and fix the error.
*/
private class PatternSelectLabelProvider implements ITableLabelProvider {
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int)
*/
public Image getColumnImage(Object element, int columnIndex) {
if (element instanceof Map<?, ?> && ((Map<Integer, String>) element).get(columnIndex) != null) {
return ImageLib.getImage(ImageLib.PATTERN_REG);
}
return null;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int)
*/
public String getColumnText(Object element, int columnIndex) {
String elementName = null;
if (element instanceof RegexpMatchingIndicatorImpl) {
elementName = ((RegexpMatchingIndicatorImpl) element).getName();
} else if (element instanceof Map<?, ?>) {
Object tempVar = ((Map<?, ?>) element).get(columnIndex);
if (tempVar instanceof RegexpMatchingIndicatorImpl) {
elementName = ((RegexpMatchingIndicatorImpl) tempVar).getName();
}
}
// PatternsSelectPage.this.getTable().getColumn(columnIndex).pack();
return elementName;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
public void addListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
*/
public void dispose() {
// TODO Auto-generated method stub
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String)
*/
public boolean isLabelProperty(Object element, String property) {
// TODO Auto-generated method stub
return false;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
*/
public void removeListener(ILabelProviderListener listener) {
// TODO Auto-generated method stub
}
}
public Grid getTable() {
return table;
}
public List<Map<Integer, RegexpMatchingIndicator>> getTableInputList() {
return tableInputList;
}
public List<Map<Integer, RegexpMatchingIndicator>> getOldTableInputList() {
return oldTableInputList;
}
public void setOldTableInputList(List<Map<Integer, RegexpMatchingIndicator>> oldTableInputList) {
this.oldTableInputList = oldTableInputList;
}
public DataFilterType getFilterType() {
return filterType;
}
public void setFilterType(DataFilterType filterType) {
this.filterType = filterType;
}
/**
*
* zshen PatternsSelectPage class global comment. Detailled comment
*/
private class DataFilterListener implements SelectionListener {
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetSelected(SelectionEvent e) {
Widget selectItem = e.widget;
if (selectItem instanceof Button && (selectItem.getStyle() | SWT.RADIO) != 0) {
for (DataFilterType type : DataFilterType.values()) {
if (type.getTextName().equals(((Button) selectItem).getText())) {
filterType = type;
break;
}
}
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
*/
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
}
}