AspectJ Synchronous MSC Trace Example
=====================================

This project shows how synchronous MSC trace functionality can be applied to an
eTrice project using AspectJ. The example takes the PingPong model from the 
Java tutorial and adds a new aspect that can be woven with the generated 
eTrice code to automatically instrument method calls.

Prerequisites
-------------

- An Eclipse environment with the following software installed:
	- eTrice 0.3.0
	- AspectJ
		- the latest Kepler release can be found at
		  http://download.eclipse.org/tools/ajdt/43/update
		- install the feature "AspectJ Development Tools"
- Optional software:
	Trace2UML
		- used to view trace logs as graphical message sequence charts
		- http://trace2uml.tigris.org

Setup
-----

1. Open an Eclipse workspace. 
2. Add the following plugins to the Eclipse workspace:
	- org.eclipse.etrice.runtime.java
	- org.eclipse.etrice.modellib.java
	- org.eclipse.etrice.runtime.java.aspects
3. Import the example project org.eclipse.etrice.tutorials.java.aspecttrace

Running the Example
-------------------

To run the example, perform the following steps:

1. Run the launcher /gen_PingPongJava_aspecttrace.launch to generate the eTrice 
   implementation code for the example (the trace aspect should be applied 
   automatically)
2. Run /src-gen/PingPong_Model/SubSysClass1Runner.java as a Java Application
3. In the Console, after the sender actor reaches state "ReceivedPong" type 
   "quit" to write the traces and terminate
4. Inspect the Synchronous MSC generated at /tmp/log/subSysRef1_Sync.seq

To remove the aspect from the build path and disable the Synchronous trace:

1. right click on the file /disableMSCLogger.ajproperties
2. click on AspectJ Tools > Apply Build Configuration

To add the aspect to the build path and enable the Synchronous trace:

1. right click on the file /enableMSCLogger.ajproperties
2. click on AspectJ Tools > Apply Build Configuration

Example Details
---------------

The example project is a copy of the PingPong example from the eTrice Java 
tutorial. It has been converted to an AspectJ project by right clicking on the 
project in the Explorer and selecting Configure > Convert to AspectJ Project.

AspectJ projects can be configured with "Inpath" and "Aspect Path" entries. 
Classes in the Inpath are considered as weaving targets by the AspectJ Builder.
Aspects in the Aspect Path are applied to the project's source folder as well as
classes in the Inpath.

In this example, the eTrice Java Runtime and the eTrice Java Modellib are 
added to the Inpath so that the trace aspect can be woven into them. The 
example also adds the org.eclipse.etrice.runtime.java.aspects library to the 
Aspect Path to provide core trace functionality. PingPongRTTrace is a concrete 
extension of AbstractRTTrace in the aspect library.

The PingPongRTTrace aspect can be easily enabled or disabled by adding and 
removing it in the Build Path. This is the purpose of the 
/enableMSCLogger.ajproperties and /disableMSCLogger.ajproperties files.

Modifying PingPongRTTrace
-------------------------

The output of the synchronous MSC trace can be adjusted by modifying the  
PingPongRTTrace aspect. The aspect defines two pointcuts, traceScope and 
traceFilter which can be used to control the trace output. For details about 
defining pointcuts, refer to the AspectJ Programming Guide at:

http://eclipse.org/aspectj/doc/released/progguide/index.html

Here are some examples:

To restrict traces to calls made by PingPong_Model classes modify traceScope:
	
	public pointcut traceScope(): rtClasses() && within(PingPong_Model.*);
	
To filter out calls made to and from PingPong_Model.Receiver actors, modify traceFilter:

	public pointcut traceFilter(): this(PingPong_Model.Receiver) || target(PingPong_Model.Receiver);