org.talend.dataprofiler.core.service.TOPRepositoryService.java Source code

Java tutorial

Introduction

Here is the source code for org.talend.dataprofiler.core.service.TOPRepositoryService.java

Source

// ============================================================================
//
// Copyright (C) 2006-2017 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.service;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IInputValidator;
import org.eclipse.jface.dialogs.InputDialog;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.navigator.CommonViewer;
import org.talend.commons.exception.BusinessException;
import org.talend.commons.exception.PersistenceException;
import org.talend.core.ITDQRepositoryService;
import org.talend.core.database.EDatabaseTypeName;
import org.talend.core.model.metadata.IMetadataConnection;
import org.talend.core.model.metadata.builder.connection.Connection;
import org.talend.core.model.metadata.builder.connection.DatabaseConnection;
import org.talend.core.model.metadata.builder.connection.DelimitedFileConnection;
import org.talend.core.model.metadata.builder.connection.MDMConnection;
import org.talend.core.model.metadata.builder.connection.MetadataTable;
import org.talend.core.model.metadata.builder.database.JavaSqlFactory;
import org.talend.core.model.properties.ConnectionItem;
import org.talend.core.model.properties.DatabaseConnectionItem;
import org.talend.core.model.properties.Item;
import org.talend.core.model.properties.Property;
import org.talend.core.model.repository.ERepositoryObjectType;
import org.talend.core.model.repository.IRepositoryViewObject;
import org.talend.core.repository.model.ProxyRepositoryFactory;
import org.talend.core.runtime.CoreRuntimePlugin;
import org.talend.cwm.compare.exception.ReloadCompareException;
import org.talend.cwm.compare.factory.ComparisonLevelFactory;
import org.talend.cwm.compare.factory.IComparisonLevel;
import org.talend.cwm.db.connection.ConnectionUtils;
import org.talend.cwm.helper.TaggedValueHelper;
import org.talend.cwm.management.api.SoftwareSystemManager;
import org.talend.cwm.relational.TdExpression;
import org.talend.dataprofiler.core.CorePlugin;
import org.talend.dataprofiler.core.PluginConstant;
import org.talend.dataprofiler.core.helper.WorkspaceResourceHelper;
import org.talend.dataprofiler.core.i18n.internal.DefaultMessagesImpl;
import org.talend.dataprofiler.core.manager.DQStructureManager;
import org.talend.dataprofiler.core.ui.action.actions.CreateHiveOfHCAction;
import org.talend.dataprofiler.core.ui.dialog.message.DeleteModelElementConfirmDialog;
import org.talend.dataprofiler.core.ui.editor.PartListener;
import org.talend.dataprofiler.core.ui.editor.connection.ConnectionEditor;
import org.talend.dataprofiler.core.ui.editor.connection.ConnectionItemEditorInput;
import org.talend.dataprofiler.core.ui.editor.dqrules.BusinessRuleItemEditorInput;
import org.talend.dataprofiler.core.ui.editor.dqrules.DQRuleEditor;
import org.talend.dataprofiler.core.ui.events.EventEnum;
import org.talend.dataprofiler.core.ui.events.EventManager;
import org.talend.dataprofiler.core.ui.events.EventReceiver;
import org.talend.dataprofiler.core.ui.events.SoftwareSystemUpdateEventReceiver;
import org.talend.dataprofiler.core.ui.utils.TableUtils;
import org.talend.dataprofiler.core.ui.utils.WorkbenchUtils;
import org.talend.dataprofiler.core.ui.views.DQRespositoryView;
import org.talend.dataquality.indicators.definition.IndicatorCategory;
import org.talend.dataquality.rules.ParserRule;
import org.talend.dq.CWMPlugin;
import org.talend.dq.dqrule.DqRuleBuilder;
import org.talend.dq.helper.EObjectHelper;
import org.talend.dq.helper.PropertyHelper;
import org.talend.dq.helper.RepositoryNodeHelper;
import org.talend.dq.helper.SqlExplorerUtils;
import org.talend.dq.helper.resourcehelper.DQRuleResourceFileHelper;
import org.talend.dq.indicators.definitions.DefinitionHandler;
import org.talend.dq.nodes.RuleRepNode;
import org.talend.dq.nodes.SourceFileRepNode;
import org.talend.dq.nodes.SourceFileSubFolderNode;
import org.talend.dq.writer.impl.DataProviderWriter;
import org.talend.dq.writer.impl.ElementWriterFactory;
import org.talend.metadata.managment.connection.manager.HiveConnectionManager;
import org.talend.metadata.managment.hive.handler.HiveConnectionHandler;
import org.talend.metadata.managment.utils.MetadataConnectionUtils;
import org.talend.repository.model.IRepositoryNode;
import org.talend.repository.model.RepositoryNode;
import org.talend.resource.EResourceConstant;
import org.talend.resource.ResourceManager;
import org.talend.utils.dates.DateUtils;
import org.talend.utils.sugars.ReturnCode;
import org.talend.utils.sugars.TypedReturnCode;
import orgomg.cwm.objectmodel.core.ModelElement;

