Re: how to create own tags using qtags
Konstantin Priblouda <[email protected]> Tue, 16 Jun 2009 01:44:58 -0700 (PDT)
| Newsgroups | gmane.comp.java.xdoclet.user |
|---|---|
| Message-ID | <[email protected]> |
This discussion belongs on xdoclet-plugin-interest mailing list!!!!! --- On Mon, 6/15/09, Justin Case <[email protected]> wrote: > From: Justin Case <[email protected]> > Subject: [Xdoclet-user] how to create own tags using qtags > To: "End-user support for the XDoclet code generator" <xdoclet-user@lists= .sourceforge.net> > Date: Monday, June 15, 2009, 6:01 PM > = > Hi all, > = > Velocity code generation works fine with a VM file. I > thought I'd use also the qtags special annotations to > implement easier restrictions instead of checking everything > in the VM file. = > = > However I can't seem to understand how to activate them. I > created the tags as needed, put restrictions in their > annotations, started the Ant build with some broken files, > the process flows happily ignoring all the qtags > restrictions I've got there. Shouldn't I get some kind of > error? Do you see anything unusual below - or forgotten? For the qtags to work properly you shall first generate = their implementations (there is xdoclet plugin for this = puprose). Then you can registzer this tag library, and = magic can begin. = You can see how qtags plugin is invoked in xd2 plugin sources, and tag library registration (for example) in hibernate plugin. = = > Note: I couldn't really figure out what the "namespace" > attributes need to contain, but I picked something hopefully > appropriate. namespace is first part of tag name > Thanks a lot, > M > = > Here more info: > = > ---------The tag class: > package org.xdoclet.plugin.myplugin.qtags; > import com.thoughtworks.qdox.model.AbstractJavaEntity; > import org.xdoclet.XDocletTag; > /** > * @qtags.location class > * @qtags.once > */ > public class MyClassTag extends XDocletTag { > = > -------- the VM file: > #set( $class =3D $metadata ) > public interface I${class.getName()} { > =A0 #set( $parameterTagsClass =3D > $class.getTagsByName("mytag.classlvl") ) > =A0 #foreach( $parameterTagClass in $parameterTagsClass > ) > =A0=A0=A0 #if > ($parameterTagClass.getNamedParameter("table")) > =A0=A0=A0 =A0 public static final String TABLE > =3D "$parameterTagClass.getNamedParameter("table")"; > =A0=A0=A0 #end > =A0 #end > = > ---------- the build.xml > =A0=A0=A0 =A0=A0=A0 <taskdef > name=3D"xdoclet2" > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > =A0=A0=A0classname=3D"org.xdoclet.ant.XDocletTask" > =A0=A0=A0 =A0=A0=A0 =A0 =A0 =A0 > =A0=A0=A0classpathref=3D"lib2.class.path" /> > =A0=A0=A0 =A0=A0=A0 <xdoclet2> > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > <fileset dir=3D"${src.java.dir}"> > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0=A0=A0 <include name=3D"**/test/*Base.java" > /> > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > </fileset> > = > =A0 =A0 =A0 =A0 =A0 =A0 <component > classname=3D"org.generama.VelocityTemplateEngine"/> > =A0 =A0 =A0 =A0 =A0 =A0 <component > classname=3D"org.generama.JellyTemplateEngine"/> > =A0 =A0 =A0 =A0 =A0 =A0 <component > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > classname=3D"org.xdoclet.plugin.qtags.impl.QTagImplPlugin" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > destdir=3D"${build2.java.dir}" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > /> > =A0 =A0 =A0 =A0 =A0 =A0 <component > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > classname=3D"org.xdoclet.plugin.qtags.impl.QTagLibraryPlugin" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > destdir=3D"${build2.java.dir}" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > packagereplace=3D"org.xdoclet.plugin.myplugin.qtags" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > /> > =A0 =A0 =A0 =A0 =A0 =A0 <component > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > classname=3D"org.xdoclet.plugin.qtags.xdoc.QTagXDocPlugin" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > destdir=3D"${build2.java.dir}/generated-xdocs" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > namespace=3D"myplugin" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > /> > =A0 =A0 =A0 =A0 =A0 =A0 <component > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > classname=3D"org.xdoclet.plugin.qtags.confluence.QTagConfluencePlugin" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > destdir=3D"${build2.java.dir}/confluence" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > namespace=3D"myplugin" > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 > /> > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > <component > classname=3D"org.xdoclet.plugin.myplugin.MyPlugin" > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0destdir=3D"${build2.java.dir}" > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0fileregex=3D"(.*)(.java)" > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0filereplace=3D"I$1.java" > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0packageregex=3D"test" > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0 =A0 =A0 =A0 > =A0=A0=A0packagereplace=3D"test.generated" /> > = > --------tags registration: > package org.xdoclet.plugin.myplugin; > import org.generama.QDoxCapableMetadataProvider; > import org.generama.VelocityTemplateEngine; > import org.generama.WriterMapper; > import org.generama.defaults.JavaGeneratingPlugin; > import org.xdoclet.plugin.sqlinterface.qtags.MyClassTag; > = > public class MyPlugin extends JavaGeneratingPlugin { > = > =A0=A0=A0 public MyPlugin(VelocityTemplateEngine > templateEngine, > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > QDoxCapableMetadataProvider metadataProvider, > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > WriterMapper writerMapper) { > =A0=A0=A0 =A0=A0=A0 super(templateEngine, > metadataProvider, writerMapper); > =A0=A0=A0 =A0=A0=A0 > setMultioutput(true); > = > =A0=A0=A0 =A0=A0=A0 > metadataProvider.getDocletTagFactory().registerTag(MyClassTag.NAME, > =A0=A0=A0 =A0=A0=A0 =A0=A0=A0 > =A0=A0=A0 MyClassTag.class); > = > --------- and the broken Java source > package com.test; > /** > * @mytag.classlvl table=3D"firstone" > * @mytag.classlvl table=3D"second" > **/ = ---------------------------------------------------------------------------= --- Crystal Reports - New Free Runtime and 30 Day Trial Check out the new simplified licensing option that enables unlimited royalty-free distribution of the report engine for externally facing = server and web deployment. http://p.sf.net/sfu/businessobjects