1.JET生成java代码:
下列实例是一个模板,用于创建拥有任意数量属性的类。每个属性将有 getter 和 setter 与之关联,还有一些初始值。此外,所调用的函数的名称将输出到命令行,通过这种方式,模板即可为各函数添加简单的日志。
class <c:get select="/app/@class" /> { <c:iterate select="/app/property" var="p" > private <c:get select="$p/@type" /> <c:get select="$p/@name" />; </c:iterate> public <c:get select="/app/@class" />() { <c:iterate select="/app/property" var="p" > this.<c:get select="$p/@name" /> = <c:choose select="$p/@type" > <c:when test="'String'">"<c:get select="$p/@initial" />"</c:when> <c:otherwise><c:get select="$p/@initial" /></c:otherwise> </c:choose> ; </c:iterate> } <c:iterate select="/app/property" var="p" > public void set<c:get select=\ "camelCase($p/@name)" />(<c:get select="$p/@type" /> <c:get select="$p/@name" />) { System.out.println\ ("In set<c:get select=\ "camelCase($p/@name)" />()"); this.<c:get select="$p/@name" /> = <c:get select="$p/@name" />; } public <c:get select=\ "$p/@type" /> get<c:get select="camelCase($p/@name)" />() { System.out.println("In get<c:get select="camelCase($p/@name)" />()"); return <c:get select="$p/@name" />; } </c:iterate> }
这里是该模板的输入模型实例:
<app class="Car">
<property name="model" type="String" initial="Honda Accord" />
<property name="horsepower" type="int" initial="140" />
<property name="spareTires" type="boolean" initial="true" />
</app>
这些输入参数生成如下类:
class Car {
private String model;
private int horsepower;
private boolean spareTires;
public Car() {
this.model = "Honda Accord";
this.horsepower = 140;
this.spareTires = true;
}
public void setModel(String model) {
System.out.println("In setModel()");
this.model = model;
}
public String getModel() {
System.out.println("In getModel()");
return model;
}
public void setHorsepower(int horsepower) {
System.out.println("In setHorsepower()");
this.horsepower = horsepower;
}
public int getHorsepower() {
System.out.println("In getHorsepower()");
return horsepower;
}
public void setSparetires(boolean spareTires) {
System.out.println("In setSparetires()");
this.spareTires = spareTires;
}
public boolean getSparetires() {
System.out.println("In getSparetires()");
return spareTires;
}
}
2.JET生成其他代码:
为强调 JET 不仅仅可用来生成代码,我们给出了下面这个实例,这是一个模板,生成具有不同语气的电子邮件消息。所生成的各电子邮件的目的是是向某人索要求各种东西。下面提供控制文件(main.jet)及其调用的模板(email.jet)。
<c:iterate select="/app/email" var="currEmail" >
<ws:file template="templates/email.jet"
path="{$org.eclipse.jet.resource.project.name}/{$currEmail/@to}.txt" />
</c:iterate>
<c:setVariable var="numItems" select="0" />
<c:iterate select="$currEmail/request" var="r">
<c:setVariable var="numItems" select="$numItems+1" />
</c:iterate>
<c:set select="$currEmail" name="numItems"><c:get select="$numItems" /></c:set>
<c:choose select="$currEmail/@mood" >
<c:when test="'happy'">My dear</c:when>
<c:when test="'neutral'">Dear</c:when>
<c:when test="'angry'">My enemy</c:when>
</c:choose> <c:get select="$currEmail/@to" />,
I am writing you <c:choose select="$currEmail/@mood" >
<c:when test="'happy'">in joy </c:when>
<c:when test="'neutral'"></c:when>
<c:when test="'angry'">in burning anger </c:when>
</c:choose>to ask for <c:choose select="$currEmail/@numItems" >
<c:when test="1">
a <c:get select="$currEmail/request/@item" />.
</c:when>
<c:otherwise>
the following:
<c:setVariable var="i" select="0" />
<c:iterate select="$currEmail/request" var="r">
<c:setVariable var="i" select="$i+1" />
<c:get select="$i" />. <c:get select="$r/@item" />
</c:iterate>
</c:otherwise>
</c:choose>
<c:choose select="$currEmail/@mood">
<c:when test="'happy'">Please</c:when>
<c:when test="'neutral'">Please</c:when>
<c:when test="'angry'">Either suffer my wrath, or</c:when>
</c:choose> send me <c:choose select="$currEmail/@numItems">
<c:when test="1">
this item</c:when>
<c:otherwise>
these items</c:otherwise>
</c:choose> <c:choose select="$currEmail/@mood" >
<c:when test="'happy'">at your earliest convenience.</c:when>
<c:when test="'neutral'">promptly.</c:when>
<c:when test="'angry'">immediately!</c:when>
</c:choose>
<c:choose select="$currEmail/@mood" >
<c:when test="'happy'">Your friend,</c:when>
<c:when test="'neutral'">Sincerely,</c:when>
<c:when test="'angry'">In rage,</c:when>
</c:choose>
<c:get select="/app/@from" />
该模板的输入模型实例如下:
<app from="Nathan" >
<email to="Chris" mood="angry" >
<request item="well-written article" />
</email>
<email to="Nick" mood="happy" >
<request item="Piano" />
<request item="Lollipop" />
<request item="Blank DVDs" />
</email>
</app>
将 mood
电子邮件蓝图应用于这些参数,生成下列两个文件。