// ============================================================================ // // 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.analysis.data.preview; import java.sql.SQLException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.commons.lang.StringUtils; import org.talend.commons.i18n.internal.DefaultMessagesImpl; import org.talend.core.model.metadata.builder.connection.MetadataColumn; import org.talend.cwm.db.connection.DatabaseSQLExecutor; import org.talend.cwm.db.connection.DelimitedFileSQLExecutor; import org.talend.cwm.db.connection.ISQLExecutor; import org.talend.cwm.helper.ConnectionHelper; import org.talend.cwm.relational.TdColumn; import orgomg.cwm.foundation.softwaredeployment.DataManager; import orgomg.cwm.objectmodel.core.ModelElement; import com.sun.istack.internal.logging.Logger; /** * DOC zshen class global comment. Detailled comment */ public class DataPreviewHandler { private DataManager connection = null; final static Logger log = Logger.getLogger(DataPreviewHandler.class); private String dataFilter = StringUtils.EMPTY; public List<Object[]> createPreviewData(ModelElement[] columns, int limit, boolean isRandomData) throws SQLException { // no columns be selected so that no data can be read if (columns == null || columns.length == 0) { return new ArrayList<Object[]>(); } // use ModelElement instead of node to get the data source type directly. // get connection from column[0] boolean isDelimitedFile = false; ModelElement modelElement = columns[0]; if (modelElement instanceof MetadataColumn && !(modelElement instanceof TdColumn)) { isDelimitedFile = true; connection = ConnectionHelper.getTdDataProvider((MetadataColumn) modelElement); } else if (modelElement instanceof TdColumn) { connection = ConnectionHelper.getTdDataProvider((TdColumn) modelElement); } else {// other case it is not support by now log.warning(DefaultMessagesImpl.getString("DataPreviewHandler.UnSupportType")); //$NON-NLS-1$ return new ArrayList<Object[]>(); } ISQLExecutor sqlExecutor = null; if (isDelimitedFile) { sqlExecutor = new DelimitedFileSQLExecutor(); } else {// is database sqlExecutor = new DatabaseSQLExecutor(); } // set limit sqlExecutor.setLimit(limit); sqlExecutor.setShowRandomData(isRandomData); return sqlExecutor.executeQuery(connection, Arrays.asList(columns), dataFilter); } /** * Sets the dataFilter. * * @param dataFilter the dataFilter to set */ public void setDataFilter(String dataFilter) { this.dataFilter = dataFilter; } public DataManager getConnection() { return connection; } }