/******************************************************************************* * Copyright (c) 2015 Zend Technologies and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Zend Technologies - initial API and implementation *******************************************************************************/ package org.eclipse.php.debug.ui; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.StringTokenizer; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.php.internal.debug.core.preferences.PHPDebuggersRegistry; import org.eclipse.php.internal.debug.ui.Logger; /** * Debuge server connection tests registry. * * @author Bartlomiej Laczkowski */ @SuppressWarnings("restriction") public class DebugServerConnectionTestRegistry { private static final String EXTENSION_ID = "org.eclipse.php.debug.ui.debugServerConnectionTest"; //$NON-NLS-1$ private static final String PROP_TEST = "debugServerTest"; //$NON-NLS-1$ private static final String PROP_DEBUGGER_TYPE = "debuggerTypeName"; //$NON-NLS-1$ private static final String PROP_OVERRIDES_ID = "overridesId"; //$NON-NLS-1$ private static final String PROP_ID = "id"; //$NON-NLS-1$ private DebugServerConnectionTestRegistry() { // Registry reader - private constructor } /** * Reads and returns server connection tests for given debugger type. * * @param debuggerId * @return server connection tests */ public static IDebugServerConnectionTest[] getTests(final String debuggerId) { Map<String, IDebugServerConnectionTest> filtersMap = new HashMap<String, IDebugServerConnectionTest>(); IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(EXTENSION_ID); for (int i = 0; i < elements.length; i++) { IConfigurationElement element = elements[i]; if (PROP_TEST.equals(element.getName())) { String debuggerTypeName = elements[i].getAttribute(PROP_DEBUGGER_TYPE); String overridesIds = elements[i].getAttribute(PROP_OVERRIDES_ID); if (debuggerTypeName.equals(PHPDebuggersRegistry.getDebuggerName(debuggerId))) { String id = element.getAttribute(PROP_ID); if (!filtersMap.containsKey(id)) { if (overridesIds != null) { StringTokenizer st = new StringTokenizer(overridesIds, ", "); //$NON-NLS-1$ while (st.hasMoreTokens()) { filtersMap.put(st.nextToken(), null); } } try { filtersMap.put(id, (IDebugServerConnectionTest) element.createExecutableExtension("class")); //$NON-NLS-1$ } catch (CoreException e) { Logger.logException(e); } } } } } Collection<IDebugServerConnectionTest> testers = filtersMap.values(); while (testers.remove(null)) ; // remove null elements IDebugServerConnectionTest[] debugTests = testers.toArray(new IDebugServerConnectionTest[testers.size()]); return debugTests; } }