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