/**
* <p>Copyright: Copyright (c) 2009</p>
* <p>Company: �������ӹɷ�����˾</p>
*/
package com.hundsun.ares.studio.core.registry;
import java.io.PrintStream;
import java.util.Collection;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.Platform;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Multimap;
import com.hundsun.ares.studio.core.ARESCore;
/**
* ͨ�õ�ע����࣬����MultiMap��ʵ��
* @author sundl
*/
public abstract class CommonMapRegistry<T> implements ICommonRegistry<T>{
private static final Logger logger = Logger.getLogger(CommonMapRegistry.class);
protected Multimap<String, T> map = ArrayListMultimap.create();
public CommonMapRegistry () {
init();
}
protected void init() {
IExtensionRegistry reg = Platform.getExtensionRegistry();
IConfigurationElement[] elements = reg.getConfigurationElementsFor(getExtensionPointPluginId(), getExtensionPointId());
for (IConfigurationElement element : elements) {
handleConfigElement(element);
}
logger.debug("��չ��" + getExtensionPointId() + "��ʼ�����!");
for (String str : map.keySet()) {
logger.debug(str + "===>" +map.get(str));
}
}
protected String getExtensionPointPluginId() {
return ARESCore.PLUGIN_ID;
}
public abstract String getExtensionPointId();
protected abstract void handleConfigElement(IConfigurationElement element);
public Collection<T> get(String id) {
return map.get(id);
}
public Collection<T> getDescriptors() {
return map.values();
}
public void print(PrintStream ps) {
ps.println("Registry: " + getExtensionPointId());
for (String str : map.keySet()) {
ps.println(map.get(str));
}
}
}