/**
 * DOC bZhou class global comment. Detailled comment
 */
public class TOPRepositoryService implements ITDQRepositoryService {

    private static Logger log = Logger.getLogger(TOPRepositoryService.class);

    // after creating the database connection, will open the connection editor when this parameter= false;
    // will not open the connection editor when this parameter=true;
    private boolean noNeedToOpenConnectionEditor = Boolean.FALSE;

    public IViewPart getTDQRespositoryView() {
        return CorePlugin.getDefault().getRepositoryView();
    }

    public void notifySQLExplorer(Item... items) {
        if (items == null) {
            return;
        }

        for (Item item : items) {
            if (item instanceof ConnectionItem) {
                Connection connection = ((ConnectionItem) item).getConnection();
                // MOD xqliu TDQ-5853 2012-07-25 SqlExplorer don't support the connection which has empty username
                String username = JavaSqlFactory.getUsername(connection);
                if (username != null && !"".equals(username.trim())) { //$NON-NLS-1$
                    CWMPlugin.getDefault().addConnetionAliasToSQLPlugin(connection);
                }
            }
        }
    }

    public void openConnectionEditor(Item item) {
        // Added TDQ-7504, TDQ-7770, yyin 20130819: when the db wizard is opened in the match analysis editor, no need
        // to open the db edtior any more.
        if (noNeedToOpenConnectionEditor) {
            return;
        } // ~

        Class<?> clazz = null;
        IEditorInput editorInput = null;
        if (item instanceof ConnectionItem) {
            clazz = ConnectionEditor.class;
            editorInput = new ConnectionItemEditorInput(RepositoryNodeHelper.recursiveFind(item.getProperty()));
        }

        if (editorInput != null && clazz != null
                && CoreRuntimePlugin.getInstance().isDataProfilePerspectiveSelected()) {
            CorePlugin.getDefault().openEditor(editorInput, clazz.getName());
        }
    }

    public void refreshConnectionEditor(Item item) {
        CorePlugin.getDefault().refreshOpenedEditor(item);
    }

    /**
     * Fill MDM connection only.
     */
    public void fillMetadata(ConnectionItem connItem) {
        MetadataConnectionUtils.fillConnectionInformation(connItem);
        // MOD gdbu 2011-7-12 bug : 22598
        MDMConnection mdmConnection = (MDMConnection) connItem.getConnection();
        mdmConnection.setLabel(connItem.getProperty().getLabel() + "");
        mdmConnection.setName(connItem.getProperty().getLabel() + "");
        ElementWriterFactory.getInstance().createDataProviderWriter().save(mdmConnection);
        // ~22598
    }

    public void refresh() {
        CorePlugin.getDefault().refreshWorkSpace();
        // ~ TDQ-5133 mzhao 2012-05-31 when there are many children for a db connection, it's more elegant to collapse
        // the metadata folder when refreshing the tree to save time.
        IRepositoryNode metadataNode = RepositoryNodeHelper.getMetadataFolderNode(EResourceConstant.DB_CONNECTIONS);
        // MOD msjian TUP-274 2012-11-14: avoid NPE of metadataNode
        // getRepositoryView() maybe return null when DqRepository veiw not be opened
        DQRespositoryView repositoryView = CorePlugin.getDefault().getRepositoryView();
        if (repositoryView != null) {
            CommonViewer commonViewer = repositoryView.getCommonViewer();
            if (commonViewer != null) {
                if (metadataNode != null) {
                    commonViewer.collapseToLevel(metadataNode, AbstractTreeViewer.ALL_LEVELS);
                } else {
                    commonViewer.collapseAll();
                }
            }
        }
        // TUP-274~
        // ~ TDQ-5311
        CorePlugin.getDefault().refreshDQView();
    }

