Sort of standard layout, you cannot cover very much with code gens...

if you move away from the standard masks you have to do something manually...

It is not that bad because JSF basically forces you to use CSS as much as possible.

Standard crud masks usually are always the same, and a little bit of manual tweaking has to be done at the later stage when you can expect that things do not change too much anymore.

I dont see the code gens as we have to generate a working app, it simply
does the job a team of standard coders have to do before things get really interesting...

But to my experience, it helped me at least to cut down dev time to 50%
if not more.


Werner



Enrique Medina wrote:
Sounds really interesting...

But what about the layout? How is it defined?

2005/8/31, Werner Punz <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>:

    Enrique Medina wrote:
     > Hi Werner,
     >
     > Could you please give us extenden information about the
    application of
     > xdoclet for standard CRUD maks and the use of IoC?
     >
     > I have a slight idea of what you're talking, but to concrete ;-)
     >
     > Thanks.
     >
    Yes, I started off and still am in the project as a one man team, it
    started off as a project which had to be finished very swiftly and
    will be dumped once a bigger system goes online, more details is NDA...

    I knew xdoclet in the past from an old job where I constantly had to
    fight against monetary issues, and had in the end to do the work of an
    entire team.

    What I did was to use xdoclet sort of as a code templating wizard,
    which
    generated the create update delete base code and the master detail views
    from the given reverse engineered database objects...

    All I did was to extend it that way, that I had to add basic metadata
    with form information to the database pojos and then had a run via
    xdoclet over them. The result is basically a master detail module with
    all the forms, some basic verification code and the dao layer, and it is
    working and also with working faces-config files which were generated.

    Several form parts are split apart for easier maintenance via aliasbean
    includes... or general includes

    No to overwrite my code again and again I used basic inheritance to add
    manually the additional functionality to the java parts, nowadays if I
    had to write it from scratch I probably would weave the objects into the
    rest of the system via inversion of object control.

    the final forms were based upon the code templates generated but
    manually altered and moved into separate directories, the binding could
    then be done by altering the faces-config manually...

    So what happened is that you basically generate a basic application out
    of an existing db schema and then start to alter the parts you need
    changed and move them out of the generation base, so that you do not
    overwrite them. That also means, you need at least one working project
    codebase to start on to write your templates for the next project.
    Once this huge task is done and the codebase is stabilized you can reuse
    it for the next projects...


    one of the generation classes for xdoclet looks like this:
    /**
      * @dbo.form.single module="gen" icon="img_institution_big"
    title="Institutionsverwaltung"
      * @dbo.binding.hibernate A simple changelog blog object which
    handles the
      *                        change logs and infos of the system
      * @author Punz
      *
      * <PRE>
      *
      * Dummy class to generate the database forms
      *
      * currently following tags are supported dbo.form.single marks the
    class as dbo
      * master object on a single master detail form dbo.method mars a
    method which
      * has to be parsed as dbo method (only getters have to be marked
    it has
      * following attributes: header marks a plain text header or a ref
    to an
      * internationalization file sortable if set marks this property as
    a sort
      * criterion masterDisplay marks this one as displayable in the master
    table
      * detailDisplay marks this one as displayable in the detail table
    as well
      * detailField gives the jsf detail field type detailFieldParams
    pushes the
      * internal detail field params down to the template
      *
      * @dbo.method.validation marks that validation has to be added
      *                        required="true/false" marks that the required
    flag has
      *                        to be set stdvalidators=" <f:validateLength
      *                        minimum='2' maximum='40' />" a string of
    standard
      *                        validators
      *
      * @dbo.action sets an action with following parameters
    oneonmany="true" marks
      *             the action as simply two form oneonmany relations
      *             header="Kontakte" linkheader for the action
    masterDisplay="true"
      *             display the action in the master display
    detailDisplay="true"
      *             display the action in the detail display as well
      *             slave="Tblcontact" slave object in case of a simple one
    on many
      *
      * </pre>
      */
    public class Institution extends ommiddlegen.Institution {

            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getId ()
          * @dbo.method header="Id" sortable="true" masterDisplay="true"
    detailDisplay="true" detailField="h:inputHidden"
    detailFieldType="h:inputHidden"
             */

            public Integer getId() {
                    return super.getId();
            }





            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getTitle()
          *  @ dbo.method header="Name"  masterDisplay="true"
    detailDisplay="true"
          *  @dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='2' maximum='50' />"
          *  @dbo.method.search likeQuery="true"
             */
            public String getNachname() {

                    return super.getNachname();
            }





            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription()
          * @dbo.method header="Beschreibung"   detailDisplay="true"
    detailField="h:inputTextarea rows='10' cols='30' "
    detailFieldType="h:inputTextarea"
          * @dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='3' maximum='512' />"
             */

            public String getBeschreibung() {
                    return super.getBeschreibung();
            }

            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription()
          * @dbo.method header="Rechtsform"   detailDisplay="true"
             */

            public String getRechtsform() {
                    // TODO Auto-generated method stub
                    return super.getRechtsform();
            }

            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription()
          *  @dbo.method header="Anschrifttitel"  detailDisplay="true"
          *  @dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='2' maximum='50' />"
             */

            public String getAnschrifttitel() {
                    // TODO Auto-generated method stub
                    return super.getAnschrifttitel();
            }


            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription()
          *  @dbo.method header="Gruppe"  detailDisplay="true"
          *  @dbo.method.validation
             */

            public String getGruppe() {
                    return super.getGruppe();
            }

            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription ()
          *  @dbo.method header="Statut"  detailDisplay="true"
             */

            public Byte getStatut() {
                    return super.getStatut();
            }

            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription()
          *  @dbo.method header="Klassifikation"  detailDisplay="true"
             */

            public Integer getKlassifikation() {
                    return super.getKlassifikation();
            }

            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription()
          *  @dbo.method header="Straße"  detailDisplay="true"
          *  @ dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='2' maximum='100' />
             */

            public String getStrasse() {
                    return super.getStrasse ();
            }


            /**
          *  @dbo.method header="Hausnr"  detailDisplay="true"
          *  @dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='2' maximum='100' />
             */
            public String getHausnr() {
                    return super.getHausnr();
            }


            /**
          *  @dbo.method header="Ort"  detailDisplay="true"
          *  @ dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='2' maximum='50' />"
          *  @dbo.method.search likeQuery="true"
             */
            public String getOrt() {
                    return super.getOrt();
            }


            /**
          *  @dbo.method header="Plz"  detailDisplay="true"
          *  @dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='2' maximum='8' />"
          *  @dbo.method.search likeQuery="true"
             */
            public String getPlz() {
                    return super.getPlz ();
            }
            /**
             *  @dbo.method header="Bundesland"  detailDisplay="true"
             *  @dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='1' maximum='1' />"
             */

            public String getBld() {
                    return super.getBld();
            }

            /**
             *  @dbo.method header="Land"  detailDisplay="true"
             */

            public String getLand() {
                    return super.getLand();
            }

            /**
             *  @dbo.method header="Email-1"  detailDisplay="true"
             *  @dbo.method.validation stdvalidators="<x:validateEmail />"
             */

            public String getEmail1() {
                    return super.getEmail1();
            }

            /**
             *  @dbo.method header="Email-2"  detailDisplay="true"
             *  @dbo.method.validation stdvalidators="<x:validateEmail />"
             */

            public String getEmail2() {
                    return super.getEmail2();
            }

            /**
             *  @dbo.method header="Mobiltelefon-1"  detailDisplay="true"
             *  @dbo.method.validation stdvalidators="<x:validateRegExpr
    pattern='^[0-9\s]+' />"
             */

            public String getHandy1() {
                    return super.getHandy1();
            }


            /**
             *  @dbo.method header="Mobiltelefon-2"  detailDisplay="true"
             *  @dbo.method.validation stdvalidators=" <x:validateRegExpr
    pattern='^[0-9\s]+' />"
             */
            public String getHandy2() {
                    return super.getHandy2();
            }


            /**
             *  @dbo.method header="Telefon-1"  detailDisplay="true"
             *  @dbo.method.validation stdvalidators="<x:validateRegExpr
    pattern='^[0-9\s]+' />"
             */
            public String getTelefon1() {
                    return super.getTelefon1();
            }

            /**
             *  @dbo.method header="Telefon-2"  detailDisplay="true"
             *  @dbo.method.validation stdvalidators="<x:validateRegExpr
    pattern='^[0-9\s]+' />"
             */

            public String getTelefon2() {
                    return super.getTelefon2();
            }

            /**
             * @see ommiddlegen.AbstractDiffsyschangelog#getDescription()
          * @dbo.method header="BKZ"   detailDisplay="true"
          * @dbo.method.validation required="true"
    stdvalidators="<f:validateLength minimum='3' maximum='3' />"
             */

            public String getBkz() {
                    return super.getBkz();
            }

    }


    Werner



Reply via email to