// ============================================================================ // // 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.action.actions.predefined; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.jface.wizard.WizardPage; 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.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.core.repository.model.repositoryObject.MetadataColumnRepositoryObject; import org.talend.cwm.relational.TdColumn; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; import org.talend.dataprofiler.core.model.ModelElementIndicator; import org.talend.dataprofiler.core.ui.action.AbstractPredefinedAnalysisAction; import org.talend.dataprofiler.core.ui.utils.OpeningHelpWizardDialog; import org.talend.dataprofiler.core.ui.utils.RepNodeUtils; import org.talend.dataprofiler.core.ui.wizard.analysis.WizardFactory; import org.talend.dataprofiler.core.ui.wizard.analysis.column.ColumnWizard; import org.talend.dataprofiler.core.ui.wizard.indicator.forms.AbstractForm; import org.talend.dataprofiler.core.ui.wizard.indicator.forms.AbstractForm.ICheckListener; import org.talend.dataprofiler.core.ui.wizard.indicator.forms.FormEnum; import org.talend.dataprofiler.core.ui.wizard.indicator.forms.impl.freq.FreqTimeSliceForm; import org.talend.dataquality.analysis.AnalysisType; import org.talend.dataquality.indicators.DateParameters; import org.talend.dataquality.indicators.FrequencyIndicator; import org.talend.dataquality.indicators.Indicator; import org.talend.dataquality.indicators.IndicatorParameters; import org.talend.dataquality.indicators.IndicatorsFactory; import org.talend.dq.analysis.parameters.AnalysisParameter; import org.talend.dq.nodes.indicator.type.IndicatorEnum; import org.talend.repository.model.IRepositoryNode; import org.talend.utils.sql.Java2SqlType; import org.talend.utils.sql.TalendTypeConvert; /** * DOC Administrator class global comment. Detailled comment */ public class CreateDateAnalysisAction extends AbstractPredefinedAnalysisAction { private IndicatorParameters parameters; public CreateDateAnalysisAction() { super(DefaultMessagesImpl.getString("CreateDateAnalysisAction.timeAnalysis"), null); //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.action.AbstractPredefinedAnalysisAction#getPredefinedColumnIndicator() */ @Override protected ModelElementIndicator[] getPredefinedColumnIndicator() { int count = 5; if (isTimeType()) { count = 3; } IndicatorEnum[] allwedEnumes = new IndicatorEnum[count]; allwedEnumes[0] = IndicatorEnum.CountsIndicatorEnum; allwedEnumes[1] = IndicatorEnum.MinValueIndicatorEnum; allwedEnumes[2] = IndicatorEnum.MaxValueIndicatorEnum; if (count == 5) { allwedEnumes[3] = IndicatorEnum.LowFrequencyIndicatorEnum; allwedEnumes[4] = IndicatorEnum.FrequencyIndicatorEnum; } ModelElementIndicator[] returnColumnIndicator = composePredefinedColumnIndicator(allwedEnumes); if (parameters != null) { for (ModelElementIndicator columnIndicator : returnColumnIndicator) { for (Indicator indicator : columnIndicator.getIndicators()) { if (indicator instanceof FrequencyIndicator) { if (indicator.getParameters().getDateParameters() != null) {// TODO If we will never use the // "parameters" parameter, why we // add TimeSliceOptionPage and have // this loop indicator.getParameters().getDateParameters() .setDateAggregationType(parameters.getDateParameters().getDateAggregationType()); } } } } } return returnColumnIndicator; } // Added yyin2012-05-14 TDQ-5241 private boolean isTimeType() { for (IRepositoryNode repositoryNode : getColumns()) { MetadataColumn column = ((MetadataColumnRepositoryObject) repositoryNode.getObject()).getTdColumn(); int javaSQLType = ((TdColumn) column).getSqlDataType().getJavaDataType(); if (Java2SqlType.isTimeSQL(javaSQLType)) { return true; } } return false; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.action.AbstractPredefinedAnalysisAction#isAllowed() */ @Override protected boolean isAllowed() { for (IRepositoryNode repositoryNode : getColumns()) { MetadataColumn column = ((MetadataColumnRepositoryObject) repositoryNode.getObject()).getTdColumn(); int javaSQLType = TalendTypeConvert.convertToJDBCType(column.getTalendType()); if (!Java2SqlType.isDateInSQL(javaSQLType)) { return false; } } if (!RepNodeUtils.isValidSelectionFromSameTable(getSelection().toList())) { return false; } return true; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.action.AbstractPredefinedAnalysisAction#preDo() */ @Override protected boolean preDo() { return true; } /** * DOC zqin CreateDateAnalysisAction class global comment. Detailled comment */ public class TimeSliceOptionPage extends WizardPage { private ICheckListener listener; public TimeSliceOptionPage() { super(DefaultMessagesImpl.getString("CreateDateAnalysisAction.createNewAnalysis")); //$NON-NLS-1$ setTitle(DefaultMessagesImpl.getString("CreateDateAnalysisAction.newAnalysis")); //$NON-NLS-1$ setDescription(DefaultMessagesImpl.getString("CreateDateAnalysisAction.addOption")); //$NON-NLS-1$ parameters = IndicatorsFactory.eINSTANCE.createIndicatorParameters(); DateParameters dateParameters = parameters.getDateParameters(); if (dateParameters == null) { dateParameters = IndicatorsFactory.eINSTANCE.createDateParameters(); parameters.setDateParameters(dateParameters); } this.listener = new AbstractForm.ICheckListener() { public void checkPerformed(AbstractForm source) { if (source.isStatusOnError()) { TimeSliceOptionPage.this.setPageComplete(false); setErrorMessage(source.getStatus()); } else { TimeSliceOptionPage.this.setPageComplete(true); setErrorMessage(null); setMessage(source.getStatus(), source.getStatusLevel()); } } }; } public void createControl(Composite parent) { Composite comp = new Composite(parent, SWT.NONE); comp.setLayout(new GridLayout()); comp.setLayoutData(new GridData(GridData.FILL_BOTH)); FreqTimeSliceForm timeSliceForm = new FreqTimeSliceForm(comp, SWT.NONE, parameters); timeSliceForm.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); timeSliceForm.setListener(listener); setControl(comp); } } @Override protected WizardDialog getPredefinedDialog() { AnalysisParameter parameter = new AnalysisParameter(); parameter.setConnectionRepNode(getColumns()[0]); ColumnWizard wizard = (ColumnWizard) WizardFactory.createAnalysisWizard(AnalysisType.MULTIPLE_COLUMN, parameter); wizard.setForcePreviousAndNextButtons(true); TimeSliceOptionPage page = new TimeSliceOptionPage(); wizard.setExtenalPages(new WizardPage[] { page }); return new OpeningHelpWizardDialog(null, wizard, FormEnum.TimeSlicesForm.getHelpHref(), page); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.action.AbstractPredefinedAnalysisAction#getCategoryLabel() */ @Override protected String getCategoryLabel() { return null; } }