    /**
     * ADDED yyin 20120503 TDQ-4959.
     * 
     * @param node
     */
    public void refresh(Object refreshObject) {
        if (refreshObject == null) {
            this.refresh();
            return;
        }
        if (refreshObject instanceof RepositoryNode) {
            CorePlugin.getDefault().refreshWorkSpace();
            CorePlugin.getDefault().refreshDQView(refreshObject);
        } else if (refreshObject instanceof Item) {
            RepositoryNode node = RepositoryNodeHelper.recursiveFind(((Item) refreshObject).getProperty());
            CorePlugin.getDefault().refreshWorkSpace();
            CorePlugin.getDefault().refreshDQView(node);
        } else {
            this.refresh();
        }
    }

    public void initProxyRepository() {
        CorePlugin.getDefault().initProxyRepository();
    }

    public void addPartListener() {
        IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
        // Calculate the extensions to register partListener.
        IPartListener listener = PartListener.getPartListener();
        if (listener != null) {
            activePage.addPartListener(listener);
        }
    }

    public boolean removeAliasInSQLExplorer(IRepositoryNode children) {
        boolean hasDependencyItem = true;
        // MOD klliu 2011-04-28 bug 20204 removing connection is synced to the connection view of SQL explore
        Item item = children.getObject().getProperty().getItem();
        // MOD mzhao filter the connections which is not a type of database.
        if (item != null && item instanceof ConnectionItem) {
            Connection connection = ((ConnectionItem) item).getConnection();
            if (connection instanceof DatabaseConnection || connection instanceof DelimitedFileConnection
                    || connection instanceof MDMConnection) {
                CWMPlugin.getDefault().removeAliasInSQLExplorer(connection);
            }
        }

        return hasDependencyItem;
    }

    public void createParserRuleItem(ArrayList<HashMap<String, Object>> values, String parserRuleName) {
        ParserRule parserRule = null;
        DqRuleBuilder ruleBuilder = new DqRuleBuilder();
        boolean ruleInitialized = ruleBuilder.initializeParserRuleBuilder(parserRuleName);
        if (ruleInitialized) {
            parserRule = ruleBuilder.getParserRule();
        }
        TaggedValueHelper.setValidStatus(true, parserRule);
        for (HashMap<String, Object> expression : values) {
            parserRule.addExpression(expression.get(RULE_NAME).toString(),
                    expression.get(RULE_TYPE) instanceof Integer
                            ? Integer.toString((Integer) expression.get(RULE_TYPE))
                            : expression.get(RULE_TYPE).toString(),
                    expression.get(RULE_VALUE).toString());
        }
        IndicatorCategory ruleIndicatorCategory = DefinitionHandler.getInstance().getDQRuleIndicatorCategory();
        if (ruleIndicatorCategory != null && !parserRule.getCategories().contains(ruleIndicatorCategory)) {
            parserRule.getCategories().add(ruleIndicatorCategory);
        }
        IFolder folder = ResourceManager.getRulesParserFolder();
        TypedReturnCode<Object> returnObject = ElementWriterFactory.getInstance().createdRuleWriter()
                .create(parserRule, folder);
        Object object = returnObject.getObject();

        RuleRepNode parserRuleNode = RepositoryNodeHelper.recursiveFindRuleParser(parserRule);
        BusinessRuleItemEditorInput parserRuleEditorInput = new BusinessRuleItemEditorInput(parserRuleNode);
        CorePlugin.getDefault().openEditor(parserRuleEditorInput, DQRuleEditor.class.getName());
        refresh(object);
    }

