|
|
|
|
Derek Broughton-3
()
|
|
||||||||||||
|
I got fed up hand generating all my own viewlets (that's how most OSS
development gets done, right?) so cloned the <view_class> support for <viewlet_class>. It relies on two stereotypes <viewlet_class> and <viewlet_manager> which I haven't attempted to add to the archgenxml XMI profile. Add a class with <viewlet_class> stereotype to your model, and AGX will generate the Class module, a skeleton template, and zcml for each viewlet. Similar to views, one <browser:viewlet> tag is produced for each combination of "for", "view" and, in this case, "manager". A "view" attribute is created for every class dependency which is a "view", a "manager" attribute is created for every dependency which has the "viewlet_manager" stereotype, and "for" attributes for all other dependencies. If there are no "for" interfaces, a <browser:viewlet for="*" ... /> tag is generated. -- derek [viewlet.diff] diff -N -x '*.py?' -r -u plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/ArchetypesGenerator.py /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/ArchetypesGenerator.py --- plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/ArchetypesGenerator.py 2009-03-20 14:44:21.000000000 -0300 +++ /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/ArchetypesGenerator.py 2009-03-30 12:16:32.000000000 -0300 @@ -131,10 +131,7 @@ vocabulary_item_stereotype = ['vocabulary_term'] vocabulary_container_stereotype = ['vocabulary'] remember_stereotype = ['remember'] - python_stereotype = ['python', 'python_class'] + \ - BaseGenerator.view_class_stereotype + \ - BaseGenerator.viewlet_class_stereotype + \ - BaseGenerator.portlet_class_stereotype + python_stereotype = ['python', 'python_class'] + BaseGenerator.view_class_stereotype + BaseGenerator.portlet_class_stereotype folder_stereotype = ['atfolder', 'folder', 'ordered', 'large', 'btree'] atct_stereotype = ['atfolder', 'atfile', 'atdocument', 'atevent', 'atimage', 'atnewsitem', 'atlink'] @@ -2729,8 +2726,7 @@ # generate subscribers self.generateSubscribersZCML(package) # generate browser views - if self.getViewClasses(package,recursive=True) \ - or self.getClassesWithStereotype(package, self.viewlet_class_stereotype, recursive=True): + if self.getViewClasses(package,recursive=True): self.generateBrowserZCML(package) #generate portlets self.generatePortletsXML(package) @@ -2766,11 +2762,8 @@ ] hasSubscribers = bool(package.getAnnotation('subscribers')) - hasBrowserViews = ( - self.getViewClasses(package,recursive=False) or - self.getClassesWithStereotype(package,self.portlet_class_stereotype,recursive=False) or - self.getClassesWithStereotype(package,self.viewlet_class_stereotype,recursive=False) - ) + hasBrowserViews = self.getViewClasses(package,recursive=False) or \ + self.getClassesWithStereotype(package,self.portlet_class_stereotype,recursive=False) hasSubPackagesWithZcml = self.subPackagesWithZcml(package) != [] handleSectionedFile(['configure.zcml'], os.path.join(ppath, 'configure.zcml'), @@ -2791,13 +2784,12 @@ def generateBrowserZCML(self, package,fname="generatedbrowser.zcml"): """generates the generatedbrowser.zcml""" browserViews = self.getViewClasses(package) - viewletViews = self.getClassesWithStereotype(package,self.viewlet_class_stereotype) portletViews = self.getClassesWithStereotype(package,self.portlet_class_stereotype) - if not (browserViews or portletViews or viewletViews): + if not (browserViews or portletViews): return templdir=os.path.join(package.getFilePath(),'templates') - if browserViews or portletViews or viewletViews: + if browserViews or portletViews: self.makeDir(templdir) #create the vanilla templates for view in browserViews: @@ -2810,16 +2802,6 @@ overwrite=False, templateparams={}) - for view in viewletViews: - if not view.getTaggedValue('template_name'): - view.setTaggedValue('template_name','%s.pt' % view.getName()) - - if not view.hasStereoType('stub'): - handleSectionedFile(['viewlet_template.pt'], - os.path.join(templdir, view.getTaggedValue('template_name')), - overwrite=False, - templateparams={'generator':self,'klass':view}) - for view in portletViews: if not view.getTaggedValue('template_name'): view.setTaggedValue('template_name','%s.pt' % view.getName()) @@ -2838,7 +2820,6 @@ sectionnames=['BROWSER'], templateparams={'browserViews': browserViews, 'portletViews': portletViews, - 'viewletViews': viewletViews, 'i18ndomain': package.getProductName()}) def generatePackageIncludesZcml(self, package): diff -N -x '*.py?' -r -u plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/BaseGenerator.py /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/BaseGenerator.py --- plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/BaseGenerator.py 2009-03-20 15:29:33.000000000 -0300 +++ /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/BaseGenerator.py 2009-03-30 12:16:32.000000000 -0300 @@ -55,13 +55,6 @@ description='Generate this class as a zope3 view class ' 'instead of as an Archetypes class.') -base_uml_profile.addStereoType('viewlet_class', ['XMIClass'], - dispatching=1, - generator='generateViewClass', - template=['viewlet_class.pydtml'], - description='Generate this class as a zope3 viewlet' - 'instead of as an Archetypes class.') - base_uml_profile.addStereoType('portlet_class', ['XMIClass'], dispatching=1, generator='generatePortletClass', @@ -85,8 +78,7 @@ uml_profile = base_uml_profile default_class_type = 'python_class' default_interface_type = 'z3' - viewlet_class_stereotype = ['viewlet_class',] - view_class_stereotype = ['view_class', 'view', ] + view_class_stereotype = ['view_class', 'view'] portlet_class_stereotype = ['portlet_class','portlet'] # indent helper for log output: infoind = 0 @@ -292,8 +284,7 @@ # Zope 3 interfaces z3reparentnames = [p.getName() for p in reparents if (self.getInterfaceType(p) == 'z3' - or p.hasStereoType('view_class') - or p.hasStereoType('viewlet_class'))] + or p.hasStereoType('view_class'))] if not element.isInterface() and self._isContentClass(element) and not element.hasStereoType('adapter'): z3reparentnames = ['interfaces.I'+element.getCleanName()]+z3reparentnames diff -N -x '*.py?' -r -u plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/templates/browser.zcml /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/templates/browser.zcml --- plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/templates/browser.zcml 2009-03-21 00:14:31.000000000 -0300 +++ /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/templates/browser.zcml 2009-03-30 12:16:32.000000000 -0300 @@ -61,45 +61,6 @@ </dtml-in> -<dtml-in viewletViews> -<dtml-let klass="_['sequence-item']"> -<dtml-let suppliers="[dep.getSupplier() for dep in klass.getClientDependencies()]"> -<dtml-let views="[x for x in suppliers if x.hasStereoType('view_class')] or ['']"> -<dtml-let managers="[x for x in suppliers if x.hasStereoType('viewlet_manager')] or ['']"> -<dtml-let fors="[x for x in suppliers if x not in views+managers] or ['']"> - <dtml-in fors> - <dtml-let tgtfor="_['sequence-item']"> - <dtml-in views> - <dtml-let tgtview="_['sequence-item']"> - <dtml-in managers> - <dtml-let manager="_['sequence-item']"> - - <browser:viewlet - <dtml-if "tgtfor">for="Products.<dtml-if "tgtfor.isInterface()"><dtml-var "tgtfor.getQualifiedName(includeRoot=True)"><dtml-else><dtml-var "tgtfor.getPackage().getQualifiedName(None,includeRoot=True)">.interfaces.I<dtml-var "tgtfor.getName()"></dtml-if>" - </dtml-if><dtml-if "not tgtfor">for="*"</dtml-if> - <dtml-if "tgtview">view="Products.<dtml-if "tgtview.isInterface()"><dtml-var "tgtview.getQualifiedName(includeRoot=True)"><dtml-else><dtml-var "tgtview.getPackage().getQualifiedName(None,includeRoot=True)">.interfaces.I<dtml-var "tgtview.getName()"></dtml-if>" - </dtml-if> - <dtml-if "manager">manager="Products.<dtml-if "manager.isInterface()"><dtml-var "manager.getQualifiedName(includeRoot=True)"><dtml-else><dtml-var "manager.getPackage().getQualifiedName(None,includeRoot=True)">.interfaces.I<dtml-var "manager.getName()"></dtml-if>" - </dtml-if> - name="<dtml-var "klass.getTaggedValue('name') or klass.getName()" >" - class="Products.<dtml-var "klass.getQualifiedName(includeRoot=True)" >" - template="templates/<dtml-var "klass.getTaggedValue('template_name')" >" - permission="<dtml-var "klass.getTaggedValue('permission') or 'zope2.View'" >" - /> - </dtml-let> - </dtml-in> - </dtml-let> - </dtml-in> - </dtml-let> - </dtml-in> - </dtml-let> - </dtml-let> - </dtml-let> - </dtml-let> - </dtml-let> -</dtml-in> - - <!-- ##code-section BROWSER #fill in your manual code here --> diff -N -x '*.py?' -r -u plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_class.pydtml /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_class.pydtml --- plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_class.pydtml 2009-03-20 13:14:34.000000000 -0300 +++ /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_class.pydtml 1969-12-31 20:00:00.000000000 -0400 @@ -1,50 +0,0 @@ -<dtml-let assocs="klass.getFromAssociations(aggtypes=['none','aggregation','composite'])" - atts="klass.getAttributeDefs()" - dependentImports="generator.generateDependentImports(klass)" - additionalImports="generator.generateAdditionalImports(klass)" - taggedImports="generator.getImportsByTaggedValues(klass)" - vars="atts+[a.toEnd for a in assocs]"> -<dtml-var "generator.getProtectedSection(parsed_class, 'module-header')"> -from zope import interface -from zope import component -from Products.CMFPlone import utils -from plone.app.layout.viewlets.common import ViewletBase -<dtml-if taggedImports><dtml-var taggedImports></dtml-if> -<dtml-if dependentImports><dtml-var dependentImports></dtml-if> -<dtml-if additionalImports><dtml-var additionalImports></dtml-if> -<dtml-if "klass.hasStereoType('z3') or 'z3' in ['z3' for p in klass.getRealizationParents() if p.hasStereoType('z3')]"> -</dtml-if> - -<dtml-let base_class="klass.getTaggedValue('base_class') or ','.join([p.getCleanName() for p in klass.getGenParents()]) or 'ViewletBase'"> -class <dtml-var "klass.getCleanName()"><dtml-if base_class>(<dtml-var base_class>)</dtml-if>: -</dtml-let> - """<dtml-var "utils.indent(klass.getDocumentation(), 1, skipFirstRow=True, stripBlank=True)"> - """ -<dtml-var "generator.generateImplements(klass,[p.getCleanName() for p in klass.getGenParents()])"> -<dtml-var "generator.getProtectedSection(parsed_class,'class-header_'+klass.getCleanName(),1)"> -<dtml-in "generator.getMethodsToGenerate(klass)[0]"> -<dtml-let m="_['sequence-item']"> -<dtml-if "m.getParent().__class__.__name__=='XMIInterface'"> - #from Interface <dtml-var "m.getParent().getName()">: -</dtml-if> -<dtml-if "parsed_class and m.getCleanName() in parsed_class.methods.keys()"> -<dtml-var "parsed_class.methods[m.getCleanName()].getSrc()"> -<dtml-else> -<dtml-let param="', '.join(m.getParamNames())"> - def <dtml-var "m.getName()">(self<dtml-if param>, <dtml-var param></dtml-if>): -</dtml-let> - pass - -</dtml-if> -<dtml-if "m.isStatic()"> - <dtml-var "m.getName()"> = staticmethod(<dtml-var "m.getName()">) -</dtml-if> -</dtml-let> -</dtml-in> - -<dtml-in "[m for m in generator.getMethodsToGenerate(klass)[1]]"> - -<dtml-var "_['sequence-item'].getSrc()"> -</dtml-in> - -<dtml-var "generator.getProtectedSection(parsed_class,'module-footer')"></dtml-let> diff -N -x '*.py?' -r -u plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_template.pt /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_template.pt --- plone/eggs/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_template.pt 2009-03-20 13:17:08.000000000 -0300 +++ /usr/lib/python2.4/site-packages/archgenxml-2.3-py2.4.egg/archgenxml/templates/viewlet_template.pt 1969-12-31 20:00:00.000000000 -0400 @@ -1,3 +0,0 @@ -<div> - Body -</div> ------------------------------------------------------------------------------ _______________________________________________ Archetypes-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/archetypes-users |
||||||||||||||
|
|
Vincent Fretin
()
|
|
||||||||||||
|
Cool, I'll try to look at it, add the stereotypes in the profile and
include in in agx 2.4. On Mon, Mar 30, 2009 at 10:23 PM, Derek Broughton <[hidden email]> wrote: > I got fed up hand generating all my own viewlets (that's how most OSS > development gets done, right?) so cloned the <view_class> support for > <viewlet_class>. > > It relies on two stereotypes <viewlet_class> and <viewlet_manager> which I > haven't attempted to add to the archgenxml XMI profile. > > Add a class with <viewlet_class> stereotype to your model, and AGX will > generate the Class module, a skeleton template, and zcml for each viewlet. > Similar to views, one <browser:viewlet> tag is produced for each > combination of "for", "view" and, in this case, "manager". A "view" > attribute is created for every class dependency which is a "view", > a "manager" attribute is created for every dependency which has > the "viewlet_manager" stereotype, and "for" attributes for all other > dependencies. > > If there are no "for" interfaces, a <browser:viewlet for="*" ... /> tag is > generated. > -- > derek > > ------------------------------------------------------------------------------ > > _______________________________________________ > Archetypes-users mailing list > [hidden email] > https://lists.sourceforge.net/lists/listinfo/archetypes-users > > -- Vincent Fretin ------------------------------------------------------------------------------ _______________________________________________ Archetypes-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/archetypes-users |
||||||||||||||
|
|
Derek Broughton-3
()
|
|
||||||||||||
|
Vincent Fretin wrote:
> Cool, I'll try to look at it, add the stereotypes in the profile and > include in in agx 2.4. > Sorry, that doesn't quite fit the bill - I forgot the fact that I did some hand editing after generating the viewlet .zcml It needs to get a ViewletManager name for the "manager" attribute, rather than using the class name (though I suppose there's nothing intrinsically illegal, it just makes for big and unwieldy names). And since there's nothing to generate the zcml for the viewlet manager, I should add that too. Tomorrow :-) -- derek ------------------------------------------------------------------------------ _______________________________________________ Archetypes-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/archetypes-users |
||||||||||||||
|
|
Vincent Fretin
()
|
|
||||||||||||
|
On Tue, Mar 31, 2009 at 6:06 PM, Derek Broughton <[hidden email]> wrote:
> Vincent Fretin wrote: > >> Cool, I'll try to look at it, add the stereotypes in the profile and >> include in in agx 2.4. >> > > Sorry, that doesn't quite fit the bill - I forgot the fact that I did some > hand editing after generating the viewlet .zcml > > It needs to get a ViewletManager name for the "manager" attribute, rather > than using the class name (though I suppose there's nothing intrinsically > illegal, it just makes for big and unwieldy names). And since there's > nothing to generate the zcml for the viewlet manager, I should add that > too. Tomorrow :-) > -- > derek Hi, I'm sorry Derek, this functionnality won't be in archgenxml 2.4. I don't have the time to review your patch correctly and test it. I will make the release of archgenxml 2.4 now. Please continue to develop this functionality, and add your two stereotypes in src/archgenxml/src/archgenxml/BaseGenerator.py next to portlet_class. PS : I'm in vacation between 3 and 14 april, without computer of course. Have a good day -- Vincent Fretin ------------------------------------------------------------------------------ _______________________________________________ Archetypes-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/archetypes-users |
||||||||||||||
|
|
Derek Broughton-3
()
|
|
||||||||||||
|
Vincent Fretin wrote:
> > I'm sorry Derek, this functionnality won't be in archgenxml 2.4. I > don't have the time to review your patch correctly and test it. > I will make the release of archgenxml 2.4 now. No problem - I really wasn't expecting to get into 2.4, and I'd rather see the 2.4 release made than have it wait for my changes. After all, I can apply my patch to 2.4, too, and so can anybody else who feels they really need it. -- derek ------------------------------------------------------------------------------ _______________________________________________ Archetypes-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/archetypes-users |
||||||||||||||
| Free Embeddable Forum Powered by Nabble | Help |