// ============================================================================ // // Copyright (C) 2006-2012 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.designer.core.ui.editor.process; import org.eclipse.gef.commands.CompoundCommand; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.core.database.EDatabaseTypeName; import org.talend.core.model.components.IComponent; import org.talend.core.model.metadata.IMetadataConnection; import org.talend.core.model.metadata.IMetadataTable; import org.talend.core.model.metadata.MetadataTable; import org.talend.core.model.metadata.builder.ConvertionHelper; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.process.EParameterFieldType; import org.talend.core.model.process.IContext; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.process.INode; import org.talend.core.model.properties.ConnectionItem; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.utils.TalendTextUtils; import org.talend.core.utils.CsvArray; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.ui.editor.cmd.ChangeValuesFromRepository; import org.talend.designer.core.ui.editor.cmd.QueryGuessCommand; import org.talend.designer.core.ui.editor.cmd.RepositoryChangeMetadataCommand; import org.talend.designer.core.ui.editor.nodes.Node; import org.talend.designer.core.ui.editor.properties.controllers.DbInfo; import org.talend.designer.core.ui.editor.properties.controllers.GuessSchemaProcess; import org.talend.designer.runprocess.ProcessorException; import org.talend.repository.UpdateRepositoryUtils; import org.talend.repository.model.ComponentsFactoryProvider; /** * DOC hyWang class global comment. Detailled comment */ public class ConvertRepositoryNodeToProcessNode { private INode node; private String memoSQL; private DbInfo info; private IContext selectedContext; DatabaseConnection databaseConnection; public ConvertRepositoryNodeToProcessNode(ConnectionItem connectionItem, String tableName) { databaseConnection = (DatabaseConnection) connectionItem.getConnection(); IMetadataConnection iMetadataConnection = null; iMetadataConnection = ConvertionHelper.convert(databaseConnection); String dbType = iMetadataConnection.getDbType(); String username = iMetadataConnection.getUsername(); String pwd = iMetadataConnection.getPassword(); String dbVersion = iMetadataConnection.getDbVersionString(); String url = iMetadataConnection.getUrl(); String additionalParams = iMetadataConnection.getAdditionalParams(); if (EDatabaseTypeName.GENERAL_JDBC.getDisplayName().equals(dbType)) { // hywang for 9594 info = new DbInfo(dbType, username, pwd, dbVersion, url, iMetadataConnection.getDriverClass(), iMetadataConnection.getDriverJarPath(), additionalParams); } else { info = new DbInfo(dbType, username, pwd, dbVersion, url, additionalParams); } try { convertToProcessNode(connectionItem, tableName); } catch (ProcessorException e) { ExceptionHandler.process(e); } } public void convertToProcessNode(ConnectionItem connectionItem, String tableName) throws ProcessorException { EDatabaseComponentName name = EDatabaseComponentName.getCorrespondingComponentName(connectionItem, ERepositoryObjectType.METADATA_CONNECTIONS); String componentName = null; componentName = name.getDefaultComponentName(); IComponent dbInputComponent = ComponentsFactoryProvider.getInstance().get(componentName); Process process = new Process(GuessSchemaProcess.getNewmockProperty()); node = new Node(dbInputComponent, process); selectedContext = node.getProcess().getContextManager().getDefaultContext(); // TDI-20011 IMetadataTable table = UpdateRepositoryUtils.getTableByName(connectionItem, tableName); if (table == null) { table = new MetadataTable(); table.setTableName(tableName); table.setLabel(tableName); } IElementParameter propertyParam = ((Node) node).getElementParameterFromField(EParameterFieldType.PROPERTY_TYPE); IElementParameter schemaParam = ((Node) node).getElementParameterFromField(EParameterFieldType.SCHEMA_TYPE); String propertyId = connectionItem.getProperty().getId(); String schema = databaseConnection.getUiSchema(); String dbType = databaseConnection.getDatabaseType(); String value = connectionItem.getProperty().getId() + " - " + table.getLabel(); //$NON-NLS-1$ CompoundCommand cc = new CompoundCommand(); // inital parameters command ChangeValuesFromRepository changeValueCommand = new ChangeValuesFromRepository((Node) node, databaseConnection, propertyParam.getName() + ":" + EParameterName.REPOSITORY_PROPERTY_TYPE.getName(), propertyId); //$NON-NLS-1$ cc.add(changeValueCommand); // change metadata command RepositoryChangeMetadataCommand changeMetadataCommand = new RepositoryChangeMetadataCommand((Node) node, schemaParam.getName() + ":" //$NON-NLS-1$ + EParameterName.REPOSITORY_SCHEMA_TYPE.getName(), value, table, null, null); cc.add(changeMetadataCommand); // guess query command QueryGuessCommand queryGuessCommand = new QueryGuessCommand((Node) node, node.getMetadataList().get(0), schema, dbType, databaseConnection); cc.add(queryGuessCommand); // execute the commands cc.execute(); IElementParameter query = node.getElementParameter("QUERY"); //$NON-NLS-N$ //$NON-NLS-1$ // memoSQL = query.getValue().toString(); String memoSQLTemp = TalendTextUtils.removeQuotesIfExist(memoSQL); if ((memoSQLTemp == null || memoSQLTemp.equals("")) && tableName != null && !tableName.equals("")) { memoSQL = "select * from " + tableName; memoSQL = TalendTextUtils.addSQLQuotes(memoSQL); } } public CsvArray runMockProcess() throws ProcessorException { GuessSchemaProcess gsp = new GuessSchemaProcess(GuessSchemaProcess.getNewmockProperty(), node, selectedContext, memoSQL, info); return gsp.run(); } }