// ============================================================================
//
// 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.dataquality.record.linkage.ui.composite;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.talend.core.model.metadata.builder.connection.MetadataColumn;
import org.talend.dataquality.record.linkage.ui.composite.tableviewer.AbstractMatchAnalysisTableViewer;
import org.talend.dataquality.record.linkage.utils.MatchAnalysisConstant;
import org.talend.dataquality.rules.KeyDefinition;
/**
* created by zhao on Aug 16, 2013 Abstract table compoiste. Blocking key, matching key survivorship key table are
* intended to be extended.
*
*/
public abstract class AbsMatchAnalysisTableComposite<T> extends Composite implements PropertyChangeListener {
protected List<String> headers = new ArrayList<String>();
protected AbstractMatchAnalysisTableViewer<T> tableViewer = null;
private boolean isAddColumn = true;
protected List<MetadataColumn> columnList = new ArrayList<MetadataColumn>();
protected PropertyChangeSupport listeners = new PropertyChangeSupport(this);
/**
* DOC zshen MatchRuleComposite constructor comment.
*
* @param parent
* @param style
*/
public AbsMatchAnalysisTableComposite(Composite parent, int style) {
super(parent, style);
}
/**
* create Table when you want to display it
*/
public void createContent() {
initHeaders();
createTable();
}
/**
* Sets the columnMap.
*
* @param columnMap the columnMap to set
*/
public void setColumnList(List<MetadataColumn> columnList) {
this.columnList.addAll(columnList);
}
/**
* DOC zshen Comment method "initHeaders".
*/
abstract protected void initHeaders();
abstract protected AbstractMatchAnalysisTableViewer<T> createTableViewer();
/**
* DOC zshen Comment method "createTable".
*/
protected abstract void createTable();
protected int getTableStyle() {
int style = SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.HIDE_SELECTION;
return style;
}
public void setInput(List<T> inputs) {
tableViewer.setInput(inputs);
}
public Object getInput() {
return tableViewer.getInput();
}
public Boolean addKeyDefinition(String column, List<T> keyDefs) {
return tableViewer.addElement(column, keyDefs);
}
public Boolean addKeyDefinition(T keyDef, List<T> keyList) {
return tableViewer.addElement(keyDef, keyList);
}
public void removeKeyDefinition(String column, List<T> keyDefs) {
tableViewer.removeElement(column, keyDefs);
}
public void removeKeyDefinition(T keyDef, List<T> keyDefs) {
tableViewer.removeElement(keyDef, keyDefs);
}
public void moveUpKeyDefinition(T keyDef, List<T> keyDefs) {
tableViewer.moveUpElement(keyDef, keyDefs);
}
public void moveDownKeyDefinition(T keyDef, List<T> keyDefs) {
tableViewer.moveDownElement(keyDef, keyDefs);
}
public ISelection getSelectItems() {
return tableViewer.getSelection();
}
public void serViewerSorter(ViewerSorter sorter) {
tableViewer.setSorter(sorter);
}
public void selectAllItem(List<KeyDefinition> bkdList) {
tableViewer.selectAllItem(bkdList);
}
/**
* Getter for isAddColumn.
*
* @return the isAddColumn
*/
public boolean isAddColumn() {
return this.isAddColumn;
}
/**
* Sets the isAddColumn.
*
* @param isAddColumn the isAddColumn to set
*/
public void setAddColumn(boolean isAddColumn) {
this.isAddColumn = isAddColumn;
}
public void addPropertyChangeListener(PropertyChangeListener listener) {
listeners.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
listeners.addPropertyChangeListener(listener);
}
@Override
public void propertyChange(PropertyChangeEvent evt) {
if (MatchAnalysisConstant.ISDIRTY_PROPERTY.equals(evt.getPropertyName())) {
listeners.firePropertyChange(MatchAnalysisConstant.ISDIRTY_PROPERTY, true, false);
} else if (MatchAnalysisConstant.MATCH_RULE_TAB_SWITCH.equals(evt.getPropertyName())) {
listeners.firePropertyChange(MatchAnalysisConstant.MATCH_RULE_TAB_SWITCH, true, false);
}
}
}