I didn't have time at the time unfortunately. Adrian's fix is more 
comprehensive than mine anyway. 

I have a few unrelated fixes to bring over this week though once I manage to 
locate them.

Regards
Scott

On 18/06/2013, at 6:16 AM, Jacques Le Roux <[email protected]> wrote:

> Hi Scott,
> 
> Why did you not contribute, are there any drawbacks, apart the small memory 
> footprint (considering nowadays available memory in modern machines)?
> 
> Thanks
> 
> Jacques
> 
> From: "Scott Gray" <[email protected]>
>> 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