/******************************************************************************* * Copyright (c) 2010 Philipp Kursawe. * 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: * Philipp Kursawe (phil.kursawe@gmail.com) - initial API and implementation ******************************************************************************/ package copyto.core.internal.services; import java.util.Collection; import org.eclipse.core.runtime.IConfigurationElement; import copyto.core.TargetFactories; import copyto.core.TargetFactory; import copyto.core.TargetFactoryDescriptor; import eclipseutils.core.extensions.BaseExtensionDescriptor; import eclipseutils.core.extensions.ExtensionPoints; import eclipseutils.core.extensions.ExtensionVisitor; /** * * @author <a href="mailto:phil.kursawe@gmail.com">Philipp Kursawe</a> * */ public class ProtocolRegistryImpl implements TargetFactories { private static final String COPYTO_CORE_PROTOCOLS = "copyto.core.targetFactories"; private class TargetFactoryDescriptorImpl extends BaseExtensionDescriptor implements TargetFactoryDescriptor { private TargetFactory factory; public TargetFactoryDescriptorImpl(IConfigurationElement configElement) { super(configElement); } public TargetFactory getFactory() { if (null == factory) { try { factory = createExecutableExtension(); } catch (Exception e) { } } return factory; } } public TargetFactoryDescriptor find(final String id) { return ExtensionPoints.find(COPYTO_CORE_PROTOCOLS, BaseExtensionDescriptor.ID_ATT, id, new ExtensionVisitor<TargetFactoryDescriptor>() { @Override public TargetFactoryDescriptor create( IConfigurationElement config) { return new TargetFactoryDescriptorImpl(config); } }); } public Collection<TargetFactoryDescriptor> findAll() { return ExtensionPoints.visitAll(COPYTO_CORE_PROTOCOLS, new ExtensionVisitor<TargetFactoryDescriptor>( BaseExtensionDescriptor.ID_ATT) { @Override protected TargetFactoryDescriptor create( IConfigurationElement configElement) { return new TargetFactoryDescriptorImpl(configElement); } }); } }