include yslt.yml2 tstylesheet { include ./textutils.ysl2 include ./types_java.ysl2 template "/namespace[@name='pEp']" apply "struct|enum", 0; template "struct" { const "cname" call "toJava" with "type", "@name"; document("org/pEp/jniadapter/{$cname}.java", "text") || package org.pEp.jniadapter; import java.util.ArrayList; import java.util.Vector; import java.util.Date; import java.util.HashMap; public class «$cname» implements AutoCloseable { private long handle; native long init(); native void release(long handle); public «$cname»() { handle = init(); } private «$cname»(long h) { handle = h; } public final void close() { release(handle); } final protected long getHandle() { return handle; } `` apply "enum", mode=inner `` apply "*[name(.)!='enum']", mode=entry } || } template "enum" { const "jname" call "toJava" with "type", "@name"; document("org/pEp/jniadapter/{$jname}.java", "text") || package org.pEp.jniadapter; import java.util.HashMap; `` apply ".", 0, mode=inner || } template "enum", mode=inner { const "jname" call "CamelCase" with "text", "@name"; || public enum «$jname» { `` apply "*", mode=value ; static class Management { public static final HashMap tag = new HashMap(); } public final int value; «$jname»(int value) { this.value = value; fill(value); } private void fill(int value) { Management.tag.put(value, this); } } || } template "*", mode=entry { const "ctype", "name(.)"; const "type" call "toJava" with "type", "name(.)"; const "itype" call "toIntermediate" with "type", "name(.)"; const "name" call "toJava" with "type", "name(*[position()=1])"; choose { when "$ctype = 'identity'" || private native «$itype» _get«$name»(); private native void _set«$name»(«$itype» value); public «$type» get«$name»() { return new «$type»(_get«$name»()); } public void set«$name»(«$type» value) { _set«$name»(new «$itype»(value)); } || when "$ctype = 'identitylist' or $ctype = 'bloblist'" || `` const "ename", "substring-before(substring-after($type, '<'), '>')"; private native «$itype» _get«$name»(); private native void _set«$name»(«$itype» value); public «$type» get«$name»() { «$type» list = new «$type»(); for (_«$ename» i : _get«$name»()) list.add(new «$ename»(i)); return list; } public void set«$name»(«$type» value) { «$itype» list = new «$itype»(); for («$ename» i : value) list.add(new _«$ename»(i)); _set«$name»(list); } || when "$itype != $type" || private native «$itype» _get«$name»(); private native void _set«$name»(«$itype» value); public «$type» get«$name»() { return AbstractEngine.toUTF16(_get«$name»()); } public void set«$name»(«$type» value) { _set«$name»(AbstractEngine.toUTF8(value)); } || when "../enum[@name=$ctype]" || private native int _get«$name»(); public «$itype» get«$name»() { return «$itype».Management.tag.get(_get«$name»()); } private native void _set«$name»(int value); public void set«$name»(«$itype» value) { _set«$name»(value.value); } || otherwise || public native «$itype» get«$name»(); public native void set«$name»(«$itype» value); || } } template "*", mode=value { const "name" call "toJava" with "type", "name(.)"; | «$name» («.»)`if "position()!=last()" > , ` } }