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 <[email protected]>:
> 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" <[email protected]>
> An: "Thomas Fox" <[email protected]>
> CC: "Apache Torque Users List" <[email protected]>
> 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 <[email protected]>:
>> 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" <[email protected]>
>> An: "Thomas Fox" <[email protected]>, "Apache Torque Users List"
>> <[email protected]>
>> 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: [email protected]
>> For additional commands, e-mail: [email protected]
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]