/******************************************************************************* * This file is protected by Copyright. * Please refer to the COPYRIGHT file distributed with this source distribution. * * This file is part of REDHAWK IDE. * * 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 *******************************************************************************/ package gov.redhawk.ide.snapshot.writer.internal; import java.util.HashMap; import java.util.Map; import gov.redhawk.ide.snapshot.ui.SnapshotActivator; import gov.redhawk.ide.snapshot.writer.IDataWriterDesc; import gov.redhawk.ide.snapshot.writer.IDataWriterRegistry; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.dynamichelpers.ExtensionTracker; import org.eclipse.core.runtime.dynamichelpers.IExtensionChangeHandler; import org.eclipse.core.runtime.dynamichelpers.IExtensionTracker; import org.eclipse.core.runtime.dynamichelpers.IFilter; /** * */ public enum DataWriterRegistry implements IExtensionChangeHandler, IDataWriterRegistry { INSTANCE; private static final String EP_ID = "writers"; private ExtensionTracker tracker; private Map<String, IDataWriterDesc> registry = new HashMap<String, IDataWriterDesc>(); private DataWriterRegistry() { populateRegistry(); } private void populateRegistry() { final IExtensionRegistry reg = Platform.getExtensionRegistry(); final IExtensionPoint ep = reg.getExtensionPoint(SnapshotActivator.PLUGIN_ID, EP_ID); this.tracker = new ExtensionTracker(reg); if (ep != null) { final IFilter filter = ExtensionTracker.createExtensionPointFilter(ep); this.tracker.registerHandler(this, filter); final IExtension[] extensions = ep.getExtensions(); for (final IExtension extension : extensions) { addExtension(this.tracker, extension); } } } /* (non-Javadoc) * @see gov.redhawk.ide.snapshot.datareceiver.IDataReceiverRegistry#getRecieverDesc(java.lang.String) */ @Override public IDataWriterDesc getRecieverDesc(String id) { return registry.get(id); } /* (non-Javadoc) * @see gov.redhawk.ide.snapshot.datareceiver.IDataReceiverRegistry#getRecieverDescs() */ @Override public IDataWriterDesc[] getRecieverDescs() { return registry.values().toArray(new IDataWriterDesc[registry.size()]); } @Override public void addExtension(IExtensionTracker tracker, IExtension extension) { for (IConfigurationElement element : extension.getConfigurationElements()) { if ("writer".equals(element.getName())) { addDataReceiver(element); } } } private void addDataReceiver(IConfigurationElement element) { DataWriterDesc newDesc = new DataWriterDesc(element); registry.put(newDesc.getID(), newDesc); } @Override public void removeExtension(IExtension extension, Object[] objects) { // TODO Auto-generated method stub } }