@
#include "TrafficLight-sharedFunctions.cws"

function generateJavaClass(strategy : node) {
	@class @strategy.name@ extends TrafficLightStrategy {
	public @strategy.name@() {}

	public bool start() {
		return @strategy.start@;
	}

	public int executeRules() {
		int iTriggeredRules = 0;
		if (bActive_) {
@
	incrementIndentLevel();
	foreach i in strategy.rules {
		@		if (executeRule@i.key()@()) ++iTriggeredRules;
@
	}
	@	}
	return iTriggeredRules;
}

@

	foreach i in strategy.rules {
		@private bool executeRule@i.key()@() {
	if (@convertAntecedent2Cpp(i.condition)@ == false) {
		return false;
	}
@
		foreach j in i.actions {
			writeAction<j>(j, "Java");
		}
		@	return true;
}

@
	}
	decrementIndentLevel();
	@}

@
}

if getMarkupKey() == "strategies" {
	// the current markup key is worth "strategies":
	// generate the implementation of each strategy
	// class, coming from ".tlc" files
	foreach strategy in this.strategies {
		generateJavaClass(strategy);
	}
} else if startString(getMarkupKey(), "DSL: ") {
	// the current markup key embeds strategies written
	// directly into the Java file
	if subString(getMarkupKey(), 5) != "TrafficLight" {
		error("only one DSL recognized for the moment: 'TrafficLight'!");
	}

	// parsing of the strategies attached to the markup: the function
	// 'getMarkupValue()' returns data embedded in the markup
	local theParseTree;
	parseStringAsBNF("TrafficLight.cwp", theParseTree, getMarkupValue());

	@*/
@
	foreach strategy in theParseTree.strategies {
		generateJavaClass(strategy);
	}
	@/*
@
}