// ============================================================================ // // 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.editor.preview.model.states; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.talend.dataprofiler.common.ui.editor.preview.CustomerDefaultCategoryDataset; import org.talend.dataprofiler.common.ui.editor.preview.ICustomerDataset; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.ui.editor.preview.IndicatorUnit; import org.talend.dataprofiler.core.ui.editor.preview.model.dataset.CustomerDefaultBAWDataset; import org.talend.dataprofiler.core.ui.editor.preview.model.states.utils.SummaryStatisticsStateUtil; import org.talend.dataprofiler.core.ui.utils.TOPChartUtils; import org.talend.dq.analysis.explore.DataExplorer; import org.talend.dq.indicators.preview.table.ChartDataEntity; import org.talend.dq.nodes.indicator.type.IndicatorEnum; import org.talend.utils.sql.Java2SqlType; /** * DOC Zqin class global comment. Detailled comment */ public class SummaryStatisticsState extends AbstractChartTypeStates { private static Logger log = Logger.getLogger(SummaryStatisticsState.class); // when all the summary indicators is selected, include the catalog, the number should be 8 public static final int FULL_FLAG = 8; public static final int FULL_CHART = 6; private int sqltype; private SummaryStatisticsStateUtil summaryUtil; private boolean isSupportDynamicChart = false; private Map<IndicatorUnit, String> indicators2ValueMap = new HashMap<IndicatorUnit, String>();; /** * Sets the sqltype. * * @param sqltype the sqltype to set */ public void setSqltype(int sqltype) { this.sqltype = sqltype; } public SummaryStatisticsState(List<IndicatorUnit> units) { summaryUtil = new SummaryStatisticsStateUtil(); if (units != null) { this.units.addAll(summaryUtil.check(units)); } sqltype = summaryUtil.findSqlType(units); } public SummaryStatisticsState(List<IndicatorUnit> units, Map<IndicatorUnit, String> indicators2ValueMap) { this(units); this.indicators2ValueMap = indicators2ValueMap; } public Object getChart() { return getChart(getDataset()); } @Override public Object getChart(Object dataset) { if (Java2SqlType.isDateInSQL(sqltype)) { return null; } else { if (isIntact() && !isSupportDynamicChart) { return TOPChartUtils.getInstance().createBoxAndWhiskerChart( DefaultMessagesImpl.getString("SummaryStatisticsState.SummaryStatistics"), getDataset()); //$NON-NLS-1$ } else { Object barChart = TOPChartUtils.getInstance().createBarChart( DefaultMessagesImpl.getString("SummaryStatisticsState.Summary_Statistics"), dataset, false); //$NON-NLS-1$ TOPChartUtils.getInstance().setDisplayDecimalFormatOfChart(barChart); return barChart; } } } public ICustomerDataset getCustomerDataset() { Map<IndicatorEnum, Double> map = new HashMap<IndicatorEnum, Double>(); CustomerDefaultCategoryDataset customerdataset = new CustomerDefaultCategoryDataset(); for (IndicatorUnit unit : units) { // MOD xqliu 2009-06-29 bug 7068 String value = null; if (indicators2ValueMap.containsKey(unit)) { value = indicators2ValueMap.get(unit); } else { value = summaryUtil.getUnitValue(unit); } if (Java2SqlType.isNumbericInSQL(sqltype)) { try { map.put(unit.getType(), Double.parseDouble(value)); } catch (Exception e) { log.error(e.getMessage(), e); } } ChartDataEntity entity = summaryUtil.createDataEntity(unit, value); customerdataset.addDataEntity(entity); } if (isIntact() && !isSupportDynamicChart) { CustomerDefaultBAWDataset dataset = new CustomerDefaultBAWDataset(map.get(IndicatorEnum.MeanIndicatorEnum), map.get(IndicatorEnum.MedianIndicatorEnum), map.get(IndicatorEnum.LowerQuartileIndicatorEnum), map.get(IndicatorEnum.UpperQuartileIndicatorEnum), map.get(IndicatorEnum.MinValueIndicatorEnum), map.get(IndicatorEnum.MaxValueIndicatorEnum), customerdataset); dataset.addDataEntity(customerdataset.getDataEntities()); return dataset; } else { // MOD hcheng,Range indicator value should not appear in bar chart if (!isIntact()) { map.remove(IndicatorEnum.RangeIndicatorEnum); map.remove(IndicatorEnum.IQRIndicatorEnum); } for (IndicatorEnum indicatorEnum : map.keySet()) { customerdataset.addValue(map.get(indicatorEnum), indicatorEnum.getLabel(), indicatorEnum.getLabel()); } return customerdataset; } } public DataExplorer getDataExplorer() { return summaryUtil.getDataExplorer(sqltype); } public Object getExampleChart() { // TODO Auto-generated method stub return null; } private boolean isIntact() { return units.size() == FULL_FLAG && summaryUtil.isMeaning(); } public String getReferenceLink() { String url = null; if (isIntact()) { url = "http://en.wikipedia.org/wiki/Box_plot"; //$NON-NLS-1$ } else { url = "http://en.wikipedia.org/wiki/Histogram"; //$NON-NLS-1$ } return url; } /* * (non-Javadoc) * * @see * org.talend.dataprofiler.core.ui.editor.preview.model.states.IChartTypeStates#getChart(org.talend.dataprofiler * .common.ui.editor.preview.ICustomerDataset) */ public Object getChart(ICustomerDataset dataset) { return null; } /** * Sets the isSupportDynamicChart. * * @param isSupportDynamicChart the isSupportDynamicChart to set */ public void setSupportDynamicChart(boolean isSupportDynamicChart) { this.isSupportDynamicChart = isSupportDynamicChart; } }