package org.openntf.xsp.starter.application; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.faces.component.UIComponent; import com.ibm.xsp.registry.FacesDefinition; import com.ibm.xsp.registry.FacesLibrary; import com.ibm.xsp.registry.FacesSharableRegistry; import com.ibm.xsp.registry.config.XspRegistryManager; import com.ibm.xsp.registry.config.XspRegistryProvider; public class XspRegistry { private final Map<Class<? extends UIComponent>, FacesDefinition> _reverseDefMap; private final Map<Class<? extends UIComponent>, String> _reverseTagMap; private final Map<String, Class<? extends UIComponent>> _tagMap; public XspRegistry() { _reverseDefMap = new HashMap<Class<? extends UIComponent>, FacesDefinition>(); _reverseTagMap = new HashMap<Class<? extends UIComponent>, String>(); _tagMap = new HashMap<String, Class<? extends UIComponent>>(); initRegistryMaps(); } @SuppressWarnings("unchecked") private void initRegistryMaps() { XspRegistryManager xrm = XspRegistryManager.getManager(); Collection<String> pids = xrm.getRegistryProviderIds(); for (String id : pids) { XspRegistryProvider curProv = xrm.getRegistryProvider(id); FacesSharableRegistry curReg = curProv.getRegistry(); Collection<String> uris = curReg.getLocalNamespaceUris(); for (String curUri : uris) { FacesLibrary fl = curReg.getLocalLibrary(curUri); List<FacesDefinition> defsList = fl.getDefs(); for (FacesDefinition curDef : defsList) { _reverseDefMap.put((Class<? extends UIComponent>) curDef.getJavaClass(), curDef); if (curDef.isTag()) { _reverseTagMap.put((Class<? extends UIComponent>) curDef.getJavaClass(), curDef.getTagName()); _tagMap.put(curDef.getTagName(), (Class<? extends UIComponent>) curDef.getJavaClass()); } } } } } public FacesDefinition getDefForClass(Class<? extends UIComponent> clazz) { FacesDefinition result = null; if (_reverseDefMap.containsKey(clazz)) { return _reverseDefMap.get(clazz); } else { while (clazz.getSuperclass() != null) { result = _reverseDefMap.get(clazz.getSuperclass()); if (result != null) return result; } } return result; } public FacesDefinition getTagForClass(Class<? extends UIComponent> clazz) { FacesDefinition def = getDefForClass(clazz); if (def != null) { return _reverseDefMap.get(def); } return null; } }