// ============================================================================ // // 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 java.util.ArrayList; import java.util.List; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.ui.dialogs.ElementListSelectionDialog; 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.IndicatorEnumUtils; import org.talend.dataprofiler.core.ui.utils.RepNodeUtils; import org.talend.dataprofiler.core.ui.views.provider.DQRepositoryViewLabelProvider; import org.talend.dataquality.helpers.MetadataHelper; import org.talend.dataquality.indicators.DataminingType; import org.talend.dq.analysis.parameters.AnalysisLabelParameter; import org.talend.dq.nodes.DFColumnRepNode; import org.talend.dq.nodes.DQRepositoryNode; import org.talend.dq.nodes.indicator.type.IndicatorEnum; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.IRepositoryNode.ENodeType; import org.talend.utils.sql.Java2SqlType; import org.talend.utils.sql.TalendTypeConvert; /** * DOC zqin class global comment. Detailled comment */ public class CreateNominalAnalysisAction extends AbstractPredefinedAnalysisAction { private boolean addTextIndicator; public CreateNominalAnalysisAction() { super(DefaultMessagesImpl.getString("CreateNominalAnalysisAction.nominalAnalysis"), null); //$NON-NLS-1$ } @Override public ModelElementIndicator[] getPredefinedColumnIndicator() { IndicatorEnum[] allowedEnumes = IndicatorEnumUtils.getForNominalValuesAnalysis(addTextIndicator); return composePredefinedColumnIndicator(allowedEnumes); } @Override protected boolean isAllowed() { if (!RepNodeUtils.isValidSelectionFromSameTable(getSelection().toList())) { return false; } return true; } @Override protected boolean preDo() { // MOD msjian TDQ-5530 2012-12-20: make the icon and text have the same look&feel as in the DQ repository view. List<DFColumnRepNode> tempList = new ArrayList<DFColumnRepNode>(); addTextIndicator = true; for (IRepositoryNode repositoryNode : getColumns()) { DFColumnRepNode columnNode = new DFColumnRepNode(repositoryNode.getObject(), repositoryNode.getParent(), ENodeType.TDQ_REPOSITORY_ELEMENT, ((DQRepositoryNode) repositoryNode).getProject()); int javaSQLType = TalendTypeConvert.convertToJDBCType(columnNode.getMetadataColumn().getTalendType()); if (!Java2SqlType.isTextInSQL(javaSQLType)) { tempList.add(columnNode); addTextIndicator = false; } } // TDQ-5530~ if (!tempList.isEmpty()) { ElementListSelectionDialog dialog = new ElementListSelectionDialog(null, new DQRepositoryViewLabelProvider()); dialog.setElements(tempList.toArray()); dialog.setTitle(DefaultMessagesImpl.getString("CreateNominalAnalysisAction.dataTypeWarning")); //$NON-NLS-1$ dialog.setMessage(DefaultMessagesImpl.getString("CreateNominalAnalysisAction.string")); //$NON-NLS-1$ dialog.setSize(80, 20); dialog.create(); if (Window.OK == dialog.open()) { // zqin get the column and change their datamining type to "Nominal" // use MetadataHelper for (DFColumnRepNode column : tempList) { MetadataHelper.setDataminingType(DataminingType.NOMINAL, column.getMetadataColumn()); } return true; } else { return false; } } return true; } @Override protected WizardDialog getPredefinedDialog() { return null; } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.action.AbstractPredefinedAnalysisAction#getCategoryLabel() */ @Override protected String getCategoryLabel() { return AnalysisLabelParameter.NOMINAL_VALUES_ANALYSIS; } }