Okay thanks but please don't think I don't appreciate the effort put into 
solving this issue across the framework, I definitely do.  Hard to detect 
quirks like this have no doubt caused issues for many users over many years 
(often temporarily solved with a restart) and solving them is a big win for 
everybody.

Regards
Scott

On 16/06/2013, at 8:13 PM, Adrian Crum wrote:

> Okay, I will remove it and keep a local copy.
> 
> -Adrian
> 
> On 6/16/2013 9:09 AM, Scott Gray wrote:
>> 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