package pt.ist.fenixframework.dml; import java.io.PrintWriter; /** * Code generator used for TxIntrospector information gathering. * Disabled by default. You can enable it by adding * <params> * <ptIstTxIntrospectorEnable>true</ptIstTxIntrospectorEnable> * </params> * to the configuration section of the dml-maven-plugin plugin in your pom.xml. * * Note that this code generator will only work with backends which use TxStats * as its TxIntrospector. * */ public class TxIntrospectorCodeGenerator extends DAPCodeGenerator { public static final String TXINTROSPECTOR_ON_CONFIG_KEY = pt.ist.fenixframework.txintrospector.TxIntrospector.TXINTROSPECTOR_ON_CONFIG_KEY; public static final String TXINTROSPECTOR_ON_CONFIG_VALUE = pt.ist.fenixframework.txintrospector.TxIntrospector.TXINTROSPECTOR_ON_CONFIG_VALUE; private static final String TXSTATS_FULL_CLASS = pt.ist.fenixframework.txintrospector.TxStats.class.getName(); private static final String TX_STATS_INSTANCE = "((" + TXSTATS_FULL_CLASS + ")" + pt.ist.fenixframework.FenixFramework.class.getName() + ".getTransaction().getTxIntrospector())"; private final boolean enabled; public TxIntrospectorCodeGenerator(CompilerArgs compArgs, DomainModel domainModel) { super(compArgs, domainModel); String param = compArgs.getParams().get(TXINTROSPECTOR_ON_CONFIG_KEY); enabled = (param != null) && param.trim().equalsIgnoreCase(TXINTROSPECTOR_ON_CONFIG_VALUE); } @Override protected void generateDefaultRelationListeners(Role role, PrintWriter out) { super.generateDefaultRelationListeners(role, out); if (enabled) { print(out, ", " + TXSTATS_FULL_CLASS + ".STATS_LISTENER"); } } @Override protected void generateBaseClassConstructorsBody(DomainClass domClass, PrintWriter out) { super.generateBaseClassConstructorsBody(domClass, out); if (enabled) { if (domClass.getSuperclass() == null) { onNewline(out); print(out, TX_STATS_INSTANCE + ".addNewObject(this);"); } } } @Override protected void generateSetterBody(DomainClass domainClass, String setterName, Slot slot, PrintWriter out) { super.generateSetterBody(domainClass, setterName, slot, out); generateSetterTxIntrospectorStatement(domainClass, slot, out); } protected void generateSetterTxIntrospectorStatement(DomainClass domainClass, Slot slot, PrintWriter out) { if (enabled) { onNewline(out); print(out, TX_STATS_INSTANCE + ".addModifiedObject(this);"); } } @Override protected void generateBackEndIdClassBody(PrintWriter out) { if (enabled) { // add parameter in static initializer block newline(out); newBlock(out); print(out, "setParam(\"" + TXINTROSPECTOR_ON_CONFIG_KEY + "\", \"" +TXINTROSPECTOR_ON_CONFIG_VALUE + "\");"); closeBlock(out); } super.generateBackEndIdClassBody(out); } }