/** * */ package org.nocket.gen.domain.visitor.html.styling; import org.nocket.gen.domain.DMDWebGenContext; import org.nocket.gen.domain.WebDomainProperties; import org.nocket.gen.domain.visitor.html.styling.bootstrap2.DefaultStylingStrategy; import org.nocket.gen.domain.visitor.html.styling.common.StylingStrategyI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Diese Factory verwaltet die zu nutzende Styling-Strategie. * F�hrend ist hier die Bootstrap2StylingStrategy. Diese wird genutzt, wenn keine * Stylingstrategie konfiguriert wurde. Wenn jedoch eine Styling-Strategie * kongiguriert wurde, dann wird diese Strategie per Reflection initialisiert * und von dieser Factory zur�ck geliefert. * * Konfiguration erfolgt in der <i>gengui.properties</i> und dort unter * dem Key <i>nocket.styling.strategy</i> * * @author Thomas.Veit@Bertelsmann.de * */ public class StylingFactory { private static StylingStrategyI strategyInstance; final private static Logger log = LoggerFactory.getLogger(StylingFactory.class); /** * Accessor an den Singleton der Styling-Strategie */ public static StylingStrategyI getStylingStrategy() { return getStrategyInstance(null); } public static StylingStrategyI getStylingStrategy(DMDWebGenContext<?> context) { return getStrategyInstance(context); } /** * Neue Instanz der aktuellen Styling Strategie erstellen * @param context Generator-Kontext, kann im Normalbetrieb auch Null sein * @return Neu erstellte Instanz der Styling-Strategie */ public static StylingStrategyI newStylingStrategyInstance(DMDWebGenContext<?> context) { StylingStrategyI newInstance; try { // Konfiguration aus der gengui.properties lesen String strategyClass = new WebDomainProperties().getStylingStrategyClass(); Class<? extends StylingStrategyI> clazz = (Class<? extends StylingStrategyI>) Class.forName(strategyClass); newInstance = clazz.newInstance(); log.debug("Choosed styling strategy: " + strategyClass); } catch (Exception e) { // wenn ein Fehler passiert, dann die Default Strategie nehmen newInstance = new DefaultStylingStrategy(); log.warn("Choosed styling strategy: Could not choose from properties, take default Bootstrap2StylingStrategy instead"); } if(context != null) { newInstance.setContext(context); } return newInstance; } /** * Singleton-Accessor f�r die Instanz der Styling-Strategie */ @SuppressWarnings("unchecked") private static StylingStrategyI getStrategyInstance(DMDWebGenContext<?> context) { if(strategyInstance == null) { // neuen Singleton initialisieren strategyInstance = newStylingStrategyInstance(context); } return strategyInstance; } }