Hello Thomas,

I generate enum with your working draft for TORQUE-331.
Looks very cool feature !.

I would like to give to my enum usage with om object.
( I am not sure how you use enum with om but please let me know you my usage )

For the role table

  <table name="TURBINE_ROLE" idMethod="idbroker">
    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
    <column name="ROLE_NAME" required="true" size="99" type="VARCHAR"
javaName="Name"/>
    <unique>
        <unique-column name="ROLE_NAME"/>
    </unique>
  </table>

I made RoleEnum.java manually likes
( enum members are existing column values in the database)

public enum RoleEnum
{
    Guest(1, "Guest"),
    Member(2, "Member"),
    Owner(3, "Owner");

    private Integer id;
    private String name;

    private RoleEnum(final Integer id, final String name)
    {
        this.id = id;
        this.name = name;
    }

    public Integer getId()
    {
        return this.id;
    }

    public String getName()
    {
        return this.name;
    }

    public TurbineRole getInstance()
        throws TorqueException
    {
        return TurbineRoleManager.getInstance(getId());
    }

    public boolean represent(TurbineRole role)
    {
        return this.id.equals(role.getRoleId());
    }

    public static Set<RoleEnum> getAllEnum()
    {
        return EnumSet.allOf(RoleEnum.class);
    }
}

----------------------------------------
And add method in TurbineRole.java

    public RoleEnum getEnum()
    {
        return RoleEnum.valueOf(getName());
    }


----------------------------------------------------------------
At the java code or template I use

Role role = RoleEnum.valueOf(cond.getValue()).getInstance();
....

or

if(RoleEnum.Guest.represent(role)){
....
}

..

using custom template, we can add custom method for their usage.
But for the the enum private fields, I hope that
we need unique name and their primary key value also I think.

Thanks,

Youngho


2014-10-10 16:49 GMT+09:00 Thomas Fox <thomas....@seitenbau.com>:
> Hi Youngo
>
> Torque is built on the idea that the database schema is static, i.e. does not 
> change at runtime, and that the database structure is defined in the schema 
> file, not in the database.
> There is some benefit in reverse-engineering from the database, however it is 
> also a very difficult and large field. The "Torque main path" is to define 
> the structure in the schema xml file and then re-run the generator, not to 
> change the database and re-engineer it.
> Therefore, to support enums, I have created a ticket in Jira 
> https://issues.apache.org/jira/browse/TORQUE-331, which supports enum 
> definition in the schema.xml. I'm currently working on it, because I have 
> also missed the enum feature.
>
> To elaborate the reverse engineering from the database: The generator can 
> generate a schema file from the database, but it is not in the core focus of 
> the Torque team and only works for very coarse features. See 
> http://db.apache.org/torque/torque-4.0/documentation/orm-reference/running-the-generator.html#Generation_of_XML_schema_from_an_existing_database.
>  However, if you'd like to improve it, please go ahead.
>
>   Thomas
>
> ----- Ursprüngliche Mail -----
> Von: "Youngho Cho" <youngho1...@gmail.com>
> An: "Thomas Fox" <thomas....@seitenbau.com>
> CC: "Apache Torque Users List" <torque-user@db.apache.org>
> Gesendet: Donnerstag, 9. Oktober 2014 09:06:17
> Betreff: Re: generate enum from db at runtime
>
> Hello Thomas,
>
> I think "generated at runtime" was a little exaggerated expression
> because of my lack of english expression.
>
> It means that
> If ROLE table changed by adding a new role such as 'Owner' Role,
> than some task run torque generator to generate new RoleEnum class
> which is include the Owner.
>
> If torque has an ability to read database and generate corresponding
> enum, I think it is very useful feature.
> ( It is very cumbersome work to add/remove by hand whenever some kind
> of type table changed)
>
> And your eum with om usage tip is very helpful to me.
> Thanks a lot.
>
> Thanks,
>
> Youngho
>
>
> 2014-10-08 21:36 GMT+09:00 Thomas Fox <thomas....@seitenbau.com>:
>> Hi Youngho,
>>
>> currently it is not possible to generate enums. This would be an interesting 
>> feature in my opinion.
>> It needs to be seen whether this requires a schema change.
>>
>> I'm not sure what you mean by "generated at runtime".
>>
>> What I currently do when I need an enum is to define "internal" methods 
>> which take and return strings and on top of that hand-written methods which 
>> take and return the enum. It looks something like:
>>
>> in the schema:
>> <column name="role" type="VARCHAR" javaName="roleInternal" />
>>
>> in the data object (assuming Role is an enum):
>> public void setRole(Role role)
>> {
>>   super.setRoleInternal(Role.toString());
>> }
>>
>> public Role getRole()
>> {
>>   return Role.valueOf(super.getRoleInternal());
>> }
>>
>> // only for torque's internal use
>> @Deprecated
>> @Override
>> public String getRoleInternal()
>> {
>>   return super.getRoleInternal();
>> }
>>
>> // only for torque's internal use
>> @Deprecated
>> @Override
>> public void setRoleInternal(String role)
>> {
>>   super.setRoleInternal(role);
>> }
>>
>>     Thomas
>>
>> ----- Ursprüngliche Mail -----
>> Von: "Youngho Cho" <youngho1...@gmail.com>
>> An: "Thomas Fox" <thomas....@seitenbau.com>, "Apache Torque Users List" 
>> <torque-user@db.apache.org>
>> Gesendet: Mittwoch, 8. Oktober 2014 08:32:10
>> Betreff: generate enum from db at runtime
>>
>> Hello Thomas,
>>
>> Can torque generate enum class from database ?
>>
>> For example,
>>
>> following turbine-fucrum-torque security model
>>
>> http://svn.apache.org/viewvc/turbine/fulcrum/trunk/security/torque/schema/fulcrum-turbine-schema.xml?revision=1575232&view=markup
>>
>> has Role, Permission table.
>>
>> And It can be added during system running.
>>
>> When those table column added/removed,
>> I hope to running maven-plugin or ant target etc.. to generate
>> corresponding enum class.
>>
>> Is it possible senario ?
>>
>>
>> Thanks,
>>
>> Youngho
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org
>> For additional commands, e-mail: torque-user-h...@db.apache.org
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org
> For additional commands, e-mail: torque-user-h...@db.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: torque-user-unsubscr...@db.apache.org
For additional commands, e-mail: torque-user-h...@db.apache.org

Reply via email to