Re: client-superclass.vm

From: Mike Kienenberger (mkienen..mail.com)
Date: Fri Dec 16 2005 - 12:10:07 EST

  • Next message: jira-norepl..bjectstyle.org: "[OS-JIRA] Created: (CAY-410) Endless loop on remote notifications"

    Probably a good candidate for a wiki example.

    On 12/15/05, Marcin Skladaniec <marci..sh.com.au> wrote:
    > Hello
    > For our project I added few lines to client-superclass template.
    > Methods I added are getting property keys and data types in generic
    > way (and more), we need them to populate JComboBoxes and some lists.
    > We are using ant-cgen to process the template.
    > Maybe someone would need this functionality, so I post it in here.
    >
    > To use those features in nice way your PersistentObjects should
    > implement interface which define the methods. Unfortunately the
    > interface has to be hard-coded in the client-superclass.vm. Maybe
    > those changes could be added to cayenne...but I don't know how...
    >
    > So:
    >
    > add those lines:
    >
    > import java.util.Vector;
    > import java.util.Hashtable;
    > import java.util.List;
    >
    >
    > modify this line:
    > public class ${entityUtils.superClassName} extends $
    > {entityUtils.baseClassName} implements ##YOUR.CUSTOM.INTERFACE## {
    >
    > and add those lines:
    >
    > /**
    > *..eturn a list of all property keys.
    > */
    > public List getAllPropertyKeys() {
    > Vector v=new Vector() ;
    > #foreach( $attr in ${objEntity.DeclaredAttributes} )
    > v.add(${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY);
    > #end
    > #foreach( $rel in ${objEntity.DeclaredRelationships} )
    > v.add(${stringUtils.capitalizedAsConstant($rel.Name)}_PROPERTY);
    > #end
    > return v;
    > }
    >
    > /**
    > *..eturn number of property keys.
    > */
    > public int getPropertyCount() {
    > return getAllPropertyKeys().size();
    > }
    >
    > /**
    > *..eturn a hashtable of all properties.
    > */
    > public Hashtable getPropertyHashtable() {
    > Hashtable t=new Hashtable() ;
    > #foreach( $attr in ${objEntity.DeclaredAttributes} )
    > if (get${stringUtils.capitalized($attr.Name)}() != null) {
    > t.put(${stringUtils.capitalizedAsConstant($attr.Name)}_PROPERTY,
    > get${stringUtils.capitalized($attr.Name)}());
    > }
    > #end
    > #foreach( $rel in ${objEntity.DeclaredRelationships} )
    > if (get${stringUtils.capitalized($rel.Name)}() != null) {
    > t.put(${stringUtils.capitalizedAsConstant($rel.Name)}
    > _PROPERTY, get${stringUtils.capitalized($rel.Name)}());
    > }
    > #end
    > return t;
    > }
    >
    > /**
    > * Gets value converted to String for given key.
    > *..aram key - the property/attribute key
    > *..eturn the human readable version
    > */
    > public String getValueForKey(String key) {
    > return (getPropertyHashtable().get(key)).toString();
    > }
    >
    > /**
    > * Gets data type for given key.
    > *..eturn Class - data type for given key
    > *..aram key - Property String
    > */
    > public Class getDataTypeForKey(String key) {
    >
    > #foreach( $attr in ${objEntity.DeclaredAttributes} )
    > if(key.equals("${attr.Name}")) return
    > $importUtils.formatJavaType(${attr.Type}) .class;
    > #end
    > return null;
    > }
    >
    >
    > (Please be aware that added methods are just working versions, there
    > is no error handling if wrong key is passed etc.)
    >
    > Marcin Skladaniec
    >



    This archive was generated by hypermail 2.0.0 : Fri Dec 16 2005 - 12:10:11 EST