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