// ============================================================================ // // 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.section.definition; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.lang.StringUtils; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.Section; import org.talend.dataquality.record.linkage.ui.composite.SurvivorshipTableComposite; import org.talend.dataquality.record.linkage.ui.composite.tableviewer.sorter.KeyDefinitionTableViewerSorter; import org.talend.dataquality.record.linkage.ui.i18n.internal.DefaultMessagesImpl; import org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection; import org.talend.dataquality.record.linkage.utils.MatchAnalysisConstant; import org.talend.dataquality.rules.MatchRuleDefinition; import org.talend.dataquality.rules.SurvivorshipKeyDefinition; import org.talend.utils.sugars.ReturnCode; /** * created by HHB on 2013-8-23 Detailled comment * */ public class SurvivorshipDefinitionSection extends AbstractMatchAnaysisTableSection { private SurvivorshipTableComposite tableComposite; private MatchRuleDefinition matchRuleDef; /** * DOC HHB SurvivorshipDefinitionTableSection constructor comment. * * @param form * @param parent * @param style * @param toolkit * @param analysis */ public SurvivorshipDefinitionSection(ScrolledForm form, Composite parent, FormToolkit toolkit) { super(form, parent, Section.TWISTIE | Section.TITLE_BAR | Section.EXPANDED, toolkit, null); super.setIsNeedSubChart(false); } @Override protected void createSubChart(Composite sectionClient) { // do nothing } @Override protected Composite createSubContent(Composite sectionClient) { Composite ruleComp = toolkit.createComposite(sectionClient, SWT.NONE); GridData data = new GridData(GridData.FILL_BOTH); ruleComp.setLayoutData(data); GridLayout gridLayout = new GridLayout(1, true); gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; ruleComp.setLayout(gridLayout); tableComposite = new SurvivorshipTableComposite(ruleComp, SWT.NO_FOCUS); tableComposite.addPropertyChangeListener(this); tableComposite.setLayout(gridLayout); tableComposite.setLayoutData(data); tableComposite.createContent(); section.setExpanded(true); tableComposite.serViewerSorter(new KeyDefinitionTableViewerSorter<SurvivorshipKeyDefinition>(this.matchRuleDef .getSurvivorshipKeys())); initTableInput(); return ruleComp; } private void initTableInput() { tableComposite.setInput(matchRuleDef.getSurvivorshipKeys()); } @Override protected String getSectionName() { return MatchAnalysisConstant.SURVIVIORSHIP_DEFINITION_SECTION_NAME; } @Override public void refreshChart() { // do nothing } @Override public Boolean isKeyDefinitionAdded(String columnName) throws Exception { return false; } public void setMatchRuleDef(MatchRuleDefinition matchRuleDef) { this.matchRuleDef = matchRuleDef; } @Override public void addTableItem() { tableComposite.addKeyDefinition(StringUtils.EMPTY, matchRuleDef.getSurvivorshipKeys()); listeners.firePropertyChange(MatchAnalysisConstant.ISDIRTY_PROPERTY, true, false); } @Override public void removeTableItem() { boolean success = false; ISelection selectItems = tableComposite.getSelectItems(); if (selectItems instanceof StructuredSelection) { Iterator<SurvivorshipKeyDefinition> iterator = ((StructuredSelection) selectItems).iterator(); while (iterator.hasNext()) { SurvivorshipKeyDefinition next = iterator.next(); tableComposite.removeKeyDefinition(next, matchRuleDef.getSurvivorshipKeys()); success = true; } if (success) { listeners.firePropertyChange(MatchAnalysisConstant.ISDIRTY_PROPERTY, true, false); } } } public void removeAllSurvivorship() { getSurvivorshipKeys().clear(); redrawnSubTableContent(); } /** * Getter for survivorshipKeys. * * @return the survivorshipKeys */ public List<SurvivorshipKeyDefinition> getSurvivorshipKeys() { return this.matchRuleDef.getSurvivorshipKeys(); } /* * (non-Javadoc) * * @see org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#moveDownTableItem() */ @Override public void moveUpTableItem() { ISelection selectItems = tableComposite.getSelectItems(); if (selectItems instanceof StructuredSelection) { if (selectItems.isEmpty()) { return; } List<SurvivorshipKeyDefinition> currentElements = this.matchRuleDef.getSurvivorshipKeys(); List<SurvivorshipKeyDefinition> survivorshipKeyDefinitionlist = ((StructuredSelection) selectItems).toList(); for (int index = 0; index < survivorshipKeyDefinitionlist.size(); index++) { if (!isSameWithCurrentModel(currentElements.get(index), survivorshipKeyDefinitionlist.get(index))) { continue; } SurvivorshipKeyDefinition next = survivorshipKeyDefinitionlist.get(index); tableComposite.moveUpKeyDefinition(next, currentElements); } tableComposite.selectAllItem(((StructuredSelection) selectItems).toList()); } } /* * (non-Javadoc) * * @see org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#moveUpTableItem() */ @Override public void moveDownTableItem() { ISelection selectItems = tableComposite.getSelectItems(); if (selectItems instanceof StructuredSelection) { if (selectItems.isEmpty()) { return; } List<SurvivorshipKeyDefinition> currentElements = this.matchRuleDef.getSurvivorshipKeys(); List<SurvivorshipKeyDefinition> survivorshipKeyDefinitionlist = ((StructuredSelection) selectItems).toList(); for (int index = survivorshipKeyDefinitionlist.size() - 1; 0 <= index; index--) { if (!isSameWithCurrentModel( currentElements.get(currentElements.size() - survivorshipKeyDefinitionlist.size() + index), survivorshipKeyDefinitionlist.get(index))) { continue; } SurvivorshipKeyDefinition next = survivorshipKeyDefinitionlist.get(index); tableComposite.moveDownKeyDefinition(next, currentElements); } tableComposite.selectAllItem(((StructuredSelection) selectItems).toList()); } } /* * (non-Javadoc) * * @see org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#checkResultStatus() */ @Override public ReturnCode checkResultStatus() { ReturnCode returnCode = new ReturnCode(false); List<String> uniqueNameList = new ArrayList<String>(); List<String> duplicateNameList = new ArrayList<String>(); for (SurvivorshipKeyDefinition ssdk : getSurvivorshipKeys()) { String currentName = ssdk.getName(); if (currentName.equals(StringUtils.EMPTY)) { returnCode.setMessage(DefaultMessagesImpl.getString("BlockingKeySection.emptyKeys.message", getSectionName())); //$NON-NLS-1$ return returnCode; } boolean currentNameIsDuplicate = false; for (String uniqueName : uniqueNameList) { if (currentName.equals(uniqueName)) { duplicateNameList.add(currentName); currentNameIsDuplicate = true; } } if (!currentNameIsDuplicate) { uniqueNameList.add(currentName); } } if (duplicateNameList.size() > 0) { returnCode.setMessage(DefaultMessagesImpl.getString("BlockingKeySection.duplicateKeys.message", getSectionName())); //$NON-NLS-1$ return returnCode; } else { returnCode.setOk(true); return returnCode; } } }