From 639a42bbbedd7a356df7b7b5784d5049a9b4b0cc Mon Sep 17 00:00:00 2001
From: Anders Nilsson <anders.nilsson@cs.lth.se>
Date: Mon, 3 Sep 2007 15:32:28 +0200
Subject: [PATCH] The configForm example will now generate an identical html
 form as done using xslt.

---
 .bzrignore                              |   1 +
 examples/configForm/HTMLGen.jrag        | 167 +++++++++++++++++++++++-
 examples/configForm/img/hole_four.jpg   | Bin 0 -> 5021 bytes
 examples/configForm/img/hole_one.jpg    | Bin 0 -> 4240 bytes
 examples/configForm/img/hole_two.jpg    | Bin 0 -> 4122 bytes
 examples/configForm/img/pattern_one.jpg | Bin 0 -> 3686 bytes
 examples/configForm/img/pattern_two.jpg | Bin 0 -> 3686 bytes
 examples/configForm/img/shape_cut.jpg   | Bin 0 -> 3752 bytes
 examples/configForm/img/shape_sharp.jpg | Bin 0 -> 3101 bytes
 examples/configForm/img/shape_soft.jpg  | Bin 0 -> 3889 bytes
 examples/configForm/img/text_area.jpg   | Bin 0 -> 7793 bytes
 11 files changed, 163 insertions(+), 5 deletions(-)
 create mode 100644 examples/configForm/img/hole_four.jpg
 create mode 100644 examples/configForm/img/hole_one.jpg
 create mode 100644 examples/configForm/img/hole_two.jpg
 create mode 100644 examples/configForm/img/pattern_one.jpg
 create mode 100644 examples/configForm/img/pattern_two.jpg
 create mode 100644 examples/configForm/img/shape_cut.jpg
 create mode 100644 examples/configForm/img/shape_sharp.jpg
 create mode 100644 examples/configForm/img/shape_soft.jpg
 create mode 100644 examples/configForm/img/text_area.jpg

diff --git a/.bzrignore b/.bzrignore
index 604c3a0..1f4b69e 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -13,3 +13,4 @@ examples/configForm/configForm.ast
 examples/configForm/configForm.jjt
 javadoc
 SchemaCompile.jar
