package ch.panter.demo.strategy; import java.util.ArrayList; import java.util.List; import ch.panter.demo.strategy.impl.LoggingOutputStrategy; import ch.panter.demo.strategy.impl.NoopOutputStrategy; import ch.panter.demo.strategy.impl.PopupOutputStrategy; import ch.panter.demo.strategy.impl.StderrOutputStrategy; import ch.panter.demo.strategy.impl.StdoutOutputStrategy; import ch.panter.demo.strategy.impl.TimeOutputStrategy; import ch.panter.demo.strategy.impl.XMLOuputStrategy; /** * Factory to register and retrieve output strategies * * @author bseelige * */ public class OutputStrategyFactory { /** list holding all available output strategies */ static List<OutputStrategy> strategies = new ArrayList<OutputStrategy>(); /** a human readable description of all output strategies */ static String description = ""; /** initial list out output strategies available */ static { addStrategy(NoopOutputStrategy.class); addStrategy(StdoutOutputStrategy.class); addStrategy(StderrOutputStrategy.class); addStrategy(XMLOuputStrategy.class); addStrategy(LoggingOutputStrategy.class); addStrategy(TimeOutputStrategy.class); addStrategy(PopupOutputStrategy.class); } /** @return strategy with given id */ public static OutputStrategy getStrategy(int id) { return strategies.get(id); } /** * adds a new output strategy * * instantiates strategy and adds it to description * */ public static void addStrategy(Class clazz) { try { strategies.add((OutputStrategy) clazz.newInstance()); description = description + (strategies.size()-1) +": " +clazz.getSimpleName()+"\n"; } catch (Exception e) { e.printStackTrace(); } } /** @return human readable description of all output strategies */ public static String getDescription() { return description; } }