// ============================================================================ // // 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.wizard.analysis.column; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.window.Window; import org.eclipse.ui.dialogs.ElementListSelectionDialog; import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl; 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.nodes.ColumnRepNode; import org.talend.dq.nodes.DFColumnRepNode; import org.talend.dq.nodes.DQRepositoryNode; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.IRepositoryNode.ENodeType; import org.talend.repository.model.RepositoryNode; import org.talend.utils.sql.Java2SqlType; import org.talend.utils.sql.TalendTypeConvert; /** * this select data page only used for Nominal Values analysis * */ public class NominalValuesDPSelectionPage extends ColumnAnalysisDOSelectionPage { protected static Logger log = Logger.getLogger(NominalValuesDPSelectionPage.class); private boolean addTextIndicator = true; /** * Getter for addTextIndicator. * * @return the addTextIndicator */ public boolean isAddTextIndicator() { return this.addTextIndicator; } /** * Sets the addTextIndicator. * * @param addTextIndicator the addTextIndicator to set */ public void setAddTextIndicator(boolean addTextIndicator) { this.addTextIndicator = addTextIndicator; } public NominalValuesDPSelectionPage() { super(); setPageComplete(false); } /* * (non-Javadoc) * * @see org.talend.dataprofiler.core.ui.wizard.analysis.column.ColumnAnalysisDOSelectionPage#addListeners() */ @Override protected void addListeners() { addListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { Object object = ((IStructuredSelection) event.getSelection()).getFirstElement(); if (object instanceof ColumnRepNode) { RepositoryNode repositoryNode = (ColumnRepNode) object; DFColumnRepNode columnNode = new DFColumnRepNode(repositoryNode.getObject(), repositoryNode.getParent(), ENodeType.TDQ_REPOSITORY_ELEMENT, ((DQRepositoryNode) repositoryNode).getProject()); int javaSQLType = TalendTypeConvert.convertToJDBCType(columnNode.getMetadataColumn().getTalendType()); // MetadataColumn column = ((MetadataColumnRepositoryObject) // repositoryNode.getObject()).getTdColumn(); // int javaSQLType = TalendTypeConvert.convertToJDBCType(column.getTalendType()); if (Java2SqlType.isTextInSQL(javaSQLType)) { advanceToNextPageOrFinish(); } else { List<DFColumnRepNode> tempList = new ArrayList<DFColumnRepNode>(); tempList.add(columnNode); setAddTextIndicator(false); 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 col : tempList) { MetadataHelper.setDataminingType(DataminingType.NOMINAL, col.getMetadataColumn()); } advanceToNextPageOrFinish(); } } } } } }); addListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { try { Object object = ((IStructuredSelection) event.getSelection()).getFirstElement(); nodes = new ArrayList<IRepositoryNode>(); if (object instanceof ColumnRepNode) { List<IRepositoryNode> list = ((IStructuredSelection) event.getSelection()).toList(); nodes.addAll(list); if (nodes.size() == 0 || RepNodeUtils.isValidSelectionFromSameTable(nodes)) { List<DFColumnRepNode> tempList = new ArrayList<DFColumnRepNode>(); for (IRepositoryNode obj : nodes) { if (object instanceof ColumnRepNode) { RepositoryNode repositoryNode = (ColumnRepNode) obj; 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); setAddTextIndicator(false); } } } 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" for (DFColumnRepNode column : tempList) { MetadataHelper.setDataminingType(DataminingType.NOMINAL, column.getMetadataColumn()); } setPageComplete(true); setMessage(chooseConnStr); } } else { setPageComplete(true); setMessage(chooseConnStr); } } else { setPageComplete(false); setMessage(DefaultMessagesImpl.getString("ColumnAnalysisDOSelectionPage.selectColumnError1"), ERROR); //$NON-NLS-1$ } } else { setPageComplete(false); setMessage(chooseConnStr); } } catch (Exception e) { log.error(e, e); } } }); } }