hi mike,

you could also convert the row into a map using [attribute, value] and pass this map to the constructor of the VO. the getters/setter of the VO could the access the map.

the map could also be created by the VO itself based on attributes and the row.

hth
jakob

Mike Young schrieb:
I have come up with some sort of solution that doesn't use reflection. I
would be greatful if anybody can improve it, as my solution rather relies
heavily on the premise that the attributes are capitalized in the same
manner as the properties of the VO i.e. attr<EmpId> / property
setEmpId().


My attempt is as follows ...

  row = broker.getReportQueryIteratorByQuery(query);
  while (row.hasNext()) {
    for(int i=0; i<attrSubString.length; i++){
      Object[] data = (Object[]) row.next();
      Object arg = data[i];
      String methodName = "set"+attrSubString[i];
      EmpVO empVO = new EmpVO();
      try {
         MethodUtils.invokeMethod(pickValueVO,methodName,arg);
      } catch (Exception e) {
        throw e;
      }
      result.add(empVO);
    }
  }

On Sun, 06 Mar 2005 18:02:29 +1100, Mike Young wrote:


Hi,
I am trying to write a data access object that will return the results of
a Report Query back as a Collection of Value List Objects based on the
table row and the columns required.

If I have a table employee with three columns (empid, empname,
empsurname).


And I have a Value Object EmpVo with appropriate getters and
setters (i.e. getEmpId,setEmpId,getEmpName and so on).

And for example I would like to carry out a select that returns only
specific columns ...
e.g.
select distinct empsurname from employee or select empname,empsurname from
employee


My DAO is as follows ...

* @param Criteria
* @param (String)sortOrder - comma separated list of data columns to
return * @param (String)sortOrder - comma separated list of columns
to sort by * @return Iterator of ValueObject (-EmployeeValueVO)
public Collection findManyByCritRpt(Criteria criteria,String
attributes){
PersistenceBroker broker = null;
Iterator row = null;
Object[] obj = null;
Collection result = new Vector();
broker = ServiceLocator.getInstance().findBroker();
ReportQueryByCriteria query =
QueryFactory.newReportQuery(PickValueVO.class, criteria,
distinct); // Create Column List ( turns comma separated values
into String array) String[] attrSubString =
TwoSqUtils.ExtractSubString(attributes.trim(),',');
query.setAttributes(attrSubString);
row = broker.getReportQueryIteratorByQuery(query);
while (row.hasNext()) {
result.add(row.next());
// *** TURN ROW into VALUE Object Here *** //
// *** set(attrSubString[x]) ***//
}
return result;
} // end findManyByCritRpt


How would I go about using reflection and my "attrSubString" array (which
lists the column names in the select) to call the appropriate setter in my
Value Object and then create a (Vector) list of these Value Objects ?

I am guessing I need to use the commons.beanutils class, however this is
as far as I can get as I am quite new to java (3mths). Could some one help
me fill in the gaps please?




---------------------------------------------------------------------
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]



Reply via email to