+examples/configForm/config-sheet.html
diff --git a/examples/configForm/HTMLGen.jrag b/examples/configForm/HTMLGen.jrag
index 8b41aba..fcea9ca 100644
--- a/examples/configForm/HTMLGen.jrag
+++ b/examples/configForm/HTMLGen.jrag
@@ -24,7 +24,7 @@ aspect HTMLGen {
     }
 
     public void configuration_sheet.genHTML(int ind, PrintStream pStream) {
-        pStream.println(ind(ind)+"<?xml version=\"1.0\" encoding=\"UTF-8\"?><");
+        pStream.println(ind(ind)+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
         pStream.println(ind(ind)+"<html>");
         ind++;
         pStream.println(ind(ind)+"<head>");
@@ -33,22 +33,143 @@ aspect HTMLGen {
         pStream.println(ind(ind)+"<body>");
         ind++;
         pStream.println(ind(ind)+"<center>");
-        pStream.println(ind(ind+1)+"<h1>"+name()+"/h1>");
+        pStream.println(ind(ind+1)+"<h1>"+name()+"</h1>");
         pStream.println(ind(ind)+"</center>");
         pStream.println(ind(ind)+"<table border=\"1\" valign=\"top\">");
         ind++;
         pStream.println(ind(ind)+"<tr bgcolor=\"lightgray\">");
+        ind++;
+        pStream.println(ind(ind)+"<th>");
+        pStream.println(ind(ind+1)+"<h2>Specifications</h2>");
+        pStream.println(ind(ind)+"</th>");
+        pStream.println(ind(ind)+"<th>");
+        pStream.println(ind(ind+1)+"<h2>Processes</h2>");
+        pStream.println(ind(ind)+"</th>");
+        ind--;
+        pStream.println(ind(ind)+"</tr>");
+        pStream.println(ind(ind)+"<tr>");
+        ind++;
+        pStream.println(ind(ind)+"<td bgcolor=\"lightblue\">");
+        getSpecifications().genHTML(ind,pStream);
+        pStream.println(ind(ind)+"</td>");
+        pStream.println(ind(ind)+"<td bgcolor=\"yellow\">");
+        getTasks().genHTML(ind,pStream);
+        pStream.println(ind(ind)+"</td>");
+        ind--;
         pStream.println(ind(ind)+"</tr>");
         ind--;
         pStream.println(ind(ind)+"</table>");
         ind--;
         pStream.println(ind(ind)+"</body>");
-        super.genHTML(ind,pStream);
         ind--;
         pStream.println(ind(ind)+"</html>");
     }
-    
-    
+
+    public void specifications.genHTML(int ind, PrintStream pStream) {
+        pStream.println(ind(ind)+"<form action=\"specifications\" method=\"get\" ");
+        pStream.println("enctype=\"application/x-www-form-urlencoded\">");
+        ind++;
+        for (int i=0; i<getNumElement(); i++) {
+            getElement(i).genHTML(ind,pStream);
+        }
+        pStream.println(ind(ind)+"<hr/>");        
+        pStream.println(ind(ind)+"<input type=\"reset\" value=\"Cancel\"/>");        
+        pStream.println(ind(ind)+"<input type=\"submit\" value=\"Submit\"/>");        
+        ind--;
+        pStream.println(ind(ind)+"</form>");        
+    }
+
+    public void spec.genHTML(int ind, PrintStream pStream) {
+        pStream.println(ind(ind)+"<h2>"+name()+"</h2>");
+        pStream.println(ind(ind)+"<table>");
+        super.genHTML(ind+1,pStream);
+        pStream.println(ind(ind)+"</table>");
+    }
+
+    public void option.genHTML(int ind, PrintStream pStream) {
+        pStream.println(ind(ind)+"<tr>");
+        for (int i=0; i<getNumElement(); i++) {
+            Element e = getElement(i);
+            if (e instanceof param && ((param) e).hasValue()) {
+                e.genHTML(ind,pStream);
+            }
+        }
+        for (int i=0; i<getNumElement(); i++) {
+            Element e = getElement(i);
+            if (e instanceof img) {
+                e.genHTML(ind,pStream);
+            }
+        }
+        for (int i=0; i<getNumElement(); i++) {
+            Element e = getElement(i);
+            if (e instanceof param && !((param) e).hasValue()) {
+                e.genHTML(ind,pStream);
+            }
+        }
+        pStream.println(ind(ind)+"</tr>");
+    }
+
+    public void param.genHTML(int ind, PrintStream pStream) {
+        if (hasValue()) {
+            pStream.println(ind(ind)+"<td>");
+            pStream.println(ind(ind+1)+"<input type=\"radio\" name=\""+name()+
+                            "\" value=\""+value()+"\"/>");
+            pStream.println(ind(ind)+"</td>");
+            pStream.println(ind(ind)+"<td>");
+            pStream.println(ind(ind+1)+text());
+            pStream.println(ind(ind)+"</td>");
+        } else {
+            pStream.println(ind(ind)+"<td>");
+            pStream.println(ind(ind+1)+text());
+            pStream.println(ind(ind)+"</td>");
+            pStream.println(ind(ind)+"<td>");
+            pStream.println(ind(ind+1)+"<input type=\"text\" name=\""+name()+
+                            "\" size=\"2\"/>");
+            pStream.println(ind(ind)+"</td>");
+        }
+    }
+
+    public void img.genHTML(int ind, PrintStream pStream) {
+        pStream.println(ind(ind)+"<td>");
+        pStream.println(ind(ind+1)+"<img src=\""+src()+"\"/>");
+        pStream.println(ind(ind)+"</td>");
+    }
+
+    public void task.genHTML(int ind, PrintStream pStream) {
+        pStream.println(ind(ind)+"<form action=\""+name()+
+                        "method=\"get\" enctype=\"application/x-www-form-urlencoded\">");
+        ind++;
+        pStream.println(ind(ind)+"<h2>"+name()+"</h2>");
+        pStream.println(ind(ind)+"<table>");
+        ind++;
+        super.genHTML(ind,pStream);
+        pStream.println(ind(ind)+"<tr><td/><td><input type=\"submit\" value=\"Execute\"/></td></tr>");
+        ind--;
+        pStream.println(ind(ind)+"</table>");
+        ind--;
+        pStream.println(ind(ind)+"</form>");
+    }
+
+}
+
+aspect Navigation { //Should preferably be automatically generated instead
+    public ComplexElement configuration_sheet.getSpecifications() {
+        for (int i=0; i<getNumElement(); i++) {
+            if (getElement(i) instanceof specifications) {
+                return (specifications) getElement(i);
+            }
+        }
+        return null;
+    }
+
+    public ComplexElement configuration_sheet.getTasks() {
+        for (int i=0; i<getNumElement(); i++) {
+            if (getElement(i) instanceof tasks) {
+                return (tasks) getElement(i);
+            }
+        }
+        return null;
+    }
 }
 
 aspect Misc {
@@ -65,6 +186,42 @@ aspect Misc {
         return super.name();
     }
 
+    syn lazy String param.value() {
+        for (int i=0; i<getNumAttribute(); i++) {
+            if (getAttribute(i) instanceof value) {
+                return getAttribute(i).value().replace("\""," ").trim();
+            }
+        }
+        return "";
+    }
+
+    syn lazy String param.text() {
+        for (int i=0; i<getNumAttribute(); i++) {
+            if (getAttribute(i) instanceof text) {
+                return getAttribute(i).value().replace("\""," ").trim();
+            }
+        }
+        return "";
+    }
+
+    syn lazy String img.src() {
+        for (int i=0; i<getNumAttribute(); i++) {
+            if (getAttribute(i) instanceof src) {
+                return getAttribute(i).value().replace("\""," ").trim();
+            }
+        }
+        return "";
+    }
+
+    syn lazy boolean param.hasValue() {
+        for (int i=0; i<getNumAttribute(); i++) {
+            if (getAttribute(i) instanceof value) {
+                return true;
+            }
+        }
+        return false;
+    }
+
     syn lazy String Attribute.value() {
         return getAttrValue().getLITERAL();
     }
diff --git a/examples/configForm/img/hole_four.jpg b/examples/configForm/img/hole_four.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ed8c55ce8475681b01939c2ace7b62ace05a41f7
GIT binary patch
literal 5021
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

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/hole_one.jpg b/examples/configForm/img/hole_one.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..fd31be7f2d450e6d57d84eaa49bfcc4d7ac9aeee
GIT binary patch
literal 4240
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
YnsnWz-E-pF6UlXX9p)>W=;--h0kR}6<NyEw

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/hole_two.jpg b/examples/configForm/img/hole_two.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..306430827f2bdf2b155870a0b2b6e80014b0bc9e
GIT binary patch
literal 4122
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
HAsv4QOrFG<

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/pattern_one.jpg b/examples/configForm/img/pattern_one.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f9bf26e445a9830e969fd14219f1d6c376a91919
GIT binary patch
literal 3686
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
GJ@^GXL-+~+

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/pattern_two.jpg b/examples/configForm/img/pattern_two.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..f9bf26e445a9830e969fd14219f1d6c376a91919
GIT binary patch
literal 3686
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
GJ@^GXL-+~+

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/shape_cut.jpg b/examples/configForm/img/shape_cut.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..6c3af10027be9fdefba6fe9a65e074034ca76e02
GIT binary patch
literal 3752
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

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/shape_sharp.jpg b/examples/configForm/img/shape_sharp.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..1eab88b3a965094aff47a1f28ecd7c4115edafd4
GIT binary patch
literal 3101
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
KZt5&Y)&Br^4av&@

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/shape_soft.jpg b/examples/configForm/img/shape_soft.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..da54844ccee81b9d7d9da25f3b52468c8fbfee5d
GIT binary patch
literal 3889
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

literal 0
HcmV?d00001

diff --git a/examples/configForm/img/text_area.jpg b/examples/configForm/img/text_area.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..a0f4f30c3fe48a5d1581c52b2cf847be5258a93d
GIT binary patch
literal 7793
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
HMD*aFvO!RQ

literal 0
HcmV?d00001

-- 
GitLab