// ============================================================================ // // 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.action; import java.util.Properties; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IPerspectiveDescriptor; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.WorkbenchException; import org.eclipse.ui.intro.IIntroSite; import org.eclipse.ui.intro.config.IIntroAction; import org.talend.commons.exception.PersistenceException; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.commons.ui.runtime.exception.MessageBoxExceptionHandler; import org.talend.commons.ui.runtime.image.ECoreImage; import org.talend.commons.ui.runtime.image.ImageProvider; import org.talend.core.model.properties.ProcessItem; import org.talend.core.model.properties.Property; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.repository.model.ProxyRepositoryFactory; import org.talend.core.ui.branding.IBrandingConfiguration; import org.talend.designer.core.DesignerPlugin; import org.talend.designer.core.i18n.Messages; import org.talend.designer.core.ui.AbstractMultiPageTalendEditor; import org.talend.designer.core.ui.MultiPageTalendEditor; import org.talend.designer.core.ui.editor.ProcessEditorInput; import org.talend.designer.runprocess.ItemCacheManager; import org.talend.repository.ProjectManager; import org.talend.repository.model.ERepositoryStatus; import org.talend.repository.model.IProxyRepositoryFactory; import org.talend.repository.model.IRepositoryService; import org.talend.repository.model.RepositoryNode; import org.talend.repository.model.RepositoryNodeUtilities; import org.talend.repository.ui.views.IRepositoryView; /** * DOC smallet class global comment. Detailled comment <br/> * * $Id: EditProcess.java 83949 2012-05-21 10:15:37Z wchen $ * */ public class EditProcess extends AbstractProcessAction implements IIntroAction { private static final String EDIT_LABEL = Messages.getString("EditProcess.editJob"); //$NON-NLS-1$ private static final String OPEN_LABEL = Messages.getString("EditProcess.openJob"); //$NON-NLS-1$ private Properties params; public EditProcess() { super(); this.setText(EDIT_LABEL); this.setToolTipText(EDIT_LABEL); this.setImageDescriptor(ImageProvider.getImageDesc(ECoreImage.PROCESS_ICON)); } /* * (non-Javadoc) * * @see org.eclipse.jface.action.Action#run() */ @Override protected void doRun() { ISelection selection = getSelectedObject(); if (selection == null) { return; } Object obj = ((IStructuredSelection) selection).getFirstElement(); if (obj == null) { return; } RepositoryNode node = (RepositoryNode) obj; Property property = node.getObject().getProperty(); ProcessItem processItem = null; if (property != null) { ItemCacheManager.clearCache(); Assert.isTrue(property.getItem() instanceof ProcessItem); processItem = (ProcessItem) property.getItem(); IWorkbenchPage page = getActivePage(); try { final ProcessEditorInput fileEditorInput = new ProcessEditorInput(processItem, true, true); checkUnLoadedNodeForProcess(fileEditorInput); IEditorPart editorPart = page.findEditor(fileEditorInput); if (editorPart == null) { fileEditorInput.setRepositoryNode(node); editorPart = page.openEditor(fileEditorInput, MultiPageTalendEditor.ID, true); /* MultiPageTalendEditor openEditor = (MultiPageTalendEditor) */ // List<AbstractProcessProvider> findAllProcessProviders = // AbstractProcessProvider.findAllProcessProviders(); // boolean isImport = false; // for (AbstractProcessProvider abstractProcessProvider : findAllProcessProviders) { // if (abstractProcessProvider != null) { // boolean update = abstractProcessProvider.updateProcessContexts((Process) fileEditorInput // .getLoadedProcess()); // if (update) { // isImport = true; // } // } // } // if (isImport) { // openEditor.getTalendEditor().getCommandStack().execute(new Command() { // }); // } } else { ((MultiPageTalendEditor) editorPart).setReadOnly(fileEditorInput.setForceReadOnly(false)); page.activate(editorPart); } // see the bug 6585,qli comment. if (editorPart instanceof AbstractMultiPageTalendEditor) { ((AbstractMultiPageTalendEditor) editorPart).updateTitleImage(); } // refresh(obj); } catch (PartInitException e) { MessageBoxExceptionHandler.process(e); } catch (PersistenceException e) { MessageBoxExceptionHandler.process(e); } } // else { // IRepositoryView viewPart = getViewPart(); // if (viewPart != null) { // viewPart.refresh(ERepositoryObjectType.PROCESS); // } // } } /* * (non-Javadoc) * * @see org.talend.repository.ui.actions.ITreeContextualAction#init(org.eclipse.jface.viewers.TreeViewer, * org.eclipse.jface.viewers.IStructuredSelection) */ @Override public void init(TreeViewer viewer, IStructuredSelection selection) { boolean canWork = !selection.isEmpty() && selection.size() == 1; IProxyRepositoryFactory factory = ProxyRepositoryFactory.getInstance(); if (factory.isUserReadOnlyOnCurrentProject()) { canWork = false; } if (canWork) { Object o = selection.getFirstElement(); RepositoryNode node = (RepositoryNode) o; switch (node.getType()) { case REPOSITORY_ELEMENT: if (node.getObjectType() != ERepositoryObjectType.PROCESS) { canWork = false; } else { IRepositoryService service = DesignerPlugin.getDefault().getRepositoryService(); IProxyRepositoryFactory repFactory = service.getProxyRepositoryFactory(); if (repFactory.isPotentiallyEditable(node.getObject())) { this.setText(EDIT_LABEL); } else { this.setText(OPEN_LABEL); } } break; default: canWork = false; } if (canWork && node.getObject() != null && ProxyRepositoryFactory.getInstance().getStatus(node.getObject()) == ERepositoryStatus.DELETED) { canWork = false; } if (canWork && !ProjectManager.getInstance().isInCurrentMainProject(node)) { canWork = false; } // If the editProcess action canwork is true, then detect that the job version is the latest verison or not. if (canWork) { canWork = isLastVersion(node); } } setEnabled(canWork); } /** * * DOC YeXiaowei EditProcess class global comment. Detailled comment */ // @SuppressWarnings("unchecked") // private static class IRepositoryObjectComparator implements Comparator { // // public int compare(Object o1, Object o2) { // return VersionUtils.compareTo(((IRepositoryObject) o1).getVersion(), ((IRepositoryObject) o2).getVersion()); // } // } // // @SuppressWarnings("unchecked") // private boolean isLastJobVersion(RepositoryNode repositoryObject) { // try { // List<IRepositoryObject> allVersion = // ProxyRepositoryFactory.getInstance().getAllVersion(repositoryObject.getId()); // if (allVersion == null || allVersion.isEmpty()) { // return false; // } // // Collections.sort(allVersion, new IRepositoryObjectComparator()); // IRepositoryObject lastVersion = allVersion.get(allVersion.size() - 1); // return lastVersion.getVersion().equals(repositoryObject.getObject().getVersion()); // } catch (PersistenceException e) { // return false; // } // } /* * (non-Javadoc) * * @see org.talend.repository.ui.actions.AContextualView#getClassForDoubleClick() */ @Override public Class getClassForDoubleClick() { return ProcessItem.class; } /* * (non-Javadoc) * * @see org.eclipse.ui.intro.config.IIntroAction#run(org.eclipse.ui.intro.IIntroSite, java.util.Properties) */ @Override public void run(IIntroSite site, Properties params) { this.params = params; PlatformUI.getWorkbench().getIntroManager().closeIntro(PlatformUI.getWorkbench().getIntroManager().getIntro()); doRun(); } private ISelection getSelectedObject() { if (params == null) { return getSelection(); } else { IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (null == workbenchWindow) { return null; } IWorkbenchPage workbenchPage = workbenchWindow.getActivePage(); if (null == workbenchPage) { return null; } IPerspectiveDescriptor currentPerspective = workbenchPage.getPerspective(); if (!IBrandingConfiguration.PERSPECTIVE_DI_ID.equals(currentPerspective.getId())) { // show di perspective try { workbenchWindow.getWorkbench().showPerspective(IBrandingConfiguration.PERSPECTIVE_DI_ID, workbenchWindow); workbenchPage = workbenchWindow.getActivePage(); } catch (WorkbenchException e) { ExceptionHandler.process(e); return null; } } RepositoryNode repositoryNode = RepositoryNodeUtilities.getRepositoryNode(params.getProperty("nodeId"), false); IRepositoryView viewPart = getViewPart(); if (repositoryNode != null && viewPart != null) { RepositoryNodeUtilities.expandParentNode(viewPart, repositoryNode); return new StructuredSelection(repositoryNode); } return null; } } }