Hi guys,

since the initial (small, working & well-tested) version of oVirtJS
JavaScript SDK is finished [*], I've started working on GWT wrapper
for oVirtJS.

While analyzing/reverse-engineering oVirt Java SDK, some thoughts
came to my mind, and I wanted to share them with you.

[*] TODO(vszocs) upload new patchset with all recent changes

First, the way XJC (JAXB binding compiler that generates Java beans
out of REST XSD schema) is invoked looks a bit weird to me, as Java
SDK's XsdCodegen does this:

  Runtime.getRuntime().exec(command)

Why not simply use existing Maven plugins to invoke XJC?
- either: https://github.com/highsource/maven-jaxb2-plugin
- or: http://mojo.codehaus.org/jaxb2-maven-plugin/

Second, and most importantly, what's the point of having "group"
entities? I'll give an example - api.xsd contains this:

  <xs:complexType name="DataCenters">
    <xs:complexContent>
      <xs:extension base="BaseResources">
        <xs:sequence>
          <xs:annotation>
            <xs:appinfo>
                <jaxb:property name="DataCenters"/>
            </xs:appinfo>
          </xs:annotation>
          <xs:element ref="data_center" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>

(Same as above for Hosts, Clusters, VMs, etc.)

This results in following (IMHO rather meaningless) Java class
being generated by XJC:

public class DataCenters extends BaseResources {

    @XmlElement(name = "data_center")
    protected List<DataCenter> dataCenters;

    public List<DataCenter> getDataCenters() {
        if (dataCenters == null) {
            dataCenters = new ArrayList<DataCenter>();
        }
        return this.dataCenters;
    }

    public boolean isSetDataCenters() {
        return ((this.dataCenters!= null)&&(!this.dataCenters.isEmpty()));
    }

    public void unsetDataCenters() {
        this.dataCenters = null;
    }

}

Instead, we could use @XmlElementWrapper as described in [1]
to avoid generating "group" entities altogether.

[1] https://github.com/dmak/jaxb-xew-plugin

The fact that Java SDK provides decorator for each specific
resource collection (like DataCenters), instead of having ONE
resource collection type, greatly complicates overall design
and code-gen aspect.

In oVirtJS GWT wrapper, we'll avoid above complication through
single resource collection type (having common methods like
get(id), list() etc) for all resources.

Regards,
Vojtech
_______________________________________________
Devel mailing list
Devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/devel

Reply via email to