Tuscany
  1. Tuscany
  2. TUSCANY-513

Implement support for dynamic subclasses of statically generated types

    Details

    • Patch Info:
      Patch Available

      Description

      Implement support for dynamic subclasses of statically generated types. See below exerpt from tuscany-user mailing list for details.

      Hi Ron,

      Looking at this, it looks like the problem is that you're trying to create
      dynamic subclasses of statically generated types. The bad news is that
      Tuscany doesn't currently support that. The good news is that it's not too
      hard to add the support.

      The problem is that currently Tuscany only has these two primary
      DataObject implementation classes:

      1. DataObjectImpl - is the base class used for statically generated types.
      It is highly tuned for performance and footprint, so, unlike the base
      class in SDO1 (actually EMF) it doesn't support dynamic extensions.

      2. DyamicDataObjectImpl - is the class used to support dynamic SDOs. It is
      designed for pure dynamic types, not a mixture of static and dynamic.

      To support what you want, we will need another base class, say
      ExtensibleDataObjectImpl, that is quite similar to DynamicDataObjectImpl,
      but doesn't make the assumption that eStaticFeatureCount() is 0. My guess
      is that there are only a few simple method overrides needed in this class.
      Maybe you would like to try to prototype such a class yourself and hand
      modify your generated classes to extend from it? If you did that and
      tested it, you could submit a patch and we could then very quickly add a
      generator option to use it (maybe even make it the default). If you'd like
      to help with this, it would be very much appreciated!

      At any rate, you should probably open a JIRA feature request for this.

      Thanks,
      Frank

      > Frank,
      >
      > I am working with a mixed static/dynamic model similar to the one
      > listed at the bottom of this post. The http://example.org/ord
      > namespace is statically registered and has code-generated classes. The
      > http://example.org/info/zipcode and http://example.org/info/street
      > namespaces are dynamically registered with no code-generated
      > classes. When I attempt to load the Sample Instance (chapter04.xml),
      > I receive an UnsupportedOperationException thrown from
      > DataObjectImpl.setEClass(EClass). The DataObjectImpl throwing the
      > exception is an instance of "InfoTypeImpl" from the "ord"
      > namespace/ePackage. The EClass parameter is "InfoType" from the
      > "zipcode" namespace. This instance document loads fine using EMF/SDO
      > 1.0. Any suggestions I can try to work-around this problem?
      >
      > - Ron
      >
      >
      > Sample Instance (chapter04.xml)
      > <ord:order xmlns:ord="<http://example.org/ord>";
      > xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>";
      > xsi:schemaLocation="<http://example.org/ord> chapter04ord1.xsd">
      > <ord:number>123ABBCC123</ord:number>
      > <ord:customer>
      > <ord:name>Pat Walmsley</ord:name>
      > <ord:number>15465</ord:number>
      > <info xsi:type="ns1:InfoType" xmlns=""
      > xmlns:ns1="<http://example.org/info/zipcode>";>
      > <zipcode>21043</zipcode>
      > </info>
      > </ord:customer>
      > <ord:customer>
      > <ord:name>Priscilla Walmsley</ord:name>
      > <ord:number>15466</ord:number>
      > <info xsi:type="ns1:InfoType" xmlns=""
      > xmlns:ns1="<http://example.org/info/street>";>
      > <street>341 Duckworth Way</street>
      > </info>
      > </ord:customer>
      > <ord:items>
      > <product>
      > <number>557</number>
      > <name>Short-Sleeved Linen Blouse</name>
      > <size system="US-DRESS">10</size>
      > <color value="blue"/>
      > </product>
      > </ord:items>
      > </ord:order>
      > Schema Document 1 (chapter04ord1.xsd)
      > <xsd:schema xmlns:xsd="<http://www.w3.org/2001/XMLSchema>";;
      > targetNamespace="<http://example.org/ord>";;
      > xmlns="<http://example.org/ord>";;
      > xmlns:prod="<http://example.org/prod>";;
      > elementFormDefault="qualified">
      > <xsd:import namespace="<http://example.org/prod>";;
      > schemaLocation="chapter04prod.xsd"/>
      > <xsd:simpleType name="OrderNumType">
      > <xsd:restriction base="xsd:string"/>
      > </xsd:simpleType>
      > <xsd:complexType name="InfoType"/>
      > <xsd:complexType name="CustomerType">
      > <xsd:sequence>
      > <xsd:element name="name" type="CustNameType"/>
      > <xsd:element name="number" type="xsd:integer"/>
      > <xsd:element name="info" type="InfoType" form="unqualified"/>
      > </xsd:sequence>
      > </xsd:complexType>
      > <xsd:simpleType name="CustNameType">
      > <xsd:restriction base="xsd:string"/>
      > </xsd:simpleType>
      > <xsd:element name="order" type="OrderType"/>
      > <xsd:complexType name="OrderType">
      > <xsd:sequence>
      > <xsd:element name="number" type="OrderNumType"/>
      > <xsd:element name="customer" type="CustomerType"
      > maxOccurs="unbounded"/>
      > <xsd:element name="items" type="prod:ItemsType"/>
      > </xsd:sequence>
      > </xsd:complexType>
      > </xsd:schema>
      > Schema Document 2 (chapter04infozipcode.xsd)
      > <xsd:schema xmlns:xsd="<http://www.w3.org/2001/XMLSchema>";;
      > xmlns:ord="<http://example.org/ord>";;
      > xmlns="<http://example.org/info/zipcode>";;
      > targetNamespace="<http://example.org/info/zipcode>";;
      > elementFormDefault="unqualified">
      > <xsd:import namespace="<http://example.org/ord>";;
      > schemaLocation="chapter04ord1.xsd"/>
      > <xsd:complexType name="InfoType">
      > <xsd:complexContent>
      > <xsd:extension base="ord:InfoType">
      > <xsd:sequence>
      > <xsd:element name="zipcode" type="xsd:string"/>
      > </xsd:sequence>
      > </xsd:extension>
      > </xsd:complexContent>
      > </xsd:complexType>
      > </xsd:schema>
      > Schema Document 3 (chapter04infostreet.xsd)
      > <xsd:schema xmlns:xsd="<http://www.w3.org/2001/XMLSchema>";;
      > xmlns:ord="<http://example.org/ord>";;
      > xmlns="<http://example.org/info/street>";;
      > targetNamespace="<http://example.org/info/street>";;
      > elementFormDefault="unqualified">
      > <xsd:import namespace="<http://example.org/ord>";;
      > schemaLocation="chapter04ord1.xsd"/>
      > <xsd:complexType name="InfoType">
      > <xsd:complexContent>
      > <xsd:extension base="ord:InfoType">
      > <xsd:sequence>
      > <xsd:element name="street" type="xsd:string"/>
      > </xsd:sequence>
      > </xsd:extension>
      > </xsd:complexContent>
      > </xsd:complexType>
      > </xsd:schema>
      > Schema Document 4 (chapter04prod.xsd)
      > <xsd:schema xmlns:xsd="<http://www.w3.org/2001/XMLSchema>";;
      > xmlns="<http://example.org/prod>";;
      > targetNamespace="<http://example.org/prod>";;
      > elementFormDefault="unqualified">
      > <xsd:complexType name="ItemsType">
      > <xsd:sequence>
      > <xsd:element name="product" type="ProductType"/>
      > </xsd:sequence>
      > </xsd:complexType>
      > <xsd:complexType name="ProductType">
      > <xsd:sequence>
      > <xsd:element name="number" type="xsd:integer"/>
      > <xsd:element name="name" type="xsd:string"/>
      > <xsd:element name="size" type="SizeType"/>
      > <xsd:element name="color" type="ColorType"/>
      > </xsd:sequence>
      > </xsd:complexType>
      > <xsd:complexType name="SizeType">
      > <xsd:simpleContent>
      > <xsd:extension base="xsd:integer">
      > <xsd:attribute name="system" type="xsd:string"/>
      > </xsd:extension>
      > </xsd:simpleContent>
      > </xsd:complexType>
      > <xsd:complexType name="ColorType">
      > <xsd:attribute name="value" type="xsd:string"/>
      > </xsd:complexType>
      > </xsd:schema>
      >

      1. tuscany-sdo-tools.TUSCANY-513.2.patch
        118 kB
        Ron Gavlin
      2. tuscany-sdo-impl.TUSCANY-513.2.patch
        47 kB
        Ron Gavlin
      3. tuscany-sdo-tools.TUSCANY-513.patch
        4 kB
        Ron Gavlin
      4. tuscany-sdo-impl.TUSCANY-513.patch
        23 kB
        Ron Gavlin

        Issue Links

          Activity

          ant elder made changes -
          Status Resolved [ 5 ] Closed [ 6 ]
          Murtaza Goga made changes -
          Link This issue relates to TUSCANY-1540 [ TUSCANY-1540 ]
          Kelvin Goodson made changes -
          Resolution Fixed [ 1 ]
          Status Open [ 1 ] Resolved [ 5 ]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-tools.TUSCANY-513.2.patch [ 12359592 ]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-impl.TUSCANY-513.2.patch [ 12359591 ]
          Kelvin Goodson made changes -
          Fix Version/s Java-SDO-1.0 [ 12312521 ]
          Fix Version/s Java-SDO-Next [ 12312262 ]
          Ron Gavlin made changes -
          Patch Info [Patch Available]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-tools.TUSCANY-513.patch [ 12358953 ]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-impl.TUSCANY-513.patch [ 12358952 ]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-tools.TUSCANY-513.patch [ 12358951 ]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-impl.TUSCANY-513.patch [ 12358950 ]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-tools.TUSCANY-513.patch [ 12358951 ]
          Ron Gavlin made changes -
          Attachment tuscany-sdo-impl.TUSCANY-513.patch [ 12358950 ]
          ant elder made changes -
          Fix Version/s Java-SDO-Mx [ 12312262 ]
          Fix Version/s Java-Mx [ 12311031 ]
          ant elder made changes -
          Field Original Value New Value
          Fix Version/s Java-Mx [ 12311031 ]
          Affects Version/s Java-M1 [ 12311030 ]
          Affects Version/s Java-Mx [ 12311031 ]
          Ron Gavlin created issue -

            People

            • Assignee:
              Unassigned
              Reporter:
              Ron Gavlin
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development