It's ugly but it works.  If you have a better workaround please share.

The idea is instead of querying for List<ContactProxy> you query for 
List<ContactWrapperProxy>.
Then you call ContactWrapper.getPersonContact().  If it returns non-null 
value then it's a person.
Otherwise you call ContactWrapper.getCompanyContact() and repeat the check.

Server:

class ContactWrapper {
  private PersonContact personContact;
  private CompanyContact companyContact;

  // returns null if not a PersonContact
  public PersonContact getPersonContact() { return personContact; }
  public void setPersonContact(PersonContact personContact) { 
this.personContact = personContact; }
  // returns null if not a CompanyContact
  public CompanyContact getCompanyContact() { return companyContact; }
  public void setCompanyContact(CompanyContact companyContact) { 
this.companyContact = companyContact; }
}

class SomeService {
  public static List<ContactWrapper> queryContracts() {
    final List<Contact> contacts = // polymorphic JPA query
    final List<ContactWrapper> ret = new 
ArrayList<ContactWrapper>(contacts.size());
    for(Contact c : contacts) {
      final ContactWrapper w = new ContactWrapper();
      if(contact intanceof CompanyContact) {
         w.setCompanyContact((CompanyContact)c)
      }
      else if(contact intanceof PersonContact) {
         w.setPersonContact((PersonContact)c)
      }
      ret.add(w);
    }
    return ret;
  }
}

Client:
@ProxyFor(ContactWrapper.class)
interface ContactWrapperProxy extends ValueProxy (
  PersonContactProxy getPersonContact();
  CompanyContact getCompanyContact();
}

@Service(SomeService.class)
interface SomeServiceRequest exntends RequestContext {
  // return List<ContactWrapperProxy> instead of List<ContactProxy>
  List<ContactWrapperProxy> queryContracts();
}


-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to