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>&lt;${elementName}&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>&lt;${elementName}&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> >>>> >>>> >> > >