    public List<Map<String, String>> getPaserRulesFromRules(Object parser) {
        if (parser != null && parser instanceof ParserRule) {
            List<Map<String, String>> ruleValues = new ArrayList<Map<String, String>>();
            for (TdExpression exp : ((ParserRule) parser).getExpression()) {
                Map<String, String> pr = new HashMap<String, String>();
                // MOD yyi 2011-08-12 TDQ-1698:avoid importing null value
                pr.put(RULE_NAME, null == exp.getName() ? StringUtils.EMPTY : exp.getName());
                pr.put(RULE_VALUE, null == exp.getBody() ? StringUtils.EMPTY : exp.getBody());
                pr.put(RULE_TYPE, null == exp.getLanguage() ? StringUtils.EMPTY : exp.getLanguage().toUpperCase());
                ruleValues.add(pr);
            }
            return ruleValues;
        }
        return null;
    }

    /*
     * Added yyi 2011-08-04 TDQ-3186
     * 
     * @see org.talend.core.ITDQRepositoryService#getPaserRulesFromResources(java.lang.Object[])
     */
    public List<Map<String, String>> getPaserRulesFromResources(Object[] rules) {
        List<Map<String, String>> ruleValues = new ArrayList<Map<String, String>>();
        for (Object rule : rules) {
            if (rule instanceof IFile) {
                ParserRule parserRule = (ParserRule) DQRuleResourceFileHelper.getInstance()
                        .findDQRule((IFile) rule);
                ruleValues.addAll(getPaserRulesFromRules(parserRule));
            }
        }
        return ruleValues;
    }

    /**
     * 
     * Comment method "reloadDatabase".
     * 
     * @param connectionItem
     * @deprecated instead of it by TDQCompareService.reloadDatabase
     */
    @Deprecated
    public ReturnCode reloadDatabase(ConnectionItem connectionItem) {
        ReturnCode retCode = new ReturnCode(Boolean.TRUE);
        Connection conn = connectionItem.getConnection();
        try {
            if (conn instanceof DatabaseConnection) {
                List<ModelElement> dependencyClients = EObjectHelper.getDependencyClients(conn);
                if (!(dependencyClients == null || dependencyClients.isEmpty())) {
                    int isOk = DeleteModelElementConfirmDialog.showElementImpactConfirmDialog(null,
                            new ModelElement[] { conn },
                            DefaultMessagesImpl.getString("TOPRepositoryService.dependcyTile"), //$NON-NLS-1$
                            DefaultMessagesImpl.getString("TOPRepositoryService.dependcyMessage", conn.getLabel())); //$NON-NLS-1$
                    if (isOk != Dialog.OK) {
                        retCode.setOk(Boolean.FALSE);
                        retCode.setMessage("The user canceled the operation!"); //$NON-NLS-1$
                        return retCode;
                    }
                }

                final IComparisonLevel creatComparisonLevel = ComparisonLevelFactory.creatComparisonLevel(conn);
                Connection newConnection = creatComparisonLevel.reloadCurrentLevelElement();

                // update the sql explore.
                Property property = PropertyHelper.getProperty(newConnection);
                if (property != null) {
                    Item newItem = property.getItem();
                    if (newItem != null) {
                        CWMPlugin.getDefault().updateConnetionAliasByName(newConnection, newConnection.getLabel());
                        // notifySQLExplorer(newItem);
                    }
                }
                // update the related analyses.
                WorkbenchUtils.impactExistingAnalyses(newConnection);
            }
        } catch (ReloadCompareException e) {
            log.error(e, e);
            retCode.setOk(Boolean.FALSE);
            retCode.setMessage(e.getMessage());
        } catch (PartInitException e) {
            log.error(e, e);
            retCode.setOk(Boolean.FALSE);
            retCode.setMessage(e.getMessage());
        }
        return retCode;
    }

    public void updateImpactOnAnalysis(ConnectionItem connectionItem) {
        try {
            if (connectionItem == null) {
                return;
            }
            Connection connection = connectionItem.getConnection();
            List<ModelElement> clientDependencys = EObjectHelper.getDependencyClients(connection);
            if (clientDependencys != null && clientDependencys.size() > 0) {
                WorkbenchUtils.impactExistingAnalyses(connection);
                IRepositoryNode node = RepositoryNodeHelper.recursiveFind(connection);
                if (node != null) {
                    CorePlugin.getDefault().refreshDQView(node);
                }
            }

        } catch (PartInitException e) {
            log.error(e, e);
        }
    }

