// ============================================================================ // // 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; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.talend.core.CorePlugin; import org.talend.core.GlobalServiceRegister; import org.talend.core.model.components.ComponentUtilities; import org.talend.core.model.process.IProcess; import org.talend.core.model.process.IProcess2; import org.talend.core.model.repository.ERepositoryObjectType; import org.talend.core.ui.ISQLBuilderService; import org.talend.designer.business.diagram.custom.IDiagramModelService; import org.talend.designer.core.DesignerPlugin; import org.talend.designer.core.ui.editor.process.Process; import org.talend.designer.core.ui.views.CodeView; import org.talend.designer.core.ui.views.contexts.Contexts; import org.talend.designer.core.ui.views.jobsettings.JobSettings; import org.talend.designer.core.ui.views.problems.Problems; import org.talend.designer.runprocess.IRunProcessService; /** * Track the active Process being edited. <br/> * * $Id: ActiveProcessTracker.java 82709 2012-04-28 08:12:04Z mwang $ * */ public class ActiveProcessTracker implements IPartListener { private static ActiveProcessTracker apt = null; public static void initialize() { if (apt == null) { apt = new ActiveProcessTracker(); PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(apt); } } private static IProcess2 currentProcess; private static IProcess2 lastProcessOpened; private static boolean changedProcess; private static List<IJobTrackerListener> jobTrackerListeners = new ArrayList<IJobTrackerListener>(); public static void addJobTrackerListener(IJobTrackerListener listener) { if (currentProcess != null) { listener.focusOnJob(currentProcess); } jobTrackerListeners.add(listener); } public static void removeJobTrackerListener(IJobTrackerListener listener) { jobTrackerListeners.remove(listener); listener.allJobClosed(); } public IProcess2 getJobFromActivatedEditor(IWorkbenchPart part) { IWorkbenchPart testedPart = part; if (!(part instanceof AbstractMultiPageTalendEditor)) { testedPart = part.getSite().getWorkbenchWindow().getActivePage().getActiveEditor(); } if (testedPart instanceof AbstractMultiPageTalendEditor) { AbstractMultiPageTalendEditor mpte = (AbstractMultiPageTalendEditor) testedPart; mpte.setName(); Contexts.setTitle(mpte.getTitle()); IProcess2 process = mpte.getTalendEditor().getProcess(); return process; } else { // No editor } return null; } /* * (non-Javadoc) * * @see org.eclipse.ui.IPartListener#partActivated(org.eclipse.ui.IWorkbenchPart) */ public void partActivated(final IWorkbenchPart part) { if (changedProcess) { if (part instanceof AbstractMultiPageTalendEditor) { ComponentUtilities.updateFromRepositoryType(ERepositoryObjectType .getItemType(((AbstractMultiPageTalendEditor) part).getProcess().getProperty().getItem())); changedProcess = false; } } } /* * (non-Javadoc) * * @see org.eclipse.ui.IPartListener#partBroughtToTop(org.eclipse.ui.IWorkbenchPart) */ public void partBroughtToTop(IWorkbenchPart part) { IProcess2 process = getJobFromActivatedEditor(part); if (process != null && currentProcess != process) { changedProcess = true; currentProcess = process; setContextsView(process); // setStatsAndLogsView(process); JobSettings.switchToCurJobSettingsView(); for (IJobTrackerListener listener : jobTrackerListeners) { listener.focusOnJob(process); } // if (process instanceof Process) { // Process p = (Process) process; // if (!p.isReadOnly() && p.isActivate()) { // p.checkDifferenceWithRepository(); // } // } } } /** * ftang Comment method "setStatsAndLogsView". * * @param process */ // private void setStatsAndLogsView(IProcess process) { // StatsAndLogs.setTitle("Job " + process.getProperty().getLabel()); //$NON-NLS-1$ // StatsAndLogs.switchToCurStatsAndLogsView(); // } /** * qzhang Comment method "setProblemsView". * * @param process */ private void addJobInProblemView(IProcess2 process) { Problems.addProcess(process); IRunProcessService service = DesignerPlugin.getDefault().getRunProcessService(); service.setActiveProcess(process); } /** * qzhang Comment method "setProblemsView". * * @param process */ private void setContextsView(IProcess2 process) { IRunProcessService service = DesignerPlugin.getDefault().getRunProcessService(); service.setActiveProcess(process, false); // Contexts.setTitle("Job " + process.getProperty().getLabel()); //$NON-NLS-1$ Contexts.switchToCurContextsView(); } /* * (non-Javadoc) * * @see org.eclipse.ui.IPartListener#partClosed(org.eclipse.ui.IWorkbenchPart) */ public void partClosed(IWorkbenchPart part) { if (part instanceof AbstractMultiPageTalendEditor && currentProcess != null) { AbstractMultiPageTalendEditor mpte = (AbstractMultiPageTalendEditor) part; if (mpte.isKeepPropertyLocked()) { currentProcess = null; return; } IProcess process = getJobFromActivatedEditor(part); if (process != null) { Problems.removeProblemsByProcess(process); Problems.removeJob(process); IRunProcessService service = DesignerPlugin.getDefault().getRunProcessService(); service.removeProcess(process); CodeView.refreshCodeView(null); if (currentProcess == process) { Contexts.setTitle(""); //$NON-NLS-1$ Contexts.clearAll(); JobSettings.cleanDisplay(); if (lastProcessOpened == currentProcess) { lastProcessOpened = null; } currentProcess = null; for (IJobTrackerListener listener : jobTrackerListeners) { listener.allJobClosed(); } } if (GlobalServiceRegister.getDefault().isServiceRegistered(ISQLBuilderService.class)) { ISQLBuilderService sqlBuilderService = (ISQLBuilderService) GlobalServiceRegister.getDefault().getService( ISQLBuilderService.class); sqlBuilderService.closeSqlBuilderDialogs(process.getName()); } } } else if (part instanceof IEditorPart) { if (GlobalServiceRegister.getDefault().isServiceRegistered(IDiagramModelService.class) && CorePlugin.getDefault().getDiagramModelService().isBusinessDiagramEditor((IEditorPart) part)) { Contexts.setTitle(""); //$NON-NLS-1$ Contexts.clearAll(); } } if (part instanceof AbstractMultiPageTalendEditor) { AbstractMultiPageTalendEditor mpte = (AbstractMultiPageTalendEditor) part; mpte.beforeDispose(); } IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); if (page != null) { if (page.getActiveEditor() != null) { JobSettings.switchToCurJobSettingsView(); } else { JobSettings.cleanDisplay(); } } } /* * (non-Javadoc) * * @see org.eclipse.ui.IPartListener#partDeactivated(org.eclipse.ui.IWorkbenchPart) */ public void partDeactivated(IWorkbenchPart part) { IProcess process = getJobFromActivatedEditor(part); if (process != null && (part instanceof AbstractMultiPageTalendEditor)) { AbstractMultiPageTalendEditor mpte = (AbstractMultiPageTalendEditor) part; mpte.getTalendEditor().savePaletteState(); } } /* * (non-Javadoc) * * @see org.eclipse.ui.IPartListener#partOpened(org.eclipse.ui.IWorkbenchPart) */ public void partOpened(IWorkbenchPart part) { boolean existedJobOpened = false; if (part instanceof AbstractMultiPageTalendEditor) { AbstractMultiPageTalendEditor mpte = (AbstractMultiPageTalendEditor) part; if (mpte.isJobAlreadyOpened()) { mpte.updateChildrens(); // close the first editor and keep the new one. (so only one will remain) IEditorReference[] ref = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage() .findEditors(mpte.getEditorInput(), mpte.getEditorId(), IWorkbenchPage.MATCH_INPUT); IEditorPart editorPart = ref[0].getEditor(false); editorPart.doSave(new NullProgressMonitor()); ((AbstractMultiPageTalendEditor) editorPart).setKeepPropertyLocked(true); PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().closeEditor(editorPart, false); existedJobOpened = true; } } else { if (GlobalServiceRegister.getDefault().isServiceRegistered(IDiagramModelService.class)) { CorePlugin.getDefault().getDiagramModelService().handleNewEditorAction(part); } } IProcess2 process = getJobFromActivatedEditor(part); if (process != null && currentProcess != process && lastProcessOpened != process) { lastProcessOpened = process; addJobInProblemView(process); } else if (existedJobOpened) { currentProcess = process; for (IJobTrackerListener listener : jobTrackerListeners) { listener.focusOnJob(process); } } } /** * Getter for currentProcess. * * @return the currentProcess */ public static Process getCurrentProcess() { return (Process) currentProcess; } }