// ============================================================================
//
// 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;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
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.talend.dataquality.PluginConstant;
import org.talend.dataquality.analysis.Analysis;
import org.talend.dataquality.indicators.columnset.RecordMatchingIndicator;
import org.talend.dataquality.record.linkage.ui.composite.chart.MatchRuleDataChart;
import org.talend.dataquality.record.linkage.ui.composite.chart.TOPChartUtil;
import org.talend.dataquality.record.linkage.ui.composite.tableviewer.GroupStatisticsTableViewer;
import org.talend.dataquality.record.linkage.ui.composite.tableviewer.provider.GroupStatisticsRow;
import org.talend.dataquality.record.linkage.ui.composite.utils.MatchRuleAnlaysisUtils;
import org.talend.dataquality.record.linkage.ui.i18n.internal.DefaultMessagesImpl;
import org.talend.utils.format.StringFormatUtil;
/**
* created by zhao on Aug 19, 2013 Group statistics section
*
*/
public class GroupStatisticsSection extends AbstractMatchKeyWithChartTableSection {
private GroupStatisticsTableViewer groupStatisticsTableViewer = null;
/**
* DOC zhao GroupStatisticsSection constructor comment.
*
* @param form
* @param parent
* @param style
* @param toolkit
* @param analysis
*/
public GroupStatisticsSection(ScrolledForm form, Composite parent, int style, FormToolkit toolkit, Analysis analysis) {
super(form, parent, style, toolkit, analysis);
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#createSubChart(org.eclipse.
* swt.widgets.Composite)
*/
@Override
protected void createSubChart(Composite sectionClient) {
RecordMatchingIndicator recordMatchingIndicator = MatchRuleAnlaysisUtils.getRecordMatchIndicatorFromAna(analysis);
Composite chartComposite = toolkit.createComposite(sectionClient);
GridLayout tableLayout = new GridLayout(1, Boolean.TRUE);
chartComposite.setLayout(tableLayout);
GridData gridData = new GridData(GridData.FILL_BOTH);
chartComposite.setLayoutData(gridData);
matchRuleChartComp = new MatchRuleDataChart(chartComposite, recordMatchingIndicator.getGroupSize2groupFrequency());
if (!TOPChartUtil.getInstance().isTOPChartInstalled()) {
return;
}
createHideGroupComposite(chartComposite);
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#createSubContent(org.eclipse
* .swt.widgets.Composite)
*/
@Override
protected Composite createSubContent(Composite sectionClient) {
Composite parent = toolkit.createComposite(sectionClient);
GridLayout tableLayout = new GridLayout(1, Boolean.TRUE);
parent.setLayout(tableLayout);
GridData gridData = new GridData(GridData.FILL_BOTH);
parent.setLayoutData(gridData);
groupStatisticsTableViewer = new GroupStatisticsTableViewer(parent, SWT.NONE);
setGroupStatisticsTableInput();
return parent;
}
/**
* DOC zhao Comment method "setGroupStatisticsTableInput".
*/
private void setGroupStatisticsTableInput() {
RecordMatchingIndicator recordMatchingIndicator = MatchRuleAnlaysisUtils.getRecordMatchIndicatorFromAna(analysis);
// Row count
Long rowCount = recordMatchingIndicator.getCount();
Map<Object, Long> groupSize2GroupFreq = recordMatchingIndicator.getGroupSize2groupFrequency();
Iterator<Object> groupSizeIterator = groupSize2GroupFreq.keySet().iterator();
List<GroupStatisticsRow> groups = new ArrayList<GroupStatisticsRow>();
while (groupSizeIterator.hasNext()) {
Object groupSize = groupSizeIterator.next();
Long groupFreq = groupSize2GroupFreq.get(groupSize);
GroupStatisticsRow groupStatsRow = new GroupStatisticsRow();
groupStatsRow.setGroupSize(Long.valueOf(groupSize.toString()));
groupStatsRow.setGroupCount(groupFreq);
groupStatsRow.setRecordCount(groupStatsRow.getGroupSize() * groupStatsRow.getGroupCount());
setPercentage(groupStatsRow.getRecordCount(), rowCount, groupStatsRow);
groups.add(groupStatsRow);
}
groupStatisticsTableViewer.setInput(groups);
}
/**
* DOC zhao Comment method "setPercentage".
*
* @param count
* @param rowCount
* @param rowCountRow
*/
private void setPercentage(Long count, Long rowCount, GroupStatisticsRow groupStatsRow) {
if (rowCount != 0) {
double percValue = Double.valueOf(count) / Double.valueOf(rowCount);
String formatedStr = StringFormatUtil.format(percValue, StringFormatUtil.PERCENT).toString();
groupStatsRow.setRecordPercentage(formatedStr);
} else {
groupStatsRow.setRecordPercentage(PluginConstant.NA_STRING);
}
}
/*
* (non-Javadoc)
*
* @see org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#getSectionName()
*/
@Override
protected String getSectionName() {
return DefaultMessagesImpl.getString("MatchAnalysisResultPage.GROUP_STATS_NAME"); //$NON-NLS-1$
}
/*
* (non-Javadoc)
*
* @see org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#refreshChart()
*/
@Override
public void refreshChart() {
setGroupStatisticsTableInput();
RecordMatchingIndicator recordMatchingIndicator = MatchRuleAnlaysisUtils.getRecordMatchIndicatorFromAna(analysis);
matchRuleChartComp.refresh(recordMatchingIndicator.getGroupSize2groupFrequency());
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#isKeyDefinitionAdded(java.lang
* .String)
*/
@Override
public Boolean isKeyDefinitionAdded(String columnName) throws Exception {
// TODO Auto-generated method stub
return null;
}
/*
* (non-Javadoc)
*
* @see
* org.talend.dataquality.record.linkage.ui.section.AbstractMatchAnaysisTableSection#createButtons(org.eclipse.swt
* .widgets.Composite)
*/
@Override
protected void createButtons(Composite sectionClient) {
// No implementation
}
}