package com.nvarghese.beowulf.scs.categorizers; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.reflections.Reflections; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.code.morphia.Datastore; import com.nvarghese.beowulf.common.scan.model.WebScanDocument; import com.nvarghese.beowulf.scs.ScsManager; public class MetaCategorizer { private List<TransactionCategorizer> transactionCategorizers = new ArrayList<TransactionCategorizer>(); private List<Categorizer> categorizers = new ArrayList<Categorizer>(); static Logger logger = LoggerFactory.getLogger(MetaCategorizer.class); public void initCategorizers(Datastore ds, WebScanDocument webScanDocument) { Reflections reflections = ScsManager.getInstance().getReflections(); Set<Class<? extends Categorizer>> subTypes = reflections.getSubTypesOf(Categorizer.class); for (Class c : subTypes) { if (c.getName().contains(".impl.")) { try { Constructor constructor = c.getConstructor(Datastore.class, WebScanDocument.class); Categorizer categorizer = (Categorizer) constructor.newInstance(ds, webScanDocument); categorizer.initialize(); categorizers.add(categorizer); logger.debug("Added class `{}` to categorizer list", c.getName()); } catch (InstantiationException e) { logger.error("Failed to initialize categorizer of type: {}", c.getName(), e); } catch (IllegalAccessException e) { logger.error("Failed to initialize categorizer of type: {}", c.getName(), e); } catch (SecurityException e) { logger.error("Failed to initialize categorizer of type: {}", c.getName(), e); } catch (NoSuchMethodException e) { logger.error("Failed to initialize categorizer of type: {}", c.getName(), e); } catch (IllegalArgumentException e) { logger.error("Failed to initialize categorizer of type: {}", c.getName(), e); } catch (InvocationTargetException e) { logger.error("Failed to initialize categorizer of type: {}", c.getName(), e); } } else { logger.debug("Excluded class `{}` from categorizer list", c.getName()); } } } public void initTransactionCategorizers(Datastore ds, WebScanDocument webScanDocument) { Reflections reflections = ScsManager.getInstance().getReflections(); Set<Class<? extends TransactionCategorizer>> subTypes = reflections.getSubTypesOf(TransactionCategorizer.class); for (Class c : subTypes) { if (c.getName().contains(".impl.")) { try { Constructor constructor = c.getConstructor(Datastore.class, WebScanDocument.class); TransactionCategorizer txnCategorizer = (TransactionCategorizer) constructor.newInstance(ds, webScanDocument); ((Categorizer) txnCategorizer).initialize(); transactionCategorizers.add(txnCategorizer); logger.info("Added class `{}` to TransactionCategorizer list", c.getName()); } catch (InstantiationException e) { logger.error("Failed to initialize TransactionCategorizer of type: {}", c.getName(), e); } catch (IllegalAccessException e) { logger.error("Failed to initialize TransactionCategorizer of type: {}", c.getName(), e); } catch (SecurityException e) { logger.error("Failed to initialize TransactionCategorizer of type: {}", c.getName(), e); } catch (NoSuchMethodException e) { logger.error("Failed to initialize TransactionCategorizer of type: {}", c.getName(), e); } catch (IllegalArgumentException e) { logger.error("Failed to initialize TransactionCategorizer of type: {}", c.getName(), e); } catch (InvocationTargetException e) { logger.error("Failed to initialize TransactionCategorizer of type: {}", c.getName(), e); } } else { logger.info("Excluded class `{}` from TransactionCategorizer list", c.getName()); } } } public void runAllCategorizers() { } public List<TransactionCategorizer> getTransactionCategorizers() { return transactionCategorizers; } public List<Categorizer> getCategorizers() { return categorizers; } }