It seems largely like a one off effort though right?  I mean it's pretty rare 
that we make anything other than minor modifications to our schemas.

I guess this just all seems like a lot of effort and code for something that 
could have been fixed by caching the entity engine mappings in a map instead of 
caching the DOM.  I encountered the same bug in 10.04 a few months back and 
fixed it by doing just that, it took about 20 minutes.

Now instead we have so much code that we needed a generator to make it and 
since we tried one and it wasn't suitable we decided to roll our own generator 
as well that might be used rarely (maybe never if you disappear and it isn't 
documented).

Regards
Scott

On 16/06/2013, at 7:53 PM, Adrian Crum wrote:

> An external tool was suggested and tried, but it wasn't capable of generating 
> thread-safe classes. So, this was the result of a real need - the need to 
> generate thread-safe models from OFBiz XML schemas.
> 
> For background, look here: https://issues.apache.org/jira/browse/OFBIZ-5204
> 
> -Adrian
> 
> On 6/16/2013 8:47 AM, Scott Gray wrote:
>> I'm sure this is a useful tool but are we not stretching the scope of the 
>> project a bit too far with support for home grown code generators?
>> 
>> Regards
>> Scott
>> 
>> On 16/06/2013, at 7:36 PM, [email protected] wrote:
>> 
>>> Author: adrianc
>>> Date: Sun Jun 16 07:36:08 2013
>>> New Revision: 1493474
>>> 
>>> URL: http://svn.apache.org/r1493474
>>> Log:
>>> XsdToJava.ftl improvement - Append "Element" to class names to avoid name 
>>> clash.
>>> 
>>> Modified:
>>>    ofbiz/trunk/framework/webtools/webapp/webtools/XsdToJava.ftl
>>> 
>>> Modified: ofbiz/trunk/framework/webtools/webapp/webtools/XsdToJava.ftl
>>> URL: 
>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/webtools/webapp/webtools/XsdToJava.ftl?rev=1493474&r1=1493473&r2=1493474&view=diff
>>> ==============================================================================
>>> --- ofbiz/trunk/framework/webtools/webapp/webtools/XsdToJava.ftl (original)
>>> +++ ofbiz/trunk/framework/webtools/webapp/webtools/XsdToJava.ftl Sun Jun 16 
>>> 07:36:08 2013
>>> @@ -129,7 +129,7 @@ under the License.
>>> </#if>
>>> <#if !(xsdElement.getAttribute("abstract") == "true")>
>>> 
>>> -    public ${className}(Element element) throws ${exceptionClassName} {
>>> +    public ${className}Element(Element element) throws 
>>> ${exceptionClassName} {
>>>   <#-- Class field assignments -->
>>>   <#if attributeElements?exists>
>>>     <#list attributeElements as attributeElement>
>>> @@ -238,10 +238,10 @@ import org.w3c.dom.Element;
>>>  * @see <code>${xsdFileName}</code>
>>>  */
>>> <#if abstract>
>>> -public interface ${className} {
>>> +public interface ${className}Element {
>>> <#else>
>>> @ThreadSafe
>>> -public final class ${className}<#if substitutionGroup?has_content> 
>>> implements ${substitutionGroup}</#if> {
>>> +public final class ${className}Element<#if substitutionGroup?has_content> 
>>> implements ${substitutionGroup}</#if> {
>>> </#if>
>>> </#macro>
>>> 
>>> @@ -301,9 +301,9 @@ public final class ${className}<#if subs
>>>   <#local isList = true>
>>> </#if>
>>> <#if isList>
>>> -    private final List<${className}> ${fieldName}List; // <${elementName}>
>>> +    private final List<${className}Element> ${fieldName}List; // 
>>> <${elementName}>
>>> <#else>
>>> -    private final ${className} ${fieldName}; // <${elementName}>
>>> +    private final ${className}Element ${fieldName}; // <${elementName}>
>>> </#if>
>>> </#macro>
>>> 
>>> @@ -335,12 +335,12 @@ public final class ${className}<#if subs
>>>             this.${fieldName}List = Collections.emptyList();
>>>   </#if>
>>>         } else {
>>> -            List<${className}> ${fieldName}List = new 
>>> ArrayList<${className}>(${fieldName}ElementList.size());
>>> +            List<${className}Element> ${fieldName}List = new 
>>> ArrayList<${className}Element>(${fieldName}ElementList.size());
>>>             for (Element ${fieldName}Element : ${fieldName}ElementList) {
>>>   <#if abstract>
>>> -                
>>> ${fieldName}List.add(${className}Factory.create(${fieldName}Element));
>>> +                
>>> ${fieldName}List.add(${className}ElementFactory.create(${fieldName}Element));
>>>   <#else>
>>> -                ${fieldName}List.add(new 
>>> ${className}(${fieldName}Element));
>>> +                ${fieldName}List.add(new 
>>> ${className}Element(${fieldName}Element));
>>>   </#if>
>>>             }
>>>             this.${fieldName}List = 
>>> Collections.unmodifiableList(${fieldName}List);
>>> @@ -354,7 +354,7 @@ public final class ${className}<#if subs
>>>             this.${fieldName} = null;
>>>   </#if>
>>>         } else {
>>> -            this.${fieldName} = new ${className}(${fieldName}Element);
>>> +            this.${fieldName} = new 
>>> ${className}Element(${fieldName}Element);
>>>         }
>>> </#if>
>>> </#macro>
>>> @@ -375,13 +375,13 @@ public final class ${className}<#if subs
>>> <#if isList>
>>> 
>>>     /** Returns the <code>&amp;lt;${elementName}&amp;gt;</code> child 
>>> elements. */
>>> -    public List<${className}> get${className}List() {
>>> +    public List<${className}Element> get${className}List() {
>>>         return this.${fieldName}List;
>>>     }
>>> <#else>
>>> 
>>>     /** Returns the <code>&amp;lt;${elementName}&amp;gt;</code> child 
>>> element, or <code>null</code> if no child element was found. */
>>> -    public ${className} get${className}() {
>>> +    public ${className}Element get${className}() {
>>>         return this.${fieldName};
>>>     }
>>> </#if>
>>> @@ -393,19 +393,19 @@ public final class ${className}<#if subs
>>> <@fileHeader />
>>> 
>>> /**
>>> - * A ${className} factory.
>>> + * A ${className}Element factory.
>>>  */
>>> @ThreadSafe
>>> -public final class ${className}Factory {
>>> +public final class ${className}ElementFactory {
>>> 
>>> -    public static ${className} create(Element element) {
>>> +    public static ${className}Element create(Element element) {
>>>         String elementName = element.getNodeName();
>>>   <#list allElements as globalElement>
>>>     <#if globalElement.getAttribute("substitutionGroup") == elementName>
>>>       <#local targetElementName = globalElement.getAttribute("name")>
>>>       <#local className = 
>>> Static["org.ofbiz.base.util.UtilXml"].nodeNameToJavaName(targetElementName, 
>>> true)>
>>>         if ("${targetElementName}".equals(elementName)) {
>>> -            return new ${className}(element);
>>> +            return new ${className}Element(element);
>>>         }
>>>     </#if>
>>>   </#list>
>>> 
>>> 
> 

Reply via email to