// ============================================================================ // // 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.model.process; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.gef.palette.PaletteEntry; import org.eclipse.jface.resource.ImageDescriptor; import org.talend.commons.ui.runtime.exception.ExceptionHandler; import org.talend.core.model.components.IComponent; import org.talend.core.model.process.INode; import org.talend.core.model.process.IProcess; import org.talend.core.model.process.IProcess2; import org.talend.core.model.properties.Item; import org.talend.core.model.properties.JobletProcessItem; import org.talend.core.model.update.UpdateResult; import org.talend.designer.core.IReplaceNodeInProcess; import org.talend.designer.core.ui.editor.process.Process; /** * DOC qzhang class global comment. Detailled comment */ public abstract class AbstractProcessProvider implements IReplaceNodeInProcess { public static final String EXTENSION_ID = "org.talend.designer.core.process_provider"; //$NON-NLS-1$ public static final String ATTR_CLASS = "class"; //$NON-NLS-1$ public static final String ATTR_PID = "pluginId"; //$NON-NLS-1$ private static boolean canCreateNode = true; private static IProcess componentProcess = null; private static Map<String, AbstractProcessProvider> providerMap = new HashMap<String, AbstractProcessProvider>(); public static AbstractProcessProvider findProcessProviderFromPID(String pid) { if (providerMap == null || !providerMap.containsKey(pid)) { findAllProcessProviders(); } return providerMap.get(pid); } public static List<AbstractProcessProvider> findAllProcessProviders() { if (providerMap.isEmpty()) { IConfigurationElement[] elems = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_ID); for (IConfigurationElement elem : elems) { String pid = elem.getAttribute(ATTR_PID); try { AbstractProcessProvider createExecutableExtension = (AbstractProcessProvider) elem .createExecutableExtension(ATTR_CLASS); providerMap.put(pid, createExecutableExtension); } catch (CoreException ex) { // ex.printStackTrace(); ExceptionHandler.process(ex); } } } return new ArrayList<AbstractProcessProvider>(providerMap.values()); } /** * DOC qzhang Comment method "isExtensionProcessForJoblet". * * @param process * @return */ public static boolean isExtensionProcessForJoblet(IProcess process) { AbstractProcessProvider findProcessProvider = findProcessProviderFromPID(IComponent.JOBLET_PID); if (findProcessProvider != null) { return findProcessProvider.isExtensionProcess(process); } return false; } /** * DOC qzhang Comment method "openNewProcessEditor". */ public void openNewProcessEditor(INode node) { // do nothing. } public void loadComponentsFromExtensionPoint() { // do nothing. } public abstract Process buildNewGraphicProcess(Item node); public abstract Process buildNewGraphicProcess(Item node, boolean needScreenshot); /** * DOC qzhang Comment method "loadComponentsFromProviders". * * @return */ public static void loadComponentsFromProviders() { for (AbstractProcessProvider processProvider : findAllProcessProviders()) { processProvider.loadComponentsFromExtensionPoint(); } } /** * DOC qzhang Comment method "canDeleteNode". * * @param no * * @return */ public boolean canDeleteNode(INode no) { return true; } public boolean canCopyNode(INode no) { return true; } public boolean canCutNode(INode no) { return true; } // public abstract void updateJobletContext(Node node); /** * DOC qzhang Comment method "updateJobletContext". * * @param nodes */ public abstract List<String> updateProcessContexts(IProcess process); public abstract List<String> updateProcessContextsWithoutUI(IProcess process); /** * * ggu Comment method "checkJobletNodeSchema". * * */ public abstract List<UpdateResult> checkJobletNodeSchema(IProcess process); public abstract boolean hasJobletComponent(IProcess process); public abstract ImageDescriptor getIcons(IProcess2 process); public abstract void setIcons(IProcess process, ImageDescriptor image); /** * DOC qzhang Comment method "canCreate". * * @param node */ public boolean canCreateNode(INode node) { return true; } public abstract List<PaletteEntry> addJobletEntry(); public boolean isExtensionComponent(INode node) { return false; } /** * DOC qli Comment method "isExtensionProcess". * * @param process * * @return */ public boolean isJobletInputOrOutputComponent(INode node) { return false; } /** * DOC qli Comment method "isExtensionProcess". * * @param process * * @return */ public boolean isExtensionProcess(IProcess process) { return false; } public abstract IProcess getProcessFromJobletProcessItem(JobletProcessItem jobletProcessItem); /** * * cLi Comment method "getJobletItem". * * bug 6158 */ public abstract Item getJobletItem(INode node); // for feature 13361 public abstract Item getJobletItem(INode node, String version); public boolean containNodeInMemoryNotProcess() { return this.canCreateNode; } public void setCanCreateNode(boolean flag) { this.canCreateNode = flag; } public static IProcess getComponentProcess() { return componentProcess; } public static void setComponentProcess(Process componentProcess) { AbstractProcessProvider.componentProcess = componentProcess; } }