    public void reloadMetadataOfDelimitedFile(MetadataTable newMetadataTable) throws BusinessException {
        WorkbenchUtils.reloadMetadataOfDelimitedFile(newMetadataTable);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#confirmUpdateAnalysis(org.talend.core.model.properties.ConnectionItem)
     */
    public boolean confirmUpdateAnalysis(ConnectionItem connectionItem) {
        // optimize code, just open an dialog,don't need to judge if has dependce in here.
        if (MessageDialog.openQuestion(null, DefaultMessagesImpl.getString("TOPRepositoryService.dependcyTile"), //$NON-NLS-1$
                DefaultMessagesImpl.getString("TOPRepositoryService.propgateAnalyses", connectionItem.getProperty() //$NON-NLS-1$
                        .getLabel()))) {
            return true;
        }
        return false;
    }

    public boolean hasClientDependences(ConnectionItem connItem) {
        if (connItem != null) {
            Connection connection = connItem.getConnection();
            if (connection != null) {
                List<ModelElement> clientDependences = EObjectHelper.getDependencyClients(connection);
                if (clientDependences != null && !clientDependences.isEmpty()) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * Comment method "confimDelete".
     * 
     * @param deleteObject which you want to delete
     * @return SWT.OK or SWT.Cancel
     */
    public int confimDelete(IRepositoryViewObject deleteObject) {
        Shell workbenchShell = CorePlugin.getDefault().getWorkbench().getActiveWorkbenchWindow().getShell();
        Property deleteProperty = deleteObject.getProperty();
        ModelElement deleteModelElement = PropertyHelper.getModelElement(deleteProperty);
        List<ModelElement> dependencyElements = EObjectHelper.getDependencyClients(deleteObject);
        String lable = deleteProperty.getDisplayName() == null ? PluginConstant.EMPTY_STRING
                : deleteProperty.getDisplayName();
        String dialogTitle = DefaultMessagesImpl.getString("DeleteModelElementConfirmDialog.confirmResourceDelete");//$NON-NLS-1$
        String dialogMessage = DefaultMessagesImpl.getString("DQDeleteAction.dependencyByOther", lable);//$NON-NLS-1$
        return DeleteModelElementConfirmDialog.showConfirmDialog(workbenchShell, deleteModelElement,
                dependencyElements.toArray(new ModelElement[dependencyElements.size()]), dialogTitle,
                dialogMessage);
    }

    /**
     * Comment method "getInputDialog".
     * 
     * @param get input dialog
     * @return inputDialog
     */
    public InputDialog getInputDialog(final Item newItem) {
        Shell parentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
        String dialogTitle = DefaultMessagesImpl.getString("TOPRepositoryService.InputDialog.Title");//$NON-NLS-1$
        String dialogMessage = DefaultMessagesImpl.getString("TOPRepositoryService.InputDialog.Message");//$NON-NLS-1$
        final InputDialog inputDialog = new InputDialog(parentShell, dialogTitle, dialogMessage,
                newItem.getProperty().getLabel()
                        + DateUtils.formatTimeStamp(DateUtils.PATTERN_6, System.currentTimeMillis()),
                new IInputValidator() {

                    public String isValid(String newText) {
                        String returnStr = null;
                        Item item = newItem;
                        ERepositoryObjectType type = ERepositoryObjectType.getItemType(item);
                        // String pattern = RepositoryConstants.getPattern(type);
                        String pattern = "[_A-Za-z0-9-][a-zA-Z0-9\\\\.\\\\-_(), ]*";//$NON-NLS-1$
                        boolean matches = Pattern.matches(pattern, newText);
                        boolean nameAvailable = false;
                        try {
                            List<IRepositoryViewObject> listExistingObjects = ProxyRepositoryFactory.getInstance()
                                    .getAll(type, true, false);
                            nameAvailable = ProxyRepositoryFactory.getInstance().isNameAvailable(item, newText,
                                    listExistingObjects);
                        } catch (PersistenceException e) {
                            log.error(e, e);
                            return e.getMessage();
                        }
                        if (!matches) {
                            returnStr = DefaultMessagesImpl
                                    .getString("TOPRepositoryService.InputDialog.ErrorMessage1");//$NON-NLS-1$
                        } else if (!nameAvailable) {
                            returnStr = DefaultMessagesImpl
                                    .getString("TOPRepositoryService.InputDialog.ErrorMessage2");//$NON-NLS-1$
                        }
                        return returnStr;
                    }
                });
        return inputDialog;
    }

    /**
     * Comment method "changeElementName".
     * 
     * @param item the item which will be changed
     * @param newName
     * 
     */
    public void changeElementName(Item item, String newName) {
        Property property = item.getProperty();
        PropertyHelper.changeName(property, newName);
    }

    /*
     * (non-Jsdoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#sourceFileOpening(org.talend.repository.model.RepositoryNode)
     */
    public boolean sourceFileOpening(RepositoryNode node) {
        boolean result = false;
        if (node instanceof SourceFileRepNode) {
            result = WorkspaceResourceHelper.checkSourceFileNodeOpening(node).isOk();
        } else if (node instanceof SourceFileSubFolderNode) {
            result = WorkspaceResourceHelper.checkSourceFileSubFolderNodeOpening(node).isOk();
        }
        return result;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#checkUsernameBeforeSaveConnection(org.talend.core.model.properties.
     * ConnectionItem)
     */
    public void checkUsernameBeforeSaveConnection(ConnectionItem connectionItem) {
        Connection connection = connectionItem.getConnection();
        ConnectionUtils.checkUsernameBeforeSaveConnection4Sqlite(connection);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#removeSoftWareSystem(org.talend.repository.model.IRepositoryNode)
     */
    @Deprecated
    public boolean removeSoftWareSystem(IRepositoryNode children) {
        Item item = children.getObject().getProperty().getItem();
        if (item != null && item instanceof ConnectionItem) {
            return SoftwareSystemManager.getInstance().cleanSoftWareSystem(((ConnectionItem) item).getConnection());
        }
        return false;
    }

    /**
     * TDQ-6166,Add this function for init all connections in DataExplorer perspective.
     */
    public void initAllConnectionsToSQLExplorer() {
        SqlExplorerUtils.getDefault().initAllConnectionsToSQLExplorer();
    }

    public void saveConnectionWithDependency(ConnectionItem connectionItem) {
        DataProviderWriter dataProviderWriter = ElementWriterFactory.getInstance().createDataProviderWriter();
        dataProviderWriter.save(connectionItem, true);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#refreshCurrentAnalysisEditor()
     */
    public void refreshCurrentAnalysisEditor(ConnectionItem connectionItem) {
        WorkbenchUtils.nodifyDependedAnalysis(connectionItem);
        // WorkbenchUtils.refreshCurrentAnalysisEditor();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#refreshCurrentAnalysisAndConnectionEditor()
     */
    @Deprecated
    public void refreshCurrentAnalysisAndConnectionEditor() {
        WorkbenchUtils.refreshCurrentAnalysisAndConnectionEditor();

    } /*
       * (non-Javadoc)
       * 
       * @see
       * org.talend.core.ITDQRepositoryService#createHiveConnection(org.talend.core.model.metadata.IMetadataConnection)
       */

    public java.sql.Connection createHiveConnection(IMetadataConnection metadataConnection) {
        java.sql.Connection connection = null;
        if (metadataConnection != null
                && EDatabaseTypeName.HIVE.getXmlName().equalsIgnoreCase(metadataConnection.getDbType())) {
            try {

                HiveConnectionHandler hiveConnHandler = HiveConnectionManager.getInstance()
                        .createHandler(metadataConnection);
                connection = hiveConnHandler.createHiveConnection();
            } catch (ClassNotFoundException e) {
                log.error(e);
            } catch (InstantiationException e) {
                log.error(e);
            } catch (IllegalAccessException e) {
                log.error(e);
            } catch (SQLException e) {
                log.error(e);
            }
        }
        return connection;
    }

    /**
     * judge if the related editor is opened.
     **/
    public boolean isDQEditorOpened(Item item) {
        if (item != null) {
            boolean hasOpened = CorePlugin.getDefault().itemIsOpening(item, false);
            if (hasOpened) {
                return true;
            }
        }

        return false;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#addSoftwareSystemUpdateListener()
     */
    public void addSoftwareSystemUpdateListener() {
        EventReceiver softwareSystemUpdateEventReceiver = new SoftwareSystemUpdateEventReceiver();
        EventManager.getInstance().register(EventEnum.DQ_SOFTWARESYSTEM_UPDATE.name(),
                EventEnum.DQ_SOFTWARESYSTEM_UPDATE, softwareSystemUpdateEventReceiver);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#publishSoftwareSystemUpdateEvent()
     */
    public void publishSoftwareSystemUpdateEvent(DatabaseConnection databaseConnection) {
        EventManager.getInstance().publish(EventEnum.DQ_SOFTWARESYSTEM_UPDATE.name(),
                EventEnum.DQ_SOFTWARESYSTEM_UPDATE, databaseConnection);
    }

    public void setIsOpenConnectionEditorAfterCreate(boolean noNeedToOpenConnectionEditor) {
        this.noNeedToOpenConnectionEditor = noNeedToOpenConnectionEditor;
    }

    public void refreshTableWithResult(ModelElement analysis, List<Object[]> result) {
        EventManager.getInstance().publish(analysis, EventEnum.DQ_MATCH_ANALYSIS_REFRESH_WITH_RESULT, result);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#updateAliasInSQLExplorer(java.sql.Connection, java.lang.String)
     */
    public void updateAliasInSQLExplorer(ConnectionItem connectionItem, String oldConnName) {
        Connection connection = connectionItem.getConnection();
        CWMPlugin.getDefault().updateConnetionAliasByName(connection, oldConnName);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#getAllDataProviders()
     */
    public Collection<Connection> getAllDataProviders() {
        return CorePlugin.getDefault().getAllDataProviders();
    }

    public void publishDynamicEvent(ModelElement indicator, Object value) {
        EventManager.getInstance().publish(indicator, EventEnum.DQ_DYMANIC_CHART, value);
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#createFile(java.lang.String, org.eclipse.core.runtime.IPath,
     * java.lang.String, java.lang.String)
     */
    public Item createFile(String content, IPath path, String label, String extension) {
        Item item = DQStructureManager.getInstance().createSourceFileItem(content, path, label, extension);
        // Added TDQ-7532, 20130719 yyin: to lock the editor when creating the sql file from "preview table"
        ProxyRepositoryFactory.getInstance().isEditableAndLockIfPossible(item);// ~
        CorePlugin.getDefault()
                .refreshDQView(RepositoryNodeHelper.getLibrariesFolderNode(EResourceConstant.SOURCE_FILES));
        return item;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#ChangePerspectiveAction(java.lang.String)
     */
    public void changePerspectiveAction(String perspectiveId) {
        new org.talend.dataprofiler.core.ui.perspective.ChangePerspectiveAction(perspectiveId).run();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.talend.core.ITDQRepositoryService#createHive(org.talend.repository.model.RepositoryNode)
     */
    public ConnectionItem createHive(RepositoryNode currentNode) {
        // to open the wizard: create hive
        CreateHiveOfHCAction createHive = new CreateHiveOfHCAction(currentNode.getParent().getParent());
        createHive.run();
        return createHive.getConnectionItem();
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.talend.core.ITDQRepositoryService#reloadTableList(org.talend.core.model.properties.DatabaseConnectionItem)
     */
    public void reloadTableList(final DatabaseConnectionItem hiveConnectionItem2) {
        IWorkspace workspace = ResourcesPlugin.getWorkspace();

        IWorkspaceRunnable operation = new IWorkspaceRunnable() {

            public void run(IProgressMonitor monitor) throws CoreException {

                RepositoryNode tableFolder = TableUtils.getTableFolder(hiveConnectionItem2);
                if (tableFolder != null) {
                    IComparisonLevel creatComparisonLevel = ComparisonLevelFactory
                            .creatComparisonLevel(tableFolder);
                    try {
                        creatComparisonLevel.reloadCurrentLevelElement();
                    } catch (ReloadCompareException e) {
                        log.error(e, e);
                    }
                    CorePlugin.getDefault().refreshDQView(tableFolder);
                }
            }

        };
        try {
            workspace.run(operation, null);
        } catch (CoreException e) {
            log.error(e, e);
        }
    }

}