package com.oopdev.io.core.component.loader; import java.util.List; import java.util.Map; import javax.inject.Named; import com.oopdev.io.core.app.IOCoreConstants; import com.oopdev.io.core.bean.support.IOBeanSupportManager; import com.oopdev.io.core.component.reflects.pojo.IOClass; import com.oopdev.io.core.exceptions.IOCoreException; import com.oopdev.io.core.manager.IOAbstractManager; import com.oopdev.io.core.manager.IOManagerMap; import com.oopdev.io.core.manager.loader.IOManagerLoader; import com.oopdev.io.core.util.IOComponentUtility; import com.oopdev.io.core.util.IOLoaderUtility; import com.oopdev.io.util.exceptions.IOUtilException; import com.oopdev.io.util.logger.IOLogger; /** * * @author kamilbukum * */ public class IOComponentLoader { private static IOLogger logger=IOLogger.getIOLogger(IOCoreConstants.IO_CORE_LOG_PATH,IOComponentLoader.class); /** * * @param packageNames * @throws IOUtilException */ public static void loadComponents(String packageNames) throws IOUtilException{ // Each IO Framework have a manager for component initializing... logger.info("com.oopdev.io.core.component.loader.IOComponentLoader.loadComponents.io.manager.initializing"); // Uygulamanin Desteklediği Bean Frameworkleri aliniyor. IOBeanSupportManager.loadBeanSupports(); IOManagerLoader.loadManagers(); logger.info("com.oopdev.io.core.component.loader.IOComponentLoader.loadComponents.named.component.finding"); List<Class<?>> namedClassList=IOLoaderUtility.getClassListByAnnotation(packageNames,Named.class); logger.info("com.oopdev.io.core.component.loader.IOComponentLoader.loadComponents.named.component.finded",namedClassList.size()); for (Class<?> clazz : namedClassList) { for (String managerKey : IOManagerMap.getManagerKeyList()) { IOAbstractManager abstractManager=IOManagerMap.getManager(managerKey); if(IOComponentUtility.isCanBeComponent(abstractManager, clazz)){ Named named=clazz.getAnnotation(Named.class); Map<String, IOClass> componentMap=IOComponentMap.getComponentclassmap().get(abstractManager.getClass().getName()); Map<String, IOScopeType> scopeMap=IOComponentMap.getComponentscopemap().get(abstractManager.getClass().getName()); if(!componentMap.containsKey(named.value())){ componentMap.put(named.value(), abstractManager.createComponent(named.value(),clazz)); IOScopeType ioScopeType=IOComponentUtility.getScope(IOComponentUtility.getCDIScope(clazz)); scopeMap.put(named.value(),ioScopeType); logger.info("com.oopdev.io.core.component.loader.IOComponentLoader.loadComponents.component.added",named.value()); }else{ IOClass ioClass=componentMap.get(named.value()); if(!ioClass.getClazz().equals(clazz)){ throw new IOCoreException("com.oopdev.io.core.component.loader.IOComponentLoader.loadComponents.duplicate.named.error",new Object[]{named.value(),ioClass.getClazz().getName(),clazz.getName()}); }else{ logger.warn("com.oopdev.io.core.component.loader.IOComponentLoader.loadComponents.component.already.added",named.value()); } } } } } } }