// ============================================================================ // // 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.dq.helper; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.emf.common.util.EList; import org.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.core.model.metadata.builder.connection.MetadataTable; import org.talend.cwm.helper.ColumnHelper; import org.talend.cwm.helper.TaggedValueHelper; import org.talend.dataquality.analysis.Analysis; import org.talend.dataquality.analysis.SampleDataShowWay; import org.talend.dataquality.helpers.AnalysisHelper; import org.talend.dataquality.sample.data.SampleDataStatement; import org.talend.dq.analysis.data.preview.DataPreviewHandler; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC zshen class global comment. Detailled comment */ public class SampleDataUtils { private static SampleDataUtils instance; private SampleDataUtils() { } /** * Getter for instance. * * @return the instance */ public static SampleDataUtils getInstance() { if (instance == null) { instance = new SampleDataUtils(); } return instance; } private SampleDataStatement statement = null; private static Logger log = Logger.getLogger(SampleDataUtils.class); /* * (non-Javadoc) * * @see org.talend.dataprofiler.service.IAnalysisEditorService#getSampleData() */ public SampleDataStatement getSampleDataStatement(final Analysis findAnalysis) { statement = null; // if (Platform.isRunning()) { // Display.getDefault().syncExec(new Runnable() { // // public void run() { // // IEditorPart activeEditor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() // .getActiveEditor(); // if (activeEditor != null && activeEditor instanceof AnalysisEditor) { // AnalysisEditor analysisEditor = ((AnalysisEditor) activeEditor); // if (analysisEditor.getMasterPage().getCurrentModelElement().equals(findAnalysis)) { // AbstractAnalysisMetadataPage masterPage = analysisEditor.getMasterPage(); // ColumnAnalysisDataSamTable sampleTable = masterPage.getSampleTable(); // int editorDisLimit = masterPage.getPreviewLimit(); // int tableLimit = sampleTable.getLimitNumber(); // if (currentLimitChanged(editorDisLimit, tableLimit)) { // refreshSampleData(masterPage); // } // statement = new SampleDataStatement(sampleTable.getExistPreviewData(), sampleTable.getPropertyNames()); // } // } // } // }); // } // CommandLine case editor is not active case and so on // if (statement == null) { DataPreviewHandler dataPreviewHandler = new DataPreviewHandler(); dataPreviewHandler.setDataFilter(getDataFilter(findAnalysis)); List<Object[]> previewData = new ArrayList<Object[]>(); ModelElement[] columns = null; try { columns = getColumns(findAnalysis); previewData = dataPreviewHandler.createPreviewData(columns, getLimitNumber(findAnalysis), isShowRandomData(findAnalysis)); } catch (SQLException e) { log.error(e, e); // this exception generate mean that the sample data can not be get out so that we will return a empty result. } statement = new SampleDataStatement(previewData, getPropertyNames(columns)); // } return statement; } /** * DOC zshen Comment method "getPropertyNames". * * @return */ private String[] getPropertyNames(final ModelElement[] columns) { // ModelElement[] columns = getColumns(findAnalysis); String[] propertyNames = new String[columns.length]; int index = 0; for (ModelElement modelElement : columns) { propertyNames[index++] = modelElement.getName(); } return propertyNames; } /** * DOC zshen Comment method "getLimitNumber". * * @param findAnalysis * @return */ private int getLimitNumber(Analysis findAnalysis) { String valueString = TaggedValueHelper.getValueString(TaggedValueHelper.PREVIEW_ROW_NUMBER, findAnalysis); Integer limitNumber = 0; try { limitNumber = Integer.valueOf(valueString); } catch (NumberFormatException e) { // there keep limitNumber is zero because of when this value is less than or same with zero then mean that no limit // here } return limitNumber; } /** * DOC zshen Comment method "isShowRandomData". * * @param findAnalysis * @return */ private boolean isShowRandomData(final Analysis findAnalysis) { return findAnalysis.getParameters().getSampleDataShowWay() == SampleDataShowWay.RANDOM; } /** * DOC zshen Comment method "getColumns". * * @param findAnalysis * @return */ private ModelElement[] getColumns(final Analysis findAnalysis) { EList<ModelElement> ownedElement = findAnalysis.getContext().getAnalysedElements(); ModelElement modelElement = ownedElement.get(0); MetadataTable columnOwnerAsMetadataTable = ColumnHelper.getColumnOwnerAsMetadataTable(modelElement); EList<MetadataColumn> columns = columnOwnerAsMetadataTable.getColumns(); ModelElement[] modelElementArray = new ModelElement[columns.size()]; int index = 0; for (MetadataColumn metadataColumn : columns) { modelElementArray[index++] = metadataColumn; } return modelElementArray; } /** * DOC zshen Comment method "getDataFilter". * * @return */ private String getDataFilter(final Analysis findAnalysis) { return AnalysisHelper.getStringDataFilter(findAnalysis); } // private void refreshSampleData(AbstractAnalysisMetadataPage masterPage) { // masterPage.refreshPreviewData(); // } private boolean currentLimitChanged(int newValue, int oldValue) { if (oldValue != newValue) { return true; } return false; } }