// ============================================================================ // // 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.repository; import java.beans.PropertyChangeEvent; import java.security.NoSuchAlgorithmException; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.ArrayUtils; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.talend.commons.exception.BusinessException; import org.talend.commons.exception.LoginException; import org.talend.commons.exception.PersistenceException; import org.talend.commons.exception.SystemException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.commons.ui.runtime.exception.MessageBoxExceptionHandler; import org.talend.commons.utils.PasswordHelper; import org.talend.commons.utils.system.EclipseCommandLine; import org.talend.core.CorePlugin; import org.talend.core.GlobalServiceRegister; import org.talend.core.PluginChecker; import org.talend.core.context.Context; import org.talend.core.context.RepositoryContext; import org.talend.core.model.components.ComponentUtilities; import org.talend.core.model.components.IComponentsFactory; import org.talend.core.model.general.ConnectionBean; import org.talend.core.model.general.Project; import org.talend.core.model.metadata.IMetadataConnection; import org.talend.core.model.metadata.builder.connection.DatabaseConnection; import org.talend.core.model.metadata.builder.connection.MetadataTable; import org.talend.core.model.metadata.builder.connection.SAPConnection; import org.talend.core.model.metadata.builder.connection.SAPFunctionUnit; import org.talend.core.model.migration.IMigrationToolService; import org.talend.core.model.process.IContextManager; import org.talend.core.model.process.IContextParameter; import org.talend.core.model.process.IElementParameter; import org.talend.core.model.process.INode; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.RulesItem; import org.talend.core.model.properties.SAPConnectionItem; import org.talend.core.model.properties.SQLPatternItem; import org.talend.core.model.properties.User; import org.talend.core.model.properties.impl.PropertiesFactoryImpl; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.model.repository.IRepositoryViewObject; import org.talend.core.model.repository.SVNConstant; import org.talend.core.model.utils.RepositoryManagerHelper; import org.talend.core.prefs.PreferenceManipulator; import org.talend.core.repository.CoreRepositoryPlugin; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.repository.model.RepositoryFactoryProvider; import org.talend.core.repository.model.ResourceModelUtils; import org.talend.core.repository.utils.ProjectHelper; import org.talend.core.repository.utils.RepositoryPathProvider; import org.talend.core.ui.DisableLanguageActions; import org.talend.core.ui.IRulesProviderService; import org.talend.core.ui.branding.IBrandingService; import org.talend.cwm.helper.ModelElementHelper; import org.talend.designer.runprocess.IRunProcessService; import org.talend.repository.model.ComponentsFactoryProvider; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.IRepositoryNode; import org.talend.repository.model.IRepositoryService; import org.talend.repository.model.ProjectNodeHelper; import org.talend.repository.model.ProjectRepositoryNode; import org.talend.repository.model.RepositoryNode; import org.talend.repository.model.RepositoryNodeUtilities; import org.talend.repository.model.SalesforceModuleRepositoryObject; import org.talend.repository.plugin.integration.BindingActions; import org.talend.repository.plugin.integration.SwitchProjectAction; import org.talend.repository.ui.actions.AContextualAction; import org.talend.repository.ui.actions.routines.CreateRoutineAction; import org.talend.repository.ui.actions.sqlpattern.CreateSqlpatternAction; import org.talend.repository.ui.actions.sqlpattern.EditSqlpatternAction; import org.talend.repository.ui.dialog.ContextRepositoryReviewDialog; import org.talend.repository.ui.login.LoginDialog; import org.talend.repository.ui.login.connections.ConnectionUserPerReader; import org.talend.repository.ui.utils.ColumnNameValidator; import org.talend.repository.ui.utils.DBConnectionContextUtils; import org.talend.repository.ui.views.IRepositoryView; ; /** * DOC qian class global comment. Detailled comment <br/> * * $Id: talend-code-templates.xml 1 2006-09-29 17:06:40 +0000 (星期五, 29 九月 2006) nrousseau $ * */ public class RepositoryService implements IRepositoryService { private static final String PERSPECTIVE_DI_ID = "org.talend.rcp.perspective"; //$NON-NLS-1$ /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#getComponentsFactory() */ public IComponentsFactory getComponentsFactory() { return ComponentsFactoryProvider.getInstance(); } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#getPathFileName(java.lang.String, java.lang.String) */ public IPath getPathFileName(String folderName, String fileName) { return RepositoryPathProvider.getPathFileName(folderName, fileName); } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#getProxyRepositoryFactory() */ public IProxyRepositoryFactory getProxyRepositoryFactory() { return ProxyRepositoryFactory.getInstance(); } public IPath getRepositoryPath(IRepositoryNode node) { return RepositoryNodeUtilities.getPath((RepositoryNode) node); } /* * (non-Javadoc) * * @seeorg.talend.repository.model.IRepositoryService#registerRepositoryChangedListener(org.talend.repository. * IRepositoryChangedListener) */ public void registerRepositoryChangedListener(IRepositoryChangedListener listener) { CoreRepositoryPlugin.getDefault().registerRepositoryChangedListener(listener); } /* * (non-Javadoc) * * @see * org.talend.repository.model.IRepositoryService#registerRepositoryChangedListenerAsFirst(org.talend.repository * .IRepositoryChangedListener) */ public void registerRepositoryChangedListenerAsFirst(IRepositoryChangedListener listener) { CoreRepositoryPlugin.getDefault().registerRepositoryChangedListenerAsFirst(listener); } /* * (non-Javadoc) * * @seeorg.talend.repository.model.IRepositoryService#removeRepositoryChangedListener(org.talend.repository. * IRepositoryChangedListener) */ public void removeRepositoryChangedListener(IRepositoryChangedListener listener) { CoreRepositoryPlugin.getDefault().removeRepositoryChangedListener(listener); } /* * (non-Javadoc) * * @see * org.talend.repository.model.IRepositoryService#repositoryChanged(org.talend.repository.RepositoryElementDelta) */ public void repositoryChanged(IRepositoryElementDelta delta) { CoreRepositoryPlugin.getDefault().repositoryChanged(delta); } // This method is used for the Action in RepositoryView to synchronize the sqlBuilder. // see DataBaseWizard, DatabaseTableWizard, AContextualAction public void notifySQLBuilder(List<IRepositoryViewObject> list) { IRepositoryChangedListener listener = (IRepositoryChangedListener) RepositoryManagerHelper.getRepositoryView(); removeRepositoryChangedListener(listener); for (Iterator<IRepositoryViewObject> iter = list.iterator(); iter.hasNext();) { IRepositoryViewObject element = iter.next(); repositoryChanged(new RepositoryElementDelta(element)); } registerRepositoryChangedListenerAsFirst(listener); } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#validateColumnName(java.lang.String, int) */ public String validateColumnName(String columnName, int index) { return ColumnNameValidator.validateColumnNameFormat(columnName, index); } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#openLoginDialog() */ public void openLoginDialog() { if (isloginDialogDisabled()) { return; } if (CorePlugin.getContext().getProperty(Context.REPOSITORY_CONTEXT_KEY) != null) { return; } Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); boolean logged = false; LoginDialog loginDialog = new LoginDialog(shell); // PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeAllEditors(true); logged = loginDialog.open() == LoginDialog.OK; if (logged) { // addCommand(); new DisableLanguageActions().earlyStartup(); new BindingActions().bind(); IMigrationToolService toolService = CorePlugin.getDefault().getMigrationToolService(); toolService.executeMigration(SwitchProjectAction.PLUGIN_MODEL); IRunProcessService runService = CorePlugin.getDefault().getRunProcessService(); runService.deleteAllJobs(SwitchProjectAction.PLUGIN_MODEL); CorePlugin.getDefault().getCodeGeneratorService().initializeTemplates(); CorePlugin.getDefault().getDesignerCoreService() .synchronizeDesignerUI(new PropertyChangeEvent(this, ComponentUtilities.NORMAL, null, null)); } } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#openLoginDialog(org.eclipse.swt.widgets.Shell, boolean) */ public boolean openLoginDialog(Shell shell, boolean inuse) { if (isloginDialogDisabled()) { return true; } LoginDialog loginDialog = new LoginDialog(shell, inuse); boolean logged = loginDialog.open() == LoginDialog.OK; return logged; } private boolean isloginDialogDisabled() { boolean reload = Boolean.parseBoolean(System.getProperty("talend.project.reload")); //$NON-NLS-1$ PreferenceManipulator preferenceManipulator = new PreferenceManipulator(); ConnectionBean lastBean = null; if (reload) { final ConnectionUserPerReader instance = ConnectionUserPerReader.getInstance(); instance.forceReadConnections(); final String lastConncetion = ConnectionUserPerReader.getInstance().readLastConncetion(); for (ConnectionBean bean : instance.readConnections()) { if (bean.getName().equals(lastConncetion)) { lastBean = bean; break; } } } if (ArrayUtils.contains(Platform.getApplicationArgs(), EclipseCommandLine.TALEND_DISABLE_LOGINDIALOG_COMMAND)) { boolean deleteProjectIfExist = ArrayUtils.contains(Platform.getApplicationArgs(), "--deleteProjectIfExist"); IBrandingService brandingService = (IBrandingService) GlobalServiceRegister.getDefault().getService( IBrandingService.class); brandingService.getBrandingConfiguration().setUseProductRegistration(false); ProxyRepositoryFactory repositoryFactory = ProxyRepositoryFactory.getInstance(); String projectName = "AUTO_LOGIN_PROJECT"; int index = ArrayUtils.indexOf(Platform.getApplicationArgs(), "-project"); if (index > 0) { if (index + 1 < Platform.getApplicationArgs().length) { projectName = Platform.getApplicationArgs()[index + 1]; } } String language = "java"; index = ArrayUtils.indexOf(Platform.getApplicationArgs(), "-language"); if (index > 0) { if (index + 1 < Platform.getApplicationArgs().length) { language = Platform.getApplicationArgs()[index + 1]; } } String login = "auto@login.com"; index = ArrayUtils.indexOf(Platform.getApplicationArgs(), "-login"); if (index > 0) { if (index + 1 < Platform.getApplicationArgs().length) { login = Platform.getApplicationArgs()[index + 1]; } } String password = ""; index = ArrayUtils.indexOf(Platform.getApplicationArgs(), "-password"); if (index > 0) { if (index + 1 < Platform.getApplicationArgs().length) { password = Platform.getApplicationArgs()[index + 1]; } } String branch = null; if (reload && lastBean != null) { final String lastProject = preferenceManipulator.getLastProject(); if (lastProject != null) { projectName = lastProject; } final String lastSVNBranch = preferenceManipulator.getLastSVNBranch(); if (lastSVNBranch != null) { branch = lastSVNBranch; } final String lastUser = lastBean.getUser(); if (lastUser != null) { login = lastUser; } final String lastPass = lastBean.getPassword(); if (lastPass != null) { password = lastPass; } } User userInfo = PropertiesFactoryImpl.eINSTANCE.createUser(); userInfo.setLogin(login); try { userInfo.setPassword(PasswordHelper.encryptPasswd(password)); } catch (NoSuchAlgorithmException e) { ExceptionHandler.process(e); } try { ConnectionBean bean = ConnectionBean.getDefaultConnectionBean(); if (reload && lastBean != null) { bean = lastBean; } Context ctx = CorePlugin.getContext(); RepositoryContext repositoryContext = new RepositoryContext(); repositoryContext.setUser(userInfo); repositoryContext.setClearPassword(password); repositoryContext.setFields(bean.getDynamicFields()); String branchKey = IProxyRepositoryFactory.BRANCH_SELECTION + SVNConstant.UNDER_LINE_CHAR + projectName; if (branch != null) { repositoryContext.getFields().put(branchKey, branch); } else { repositoryContext.getFields().put(branchKey, SVNConstant.EMPTY); } ctx.putProperty(Context.REPOSITORY_CONTEXT_KEY, repositoryContext); repositoryFactory.setRepositoryFactoryFromProvider(RepositoryFactoryProvider.getRepositoriyById(bean .getRepositoryId())); Project project = null; for (Project p : repositoryFactory.readProject()) { if (p.getLabel().equals(projectName) || p.getTechnicalLabel().equals(projectName)) { project = p; break; } } if (!reload) { if (deleteProjectIfExist && project != null) { ResourceModelUtils.getProject(project).delete(true, new NullProgressMonitor()); } if (project == null || deleteProjectIfExist) { Project projectInfor = ProjectHelper.createProject(projectName, "", //$NON-NLS-1$ language, userInfo); project = repositoryFactory.createProject(projectInfor); } } repositoryContext.setProject(project); repositoryFactory.logOnProject(project, new NullProgressMonitor()); } catch (PersistenceException e) { MessageBoxExceptionHandler.process(e, new Shell()); repositoryFactory.logOffProject(); return false; } catch (LoginException e) { MessageBoxExceptionHandler.process(e, new Shell()); repositoryFactory.logOffProject(); return false; } catch (BusinessException e) { MessageBoxExceptionHandler.process(e, new Shell()); repositoryFactory.logOffProject(); return false; } catch (CoreException e) { MessageBoxExceptionHandler.process(e, new Shell()); repositoryFactory.logOffProject(); return false; } return true; } return false; } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#initializeForTalendStartupJob() */ public void initializeForTalendStartupJob() { // do nothing now. } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#initializeTalend() */ public void initializePluginMode() { if (CorePlugin.getContext().getProperty(Context.REPOSITORY_CONTEXT_KEY) != null) { return; } openLoginDialog(); } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#isRCPMode() */ public boolean isRCPMode() { return CoreRepositoryPlugin.getDefault().isRCPMode(); } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#setRCPMode() */ public void setRCPMode() { CoreRepositoryPlugin.getDefault().setRCPMode(); } public DatabaseConnection cloneOriginalValueConnection(DatabaseConnection dbConn) { return DBConnectionContextUtils.cloneOriginalValueConnection(dbConn); } public DatabaseConnection cloneOriginalValueConnection(DatabaseConnection dbConn, boolean defaultContext) { return DBConnectionContextUtils.cloneOriginalValueConnection(dbConn, defaultContext, null); } public void setMetadataConnectionParameter(DatabaseConnection dbConn, IMetadataConnection metaConn) { DBConnectionContextUtils.setMetadataConnectionParameter(dbConn, metaConn); } public DatabaseConnection cloneOriginalValueConnection(DatabaseConnection dbConn, boolean defaultContext, String selectedContext) { return DBConnectionContextUtils.cloneOriginalValueConnection(dbConn, defaultContext, selectedContext); } public IEditorPart openSQLPatternEditor(SQLPatternItem item, boolean readOnly) { IEditorPart openSQLPatternEditor = null; try { openSQLPatternEditor = new EditSqlpatternAction().openSQLPatternEditor(item, readOnly); } catch (PartInitException e) { ExceptionHandler.process(e); } catch (SystemException e) { ExceptionHandler.process(e); } return openSQLPatternEditor; } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#createSqlpattern() */ public void createSqlpattern(String path, boolean isFromSqlPatternComposite) { new CreateSqlpatternAction(path, isFromSqlPatternComposite).run(); } /* * (non-Javadoc) * * @see org.talend.repository.model.IRepositoryService#addRepositoryViewListener(org.eclipse.ui.ISelectionListener) */ public void addRepositoryTreeViewListener(ISelectionChangedListener listener) { IRepositoryView repositoryView = RepositoryManagerHelper.getRepositoryView(); if (repositoryView != null) { StructuredViewer treeViewer = repositoryView.getViewer(); if (treeViewer != null) { treeViewer.addSelectionChangedListener(listener); } else { // RepositoryView.addPreparedListeners(listener); } } } /* * (non-Javadoc) * * @seeorg.talend.repository.model.IRepositoryService#removeRepositoryTreeViewListener(org.eclipse.jface.viewers. * ISelectionChangedListener) */ public void removeRepositoryTreeViewListener(ISelectionChangedListener listener) { IRepositoryView repositoryView = RepositoryManagerHelper.getRepositoryView(); if (repositoryView != null) { StructuredViewer treeViewer = repositoryView.getViewer(); if (treeViewer != null) { treeViewer.removeSelectionChangedListener(listener); } } } public IPreferenceStore getRepositoryPreferenceStore() { return RepositoryPlugin.getDefault().getPreferenceStore(); } public RepositoryNode getRepositoryNode(String id, boolean expanded) { return RepositoryNodeUtilities.getRepositoryNode(id, expanded); } /* * (non-Javadoc) * * @seeorg.talend.repository.model.IRepositoryService#openRepositoryReviewDialog(org.talend.core.model.repository. * ERepositoryObjectType, java.lang.String) */ public void openRepositoryReviewDialog(ERepositoryObjectType type, String repositoryType, List<IContextParameter> params, IContextManager contextManager) { ContextRepositoryReviewDialog dialog = new ContextRepositoryReviewDialog(new Shell(), type, params, contextManager); dialog.open(); } /** * wzhang Comment method "getRootRepositoryNode". * * @param type * @return */ public RepositoryNode getRootRepositoryNode(ERepositoryObjectType type) { IRepositoryView view = RepositoryManagerHelper.getRepositoryView(); if (view != null) { ProjectRepositoryNode root = (ProjectRepositoryNode) view.getRoot(); return root.getRootRepositoryNode(type); } return null; } public void setInternalNodeHTMLMap(INode node, Map<String, Object> internalNodeHTMLMap) { IElementParameter propertyParam = null; IElementParameter functionParam = null; for (IElementParameter param : node.getElementParameters()) { if ("PROPERTY".equals(param.getName())) { //$NON-NLS-1$ propertyParam = param.getChildParameters().get("REPOSITORY_PROPERTY_TYPE"); //$NON-NLS-1$ } if ("SAP_FUNCTION".equals(param.getName())) { //$NON-NLS-1$ functionParam = param; } } if (propertyParam != null && functionParam != null) { try { IRepositoryViewObject lastVersion = ProxyRepositoryFactory.getInstance().getLastVersion( (String) propertyParam.getValue()); if (lastVersion != null) { Item item = lastVersion.getProperty().getItem(); if (item instanceof SAPConnectionItem) { SAPConnectionItem sapItem = (SAPConnectionItem) item; SAPConnection connection = (SAPConnection) sapItem.getConnection(); connection.getFuntions(); for (Object obj : connection.getFuntions()) { if (obj instanceof SAPFunctionUnit) { SAPFunctionUnit function = (SAPFunctionUnit) obj; String functionName = (String) functionParam.getValue(); if (function.getName().equals(functionName.substring(1, functionName.length() - 1))) { String document = ModelElementHelper.getFirstDocument(function).getReference(); if (document != null && !"".equals(document)) { //$NON-NLS-1$ internalNodeHTMLMap.put(node.getUniqueName(), document.substring(document.indexOf("<font"), document.indexOf("</body>"))); //$NON-NLS-1$ //$NON-NLS-2$ } } } } } } } catch (PersistenceException e) { ExceptionHandler.process(e); } } } public IDialogSettings getDialogSettings() { return RepositoryPlugin.getDefault().getDialogSettings(); } public Set<MetadataTable> getTablesFromSpecifiedDataPackage(DatabaseConnection dbconn) { return ProjectNodeHelper.getTablesFromSpecifiedDataPackage(dbconn); } public Class getClassForSalesforceModule() { return SalesforceModuleRepositoryObject.class; } public AContextualAction getCreateRoutineAction(IRepositoryView repositoryView) { CreateRoutineAction createRoutineAction = new CreateRoutineAction(true); createRoutineAction.setWorkbenchPart(repositoryView); return createRoutineAction; } public String getRulesProviderPath(RulesItem currentRepositoryItem) { IRulesProviderService rulesService = null; if (PluginChecker.isRulesPluginLoaded()) { rulesService = (IRulesProviderService) GlobalServiceRegister.getDefault().getService(IRulesProviderService.class); try { rulesService.syncRule(currentRepositoryItem); String path = rulesService.getRuleFile(currentRepositoryItem, ".xls").getLocation().toOSString(); //$NON-NLS-N$ //$NON-NLS-1$ return path; } catch (SystemException e) { } } return ""; } }