// ============================================================================ // // 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.helper; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.EList; import org.talend.core.model.metadata.builder.connection.Connection; import org.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.core.model.metadata.builder.connection.MetadataTable; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.properties.Property; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.repository.ISubRepositoryObject; import org.talend.core.repository.model.repositoryObject.MetadataColumnRepositoryObject; import org.talend.cwm.helper.ColumnHelper; import org.talend.cwm.relational.TdSqlDataType; import org.talend.dataprofiler.core.PluginConstant; import org.talend.dataprofiler.core.model.ColumnIndicator; import org.talend.dataprofiler.core.model.DelimitedFileIndicator; import org.talend.dataprofiler.core.model.ModelElementIndicator; import org.talend.dataprofiler.core.model.impl.ColumnIndicatorImpl; import org.talend.dataprofiler.core.model.impl.DelimitedFileIndicatorImpl; import org.talend.dataprofiler.core.ui.editor.preview.ColumnIndicatorUnit; import org.talend.dataprofiler.core.ui.editor.preview.IndicatorUnit; import org.talend.dq.nodes.DBColumnRepNode; import org.talend.dq.nodes.DFColumnRepNode; import org.talend.repository.model.IRepositoryNode; import org.talend.utils.sql.TalendTypeConvert; import orgomg.cwm.objectmodel.core.ModelElement; /** * DOC xqliu class global comment. Detailled comment */ public final class ModelElementIndicatorHelper { private ModelElementIndicatorHelper() { } public static final ModelElementIndicator createModelElementIndicator(IRepositoryNode node) { if (node != null) { if (node instanceof DBColumnRepNode) { return createColumnIndicator(node); } else if (node instanceof DFColumnRepNode) { return createDFColumnIndicator(node); } } return null; } public static final ColumnIndicator createColumnIndicator(IRepositoryNode repositoryNode) { return new ColumnIndicatorImpl(repositoryNode); } public static final DelimitedFileIndicator createDFColumnIndicator(IRepositoryNode reposObj) { return new DelimitedFileIndicatorImpl(reposObj); } /** * * Convert from ModelElementIndicators to ModelElement * * @param ModelElementIndicators * @return */ public static ModelElement[] getModelElementFromMEIndicator(ModelElementIndicator[] ModelElementIndicators) { if (ModelElementIndicators == null) { return new ModelElement[0]; } ModelElement[] selectedColumns = new ModelElement[ModelElementIndicators.length]; int index = 0; for (ModelElementIndicator modelElemIndi : ModelElementIndicators) { IRepositoryViewObject currentObject = modelElemIndi.getModelElementRepositoryNode().getObject(); if (ISubRepositoryObject.class.isInstance(currentObject)) { selectedColumns[index++] = ((ISubRepositoryObject) currentObject).getModelElement(); } } return selectedColumns; } /** * * Check whether parameters are come from same table in the database * * @param ModelElementIndicators * @return true it is come from same table else it is not */ public static boolean checkSameTable(ModelElementIndicator[] ModelElementIndicators) { ModelElement[] modelElements = getModelElementFromMEIndicator(ModelElementIndicators); return ColumnHelper.checkSameTable(modelElements); } /** * * * @deprecated * * use {@link #switchColumnIndicator(ColumnIndicatorUnit)} instead of it * @param indicatorUnit * @return */ @Deprecated public static final ColumnIndicator switchColumnIndicator(IndicatorUnit indicatorUnit) { if (indicatorUnit instanceof ColumnIndicatorUnit) { return switchColumnIndicator((ColumnIndicatorUnit) indicatorUnit); } return null; } /** * * Get columns from modelElementIndicators * * @param modelElementIndicators * @return */ public static final List<MetadataColumn> getColumns(ModelElementIndicator[] modelElementIndicators) { List<MetadataColumn> columns = new ArrayList<MetadataColumn>(); for (ModelElementIndicator modelElementIndicator : modelElementIndicators) { ColumnIndicator switchColumnIndicator = switchColumnIndicator(modelElementIndicator); if (switchColumnIndicator == null) { continue; } columns.add(switchColumnIndicator.getTdColumn()); } return columns; } /** * * Get column from modelElementIndicator * * @param modelElementIndicator * @return MetadataColumn if convert is normal else return null */ public static final MetadataColumn getColumn(ModelElementIndicator modelElementIndicator) { if (modelElementIndicator == null) { return null; } ColumnIndicator switchColumnIndicator = switchColumnIndicator(modelElementIndicator); if (switchColumnIndicator != null) { return switchColumnIndicator.getTdColumn(); } // TDQ-10198: support Delimited File connection column DelimitedFileIndicator switchDelimitedFileIndicator = switchDelimitedFileIndicator(modelElementIndicator); if (switchDelimitedFileIndicator != null) { return switchDelimitedFileIndicator.getMetadataColumn(); } return null; } /** * * get ColumnIndicator from columnIndicatorUnit * * @param indicatorUnit * @return */ public static final ColumnIndicator switchColumnIndicator(ColumnIndicatorUnit indicatorUnit) { if (indicatorUnit.isColumn()) { return (ColumnIndicator) indicatorUnit.getModelElementIndicator(); } return null; } /** * * get ColumnIndicator from ModelElementIndicator * * @param indicatorUnit * @return */ public static final ColumnIndicator switchColumnIndicator(ModelElementIndicator indicator) { if (indicator instanceof ColumnIndicator) { return (ColumnIndicator) indicator; } return null; } /** * * get DelimitedFileIndicator from ModelElementIndicator * * @param indicatorUnit * @return */ public static final DelimitedFileIndicator switchDelimitedFileIndicator(ModelElementIndicator indicator) { if (indicator instanceof DelimitedFileIndicator) { return (DelimitedFileIndicator) indicator; } return null; } /** * * get Connection from ModelElementIndicator * * @param indicator * @return */ public static final Connection getTdDataProvider(ModelElementIndicator indicator) { Property property = indicator.getModelElementRepositoryNode().getObject().getProperty(); if (property != null && property.getItem() instanceof ConnectionItem) { return ((ConnectionItem) property.getItem()).getConnection(); } return null; } /** * * Get column names from DelimitedFileIndicator * * @param indicator * @return */ public static final List<String> getColumnNameList(DelimitedFileIndicator indicator) { try { EList<MetadataColumn> columns = indicator.getMetadataColumn().getTable().getColumns(); List<String> columnNames = new ArrayList<String>(); for (MetadataColumn columnsElement : columns) { columnNames.add(columnsElement.getName()); } return columnNames; } catch (NullPointerException e) { return null; } } /** * DOC xqliu Comment method "getModelElementDisplayName". * * @param meIndicator * @return */ public static final String getModelElementDisplayName(ModelElementIndicator meIndicator) { String meName = meIndicator.getElementName(); String typeName = "";//$NON-NLS-1$ if (meIndicator instanceof ColumnIndicator) { // MOD scorreia 2010-10-20 bug 16403 avoid NPE here TdSqlDataType sqlDataType = ((ColumnIndicator) meIndicator).getTdColumn().getSqlDataType(); typeName = sqlDataType != null ? sqlDataType.getName() : "unknown";//$NON-NLS-1$ } else if (meIndicator instanceof DelimitedFileIndicatorImpl) { MetadataColumn mColumn = ((DelimitedFileIndicatorImpl) meIndicator).getMetadataColumn(); typeName = TalendTypeConvert.convertToJavaType(mColumn.getTalendType()); } return meName != null ? meName + PluginConstant.SPACE_STRING + PluginConstant.PARENTHESIS_LEFT + typeName + PluginConstant.PARENTHESIS_RIGHT : "null";//$NON-NLS-1$ } /** * Check whether repViewObj and modelElementIndicator is come from same table * * @param repViewObj * @param modelElementIndicators */ public static boolean checkSameTable(MetadataColumnRepositoryObject repViewObj, ModelElementIndicator modelElementIndicator) { if (modelElementIndicator == null || repViewObj == null) { return false; } MetadataColumn newColumn = repViewObj.getTdColumn(); MetadataColumn Oldcolumn = getColumn(modelElementIndicator); if (newColumn == null || Oldcolumn == null) { return false; } MetadataTable newMetadataTable = ColumnHelper.getColumnOwnerAsMetadataTable(newColumn); MetadataTable oldMetadataTable = ColumnHelper.getColumnOwnerAsMetadataTable(Oldcolumn); if (newMetadataTable == null || oldMetadataTable == null) { return false; } if (newMetadataTable.equals(oldMetadataTable)) { return true; } return false; } }