Erstellung und Verwendung von Java-Klassen
Das Erstellen von simplen Java-Klassen in TMLScript ist nicht nur einfach, es unterscheidet sich auch kaum von der Erstellung normaler JavaScript-Klassen:
<tml:script>
var list = new java.util.ArrayList();
list.add("Eintrag1");
list.add("Eintrag2");
list.add("Eintrag3");
this.setvar("Liste", list);
</tml:script>
Sie können die, in den Java-Standardpackages "java.*" enthaltenen Klassen, simpel und direkt instanzieren und mit ihren Methoden arbeiten. Wie hier demonstriert können diese Objekte sogar in TMLScript-Variablen abgespeichert und später verwendet werden.
Ein wenig aufwendiger ist es Klassen zu erstellen, die nicht zu den Java-Standardpackages gehören, z.B. ihre eigenen benutzerdefinierten Klassen:
<tml:script>
var myBean = Packages.de.innovationgate.beans.MyBean();
myBean.doSomething();
</tml:script>
Für diese Klassen muss das Schlüsselwort "Packages" vor den vollqualifizierten Klassennamen gestellt werden. Darüber hinaus ist die einzige Voraussetzung, dass die Klasse im Klassenpfad des Applikationsservers und der WGA-Applikation bekannt ist.
Arbeiten sie viel mit den Klassen eines speziellen Packages, so können sie, ganz wie in Java, das Package importieren um direkt damit arbeiten zu können:
<tml:script>
importPackage(java.net);
var url = new URL("http://www.innovationgate.de?param=a");
</tml:script>
Die Methode "importPackage" macht Java-Packages direkt verfügbar.
Auch statische Methoden und Eigenschaften sind wie in Java direkt an der Klasse verfügbar:
<tml:script>
importPackage(Packages.de.innovationgate.utils);
return WGUtils.strReplace("Fischers Fritz fischt frische Fische", "i", "ü", true);
</tml:script>
JavaScript-Objekte oder Java-Objekte?
Java-Methoden können in TMLScript direkt aufgerufen werden. Hierbei werden Javascript-Objekte wie String, Number, Boolean etc. automatisch in ihre Java-Pendants konvertiert, wenn sie als Parameter verwendet werden. Umgekehrt werden Java-Objekte wie String, Integer etc. die als Rückgabewerte von Java-Methoden verfügbar werden automatisch zu den Javascript-Pendants konvertiert.
Eine Ausnahme sind Datumswerte. Da das Javascript-Datumsobjekt Date nicht automatisch konvertiert wird empfiehlt sich stattdessen die Verwendung von Java-Datumsobjekten vom Typ "java.util.Date" sobald ein Datuumswert eine Rolle spielt. TMLScript bietet eine Reihe von Methoden an um Java-Datumswerte komfortabel zu erstellen, modifiziern und parsen:
this.createDate()
this.parseDate()
this.createCalendar()
Es existiert eine Funktion javaObject() um Javascript-Objekte innerhalb von TMLScript in ihre Java-Pendants umzuwandeln. Dies kann notwendig sein wenn sie eine Methode verwenden wollen die sich nur am Java- jedoch nicht am Javascript-Objekt befindet:
<tml:script>
return javaObject(" ein string ").trim();
</tml:script>
Die Methode trim(), die es nur am Java- nicht jedoch am JavaScript-String gibt, kann verwendet werden wenn der String zuvor durch die vordefinierte Methode "javaObject" konvertiert wurde. Diese Methode macht alle Methoden des Java-Strings sichtbar, versteckt aber gleichzeitig auch die Methoden des Javascript-Strings.
JavaBean-Methoden
Eine spezielle Funktionalität bietet TMScript/Rhino was Methoden mit JavaBean-Signaturen angeht, z.B.
String myObject.getName()
void myObject.setName(String name)
Diese Methoden können sowohl in ihrer vollständigen Version aufgerufen werden, sie können jedoch auch wie Felder behandelt werden, deren Wert ausgelesen bzw. geschrieben wird.
var name = myObject.name; // entspricht var name = myObject.getName()
myObject.name = name; // entspricht myObject.setName(name);
Zugriff auf die WGAPI
Die WGAPI ist der Kernbestandteil von WGA, der Verbindung zu den Content-Datenbanken aufbaut und sie nach Contents und Designs auswertet. Es handelt sich dabei um eine Objektbibliothek die in der Lage ist, alle für WGA verfügbaren Content-Quellen als Datenbanken auszuwerten. Gewissermassen setzt WGA auf der WGAPI auf und verwendet sie um an Daten zu kommen, während WGA selbst diese Daten im Internet publiziert. Wer Zugriff auf die WGAPI hat, der hat somit direkten Zugriff auf alle Daten und Funktionen der Content-Datenbanken.
TMLScript hat mehrere Schnittstellen zur WGAPI in Form von Methoden, die WGAPI-Objekte zurückgeben. Hier ein Beispiel:
<tml:script>
var db = this.db("ig");
var areaList = db.getAreas().iterator();
var result = "";
while (areaList.hasNext()) {
var area = areaList.next();
result += area.getName() + "<br/>";
}
return result;
</tml:script>
Über dieses Script wird eine Liste der, in der Datenbank mit Schlüssel "ig", enthaltenen Website-Bereiche erstellt. Der Zugriff auf die WGAPI wird hier über die Methode "this.db(dbkey)" hergestellt. Diese gibt ein Objekt vom Typ "WGDatabase" zurück, welches eine in WGA eingebundene Content-DB repräsentiert.
Eine andere Methode zum Zugriff auf die WGAPI ist besser, wenn man im aktuellen TML-Kontext auf die WGAPI zugreifen will:
<tml:script>
var content = this.content();
var contentTitle = content.title;
var structTitle = content.structEntry.title;
var areaName = content.structEntry.area.name;
</tml:script>
Über die Methode "this.content()" erhalten sie das "WGContent"-Objekt, welches in der WGAPI ein Content-Dokument repräsentiert. In diesem Falle ist es nicht ein x-beliebiges Content-Dokument sondern dasjenige, welches sich aktuell im TML-Kontext befindet. Natürlich haben sie auch hier Zugriff auf die Methoden des Content-Objektes, welche in diesem Beispiel alle in Property-Syntax ausgedrückt wurden (da sie JavaBean-Signaturen besitzen):
WGContent.getTitle()
WGContent.getStructEntry() // Ermittelt den Struktureintrag des Content-Dokumentes, und zwar als Objekt vom Typ "WGStructEntry")
WGStructEntry.getTitle()
WGStructEntry.getArea() // Ermittelt den Website-Bereich des Struktureintrages, und zwar als Objekt "WGArea")
WGArea.getName()
Die aktuellste Referenz-Dokumentation zur WGAPI im Javadoc-Format finden sie hier.


TMLScript, Java und die WGAPI