// ============================================================================ // // 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.utils; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.jface.operation.IRunnableWithProgress; import org.osgi.framework.FrameworkUtil; import org.talend.core.utils.RegistryReader; /** * This provides data for extensions points extending org.talend.core.repository.loginTask * */ public class LoginTaskRegistryReader extends RegistryReader { /** * */ private static final String PRIORITY_ATTRIBUTE = "priority"; //$NON-NLS-1$ static class LoginTask { public final IRunnableWithProgress runnable; public final Priority priority; enum Priority { LOWEST, LOW, NORMAL, HIGH, HIGHEST } /** * DOC sgandon LoginTaskRegistryReader.LoginTask constructor comment. */ public LoginTask(IRunnableWithProgress runnable, Priority priority) { this.runnable = runnable; this.priority = priority; } } /** * */ private static final String CLASS_ATTRIBUTE = "class"; //$NON-NLS-1$ /** * */ private static final String LOGIN_TASK_ELEMENT_NAME = "loginTask"; //$NON-NLS-1$ /** * extension point Id */ private static final String LOGIN_TASK_EXTENSION_POINT = "login.task"; //$NON-NLS-1$ protected List<LoginTask> allLoginTasks;// must use raw type cause the api used is return raw type /** * DOC sgandon LoginTaskRegistryReader constructor comment. * * @param aPluginId * @param anExtensionPoint */ public LoginTaskRegistryReader() { super(FrameworkUtil.getBundle(LoginTaskRegistryReader.class).getSymbolicName(), LOGIN_TASK_EXTENSION_POINT); } public IRunnableWithProgress[] getAllTaskListInstance() { if (allLoginTasks == null) { allLoginTasks = new ArrayList<LoginTask>(); readRegistry(); } sortLoginTasks(allLoginTasks); return getAllRunnables(allLoginTasks); } /** * DOC sgandon Comment method "getAllRunnables". * * @param allLoginTasks2 * @return */ private IRunnableWithProgress[] getAllRunnables(List<LoginTask> allLoginTasks2) { IRunnableWithProgress[] runnables = new IRunnableWithProgress[allLoginTasks2.size()]; int i = 0; for (LoginTask loginTask : allLoginTasks2) { runnables[i++] = loginTask.runnable; } return runnables; } /** * sort all login task according to the priority * * @param allLoginTasks2 */ private void sortLoginTasks(List<LoginTask> allLoginTasks2) { Collections.sort(allLoginTasks2, new Comparator<LoginTask>() { @Override public int compare(LoginTask arg0, LoginTask arg1) { return arg1.priority.compareTo(arg0.priority); } }); } /* * (non-Javadoc) * * @see org.talend.core.utils.RegistryReader#readElement(org.eclipse.core.runtime.IConfigurationElement) */ @Override protected boolean readElement(final IConfigurationElement element) { if (LOGIN_TASK_ELEMENT_NAME.equals(element.getName())) { SafeRunner.run(new RegistryReader.RegistrySafeRunnable() { @Override public void run() throws Exception { IRunnableWithProgress runnable = (IRunnableWithProgress) element.createExecutableExtension(CLASS_ATTRIBUTE); String priorityString = element.getAttribute(PRIORITY_ATTRIBUTE); LoginTask.Priority priority = (priorityString != null && priorityString.length() > 0) ? LoginTask.Priority .valueOf(priorityString.toUpperCase()) : LoginTask.Priority.NORMAL; allLoginTasks.add(new LoginTask(runnable, priority)); } }); return true; }// else return false return false; } }