[prev in list] [next in list] [prev in thread] [next in thread]
List: turbine-user
Subject: Re: Generic-Table Retrieval/Display - DatabaseMap ?
From: "Henning P. Schmiedehausen" <hps () intermeta ! de>
Date: 2004-12-08 13:13:47
Message-ID: cp6umb$8o3$2 () tangens ! hometree ! net
[Download RAW message or body]
Rankin Johnson <rankin@houston.rr.com> writes:
The TORQUE_3_1_HENNING patch _has_ all the proposal Patches already
applied. Check the ChangeLog.
Regards
Henning
>I've checked it out.
>I apologize in advance for my abject ignorance here, but how do I apply
>it?
>'patch -p 0 < ./proposals/henning/mapbuilder-init/mapbuilder-init.patch'
>doesn't work.
>Henning P. Schmiedehausen wrote:
>>rankin <rankin@houston.rr.com> writes:
>>
>>You might want to check the TORQUE_3_1_HENNING branch from the db-torque CVS.
>>In a nutshell: Yes. I fell into the same trap and this Torque branch has a
>>method in the MapBuilder to initialize all the tables of a database map.
>>
>> Regards
>> Henning
>>
>>
>>
>>
>>
>>
>>>A further problem in implementing this:
>>>
>>>
>>
>>
>>
>>>It seems the DatabaseMap object is "lazily-built"; that is, tables are
>>>only added to the map after they're specifically requested. When this
>>>app first comes up, all I see in the table drop down are: TURBINE_USER,
>>>GROUP, etc. If I use a particular table thru some other template, it
>>>will appear in that drop down next time.
>>>
>>>
>>
>>
>>
>>>Does anyone know of a property in TR.props which will cause the
>>>DatabaseMap to be built out upon initialization, or of any method which
>>>can be called to cause the same thing to occur, or do I have to get a
>>>connection to the database and go get this metadata myself?
>>>
>>>
>>
>>
>>
>>>Thanks, in advance.
>>>
>>>
>>
>>
>>
>>
>>>rankin wrote:
>>>
>>>
>>>>Thanks for the reply, I was unaware of beanutils. It looks to be an
>>>>improvement over the less generalized reflection I've been poking at:
>>>>
>>>>public List list(String ofWhat){
>>>> String peerName = MODEL_CLASS_PREFIX + ofWhat + "Peer";
>>>> try{
>>>> Class peer = Class.forName(peerName);
>>>> Object o = peer.newInstance();
>>>> return ((BasePeer)o).doSelect(new Criteria());
>>>> } catch (Exception e){/*do something*/;}
>>>> return null;
>>>>}
>>>>
>>>>I'll look into it & try it.
>>>>
>>>>But I was assuming there was some simpler method of accomplishing the
>>>>same goal where one doesn't need to know this kind of stuff. This would
>>>>seem to be a question that would crop up often, especially at the
>>>>beginning of a project or for proof-of-concept work.
>>>>
>>>>
>>>>Russell Edens wrote:
>>>>
>>>>
>>>>
>>>>>Rankin said:
>>>>>
>>>>>
>>>>>
>>>>>>I have many tables, which for the moment are separately defined. I want
>>>>>>one template, DisplayTable.vm, to display any one of these tables. So,
>>>>>>DisplayTable.java has:
>>>>>>
>>>>>>public void doBuildTemplate(){
>>>>>> ...
>>>>>> String tablename = data.getParameters().getString("tablename",null);
>>>>>> Criteria crit = new Criteria();
>>>>>> List list = [**tablename**]Peer.doSelect(crit);
>>>>>> context.put("list", list);
>>>>>> TableMap tmap = Torque.getDatabaseMap("mydb").getTable(tablename);
>>>>>> ColumnMap[] cMap = tmap.getColumns();
>>>>>> Vector names;
>>>>>> for(int i = cMap.length -1; i >=0; i--)
>>>>>> names.add(cMap[i].getColumnName());
>>>>>> context.put("columnNames", names.toArray());
>>>>>> ...
>>>>>>}
>>>>>>
>>>>>>and DisplayTable.vm has
>>>>>>
>>>>>><tr>
>>>>>>#foreach ($columName in $columnNames)
>>>>>> <th>$columnName</th>
>>>>>>#end
>>>>>></tr>
>>>>>>#foreach ($item in $itemList)
>>>>>><TR>
>>>>>> #foreach ($attribute in $columnNames)
>>>>>> <TD>$!{item.$attribute}</TD>
>>>>>> #end
>>>>>></TR>
>>>>>>#end
>>>>>>
>>>>>>I'm sure this has been done many times far more easily and other
>>>>>>suggestions would be greatly appreciated ... However - how does one do
>>>>>>the "[tablename]Peer.doSelect(crit)" bit?
>>>>>>
>>>>>>Suggestions??
>>>>>>
>>>>>>
>>>>>>
>>>>>If you want to do it generically reflection is your best bet.
>>>>>
>>>>>You might consider the org.apache.commons.beanutils.MethodUtils class for
>>>>>making these calls. Un-tested example:
>>>>>
>>>>>private List invokeDoSelect(String
>>>>>fullyQualifiedTorquePeerObjectName,
>>>>>Criteria crit)
>>>>>{
>>>>> final Class[] doSelectParamTypes = { Criteria.class };
>>>>> final Object[] doSelectParams = { crit };
>>>>> Object results = null;
>>>>> try
>>>>> {
>>>>> Class peerClass =
>>>>>Class.forName(fullyQualifiedTorquePeerObjectName);
>>>>> results = MethodUtils.invokeExactMethod(peerClass, "doSelect",
>>>>>doSelectParams, doSelectParamTypes);
>>>>> }
>>>>> catch (NoSuchMethodException e)
>>>>> {
>>>>> // TODO handle this
>>>>> }
>>>>> catch (IllegalAccessException e)
>>>>> {
>>>>> // TODO handle this
>>>>> }
>>>>> catch (InvocationTargetException e)
>>>>> {
>>>>> // TODO handle this
>>>>> }
>>>>> catch (ClassNotFoundException e)
>>>>> {
>>>>> // TODO handle this
>>>>> }
>>>>>
>>>>> return (List)results;
>>>>>}
>>>>>
>>>>>---------------------------------------------------------------------
>>>>>To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
>>>>>For additional commands, e-mail: turbine-user-help@jakarta.apache.org
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>---------------------------------------------------------------------
>>>>To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
>>>>For additional commands, e-mail: turbine-user-help@jakarta.apache.org
>>>>
>>>>
>>>>
>>>>
>>
>>
>>
>>
>>
>>>---------------------------------------------------------------------
>>>To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
>>>For additional commands, e-mail: turbine-user-help@jakarta.apache.org
>>>
>>>
>>
>>
>>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
>For additional commands, e-mail: turbine-user-help@jakarta.apache.org
--
Dipl.-Inf. (Univ.) Henning P. Schmiedehausen INTERMETA GmbH
hps@intermeta.de +49 9131 50 654 0 http://www.intermeta.de/
RedHat Certified Engineer -- Jakarta Turbine Development -- hero for hire
Linux, Java, perl, Solaris -- Consulting, Training, Development
What is more important to you...
[ ] Product Security
or [ ] Quality of Sales and Marketing Support
-- actual question from a Microsoft customer survey
---------------------------------------------------------------------
To unsubscribe, e-mail: turbine-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: turbine-user-help@jakarta.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic