Added ETL visitor and unparser
diff --git a/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/dom/IEtlVisitor.java b/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/dom/IEtlVisitor.java
new file mode 100644
index 0000000..9ac7df4
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/dom/IEtlVisitor.java
@@ -0,0 +1,9 @@
+package org.eclipse.epsilon.etl.dom;
+
+import org.eclipse.epsilon.erl.dom.IErlVisitor;
+
+public interface IEtlVisitor extends IErlVisitor{
+	
+	public void visit(TransformationRule transformationRule);
+
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/dom/TransformationRule.java b/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/dom/TransformationRule.java
index fb0021a..01334a3 100644
--- a/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/dom/TransformationRule.java
+++ b/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/dom/TransformationRule.java
@@ -260,6 +260,11 @@
 			&& appliesTo(instance, context, false);

 	}

 	

+	public void accept(IEtlVisitor visitor) {

+		visitor.visit(this);

+	}

+

+	

 	public void dispose() {

 		rejected = null;

 		transformedElements = null;

diff --git a/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/parse/EtlUnparser.java b/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/parse/EtlUnparser.java
new file mode 100644
index 0000000..074d0c4
--- /dev/null
+++ b/plugins/org.eclipse.epsilon.etl.engine/src/org/eclipse/epsilon/etl/parse/EtlUnparser.java
@@ -0,0 +1,41 @@
+package org.eclipse.epsilon.etl.parse;
+
+import java.util.Iterator;
+
+import org.eclipse.epsilon.eol.dom.Parameter;
+import org.eclipse.epsilon.erl.parse.ErlUnparser;
+import org.eclipse.epsilon.etl.EtlModule;
+import org.eclipse.epsilon.etl.dom.IEtlVisitor;
+import org.eclipse.epsilon.etl.dom.TransformationRule;
+
+public class EtlUnparser extends ErlUnparser implements IEtlVisitor {
+
+	@Override
+	protected void unparseRules() {
+		((EtlModule) module).getTransformationRules().forEach(c -> {
+			c.accept(this);
+			newline();
+		});
+	}
+
+	@Override
+	public void visit(TransformationRule transformationRule) {
+		buffer.append("rule ");
+		buffer.append(transformationRule.getName());
+		newline();
+		buffer.append("transform ");
+		transformationRule.getSourceParameter().accept(this);
+		newline();
+		buffer.append("to ");
+		Iterator<Parameter> li = transformationRule.getTargetParameters().iterator();
+		while (li.hasNext()) {
+			li.next().accept(this);
+			if (li.hasNext())
+				comma();
+		}
+		printGuard(transformationRule.getGuard());
+		newline();
+		transformationRule.getBody().accept(this);
+	}
+
+}
\ No newline at end of file