<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8736350832664937104</id><updated>2011-11-27T17:07:33.078-08:00</updated><category term='Swing'/><category term='Flex'/><category term='Grid'/><category term='framework'/><category term='BlazeDs'/><category term='VineToolkit'/><category term='Ant'/><category term='Groovy'/><category term='Gridsphere'/><category term='effect'/><title type='text'>Web UI techniques</title><subtitle type='html'>Recipes for the Java Groovy Flex BlazeDs issues in the context of web applications.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tech4web.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tech4web.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Piotr Dziubecki</name><uri>http://www.blogger.com/profile/04762361429913229433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_FKwQMYRn2MU/SUuRAdLlEKI/AAAAAAAAAec/gS_DQsUNzs8/S220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8736350832664937104.post-4446106207193681304</id><published>2009-01-07T07:09:00.000-08:00</published><updated>2009-01-08T03:32:37.213-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Swing'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Ant and gui components ( Groovy Swing )</title><content type='html'>&lt;p&gt;What to do if you want to extend ant scripts functionality with some gui features i.e. wizards for the beginners etc. ? I was facing the same problem - I needed some quick and nice solution so my choice was Swing and Java, well not directly - it's Groovy and SwingBuilder. It's even easier :)&lt;/p&gt;&lt;p&gt;Two things, we need to create our component in Groovy and integrate it with Ant's environment.&lt;/p&gt;&lt;p&gt;Component's key parts and structure ( Groovy ):&lt;/p&gt;Some explanations:&lt;br /&gt;&lt;br /&gt;We need to add the code preventing from the thread termination due to Ant policies. Ant executes target and ends its work by terminating its thread and all sub threads.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;isAlive&lt;/code&gt; - flag which indicates whether component is alive or not&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;class Configurator extends SoftwareBuild {&lt;br /&gt;&lt;br /&gt;boolean isAlive = true&lt;br /&gt;SwingBuilder swing = null&lt;br /&gt;JFrame frame = null&lt;br /&gt;&lt;br /&gt;public void init(AntBuilder providerAntBuilder) {&lt;br /&gt;  if (swing == null || frame == null) {&lt;br /&gt;      swing = new SwingBuilder()&lt;br /&gt;      frame = swing.frame()&lt;br /&gt;  }&lt;br /&gt;  super.init(providerAntBuilder);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public void start() {&lt;br /&gt;&lt;br /&gt;  frame = swing.frame(title: 'Vine configurator', size: [800, 600],&lt;br /&gt;          defaultCloseOperation: WindowConstants.EXIT_ON_CLOSE,&lt;br /&gt;          addShutdownHook { isAlive = false}) {&lt;br /&gt;        &lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  frame.show()&lt;br /&gt;&lt;br /&gt;  //To keep this tread alive - prevents from being closed by ant&lt;br /&gt;  while (isAlive) {&lt;br /&gt;      sleep(1000)&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Invocation of our component from the ant script level ( Ant's build.xml ):&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;&amp;lt;target name="gui" description="Displays gui for Vine configuration"&gt;&lt;br /&gt;  &amp;lt;groovy&gt;&lt;br /&gt;&lt;br /&gt;      ant.gui.Configurator configurator = new ant.gui.Configurator()&lt;br /&gt;      try {&lt;br /&gt;// from the level of Ant's build script we're passing a reference to the ant environment&lt;br /&gt;      configurator.init(ant)&lt;br /&gt;// displaying our swing component&lt;br /&gt;      configurator.start()&lt;br /&gt;      } catch (Exception e) {&lt;br /&gt;      e.printStackTrace()&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;  &amp;lt;/groovy&gt;&lt;br /&gt;&amp;lt;/target&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Ant the effect of this work is ( based on the example from the Vine Toolkit ):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_FKwQMYRn2MU/SWXjFOk5LII/AAAAAAAAAls/d0_-eTYq2d4/s1600-h/configurator.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 321px;" src="http://1.bp.blogspot.com/_FKwQMYRn2MU/SWXjFOk5LII/AAAAAAAAAls/d0_-eTYq2d4/s400/configurator.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5288883016368204930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8736350832664937104-4446106207193681304?l=tech4web.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tech4web.blogspot.com/feeds/4446106207193681304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tech4web.blogspot.com/2009/01/ant-and-gui-components-groovy-swing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/4446106207193681304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/4446106207193681304'/><link rel='alternate' type='text/html' href='http://tech4web.blogspot.com/2009/01/ant-and-gui-components-groovy-swing.html' title='Ant and gui components ( Groovy Swing )'/><author><name>Piotr Dziubecki</name><uri>http://www.blogger.com/profile/04762361429913229433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_FKwQMYRn2MU/SUuRAdLlEKI/AAAAAAAAAec/gS_DQsUNzs8/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_FKwQMYRn2MU/SWXjFOk5LII/AAAAAAAAAls/d0_-eTYq2d4/s72-c/configurator.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8736350832664937104.post-939440549573294555</id><published>2008-12-31T02:01:00.001-08:00</published><updated>2008-12-31T08:58:46.707-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>mxmlc ant Flex task in Groovy</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;&lt;p&gt;lately, there was a need to add a flex compilation feature to the &lt;a href="http://vinetoolkit.org/"&gt;Vine Toolkit&lt;/a&gt; build system. In the build scripts we're using Groovy as our extension to Ant scripts so I designed some additional logic to automatically choose source files and compile them in a special manner:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;compile only source files with the Vine Toolkit extensions,&lt;/li&gt;&lt;li&gt;add locale bundles,&lt;/li&gt;&lt;li&gt;add dependent source paths,&lt;/li&gt;&lt;li&gt;add external libraries.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I'm presenting this code because not all options were mapped correctly in ant task def, especially the external library path was pretty troublesome :)&lt;/p&gt;&lt;p&gt;Here is the code snippet:&lt;/p&gt;&lt;code&gt;flexAppPath&lt;/code&gt; - path to the flex sources.&lt;br /&gt;&lt;code&gt;flexLocalePath&lt;/code&gt; - path to the flex locale bundles.&lt;br /&gt;&lt;code&gt;dependentSourcePath&lt;/code&gt; - path to dependent flex sources.&lt;br /&gt;&lt;code&gt;flexLibPath&lt;/code&gt; - path to the external swc libraries.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;&lt;br /&gt;        antBuilder.fileset(id: "flexSourcesList", dir: flexAppPath,&lt;br /&gt;                includes: "**/*.mxml") {&lt;br /&gt;                antBuilder.contains(text: "VineApplication")&lt;br /&gt;&lt;br /&gt;        if (new File(flexLibPath).exists()) {&lt;br /&gt;            antBuilder.fileset(id: "flexLibList", dir: flexLibPath,&lt;br /&gt;                    includes: "**/*.swc")&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        antBuilder.project.references.flexSourcesList.each {&lt;br /&gt;            println "Compiling " + it.name&lt;br /&gt;            antBuilder.mxmlc(&lt;br /&gt;                    file: it) {&lt;br /&gt;                antBuilder.'use-network'('true')&lt;br /&gt;                antBuilder.'compiler.strict'('true')&lt;br /&gt;                antBuilder.'compiler.context-root'('gridsphere')&lt;br /&gt;                antBuilder.'compiler.services'(applicationBuild.getBuildAptPath() + '/WEB-INF/services-config.xml')&lt;br /&gt;                println "*    Using services-config.xml file from: " + applicationBuild.getBuildAptPath() + '/WEB-INF/services-config.xml'&lt;br /&gt;                println "**   Adding locale source path: " + flexLocalePath + '/{locale}'&lt;br /&gt;                antBuilder.'compiler.source-path'(flexLocalePath + '/{locale}')&lt;br /&gt;&lt;br /&gt;                new File(flexLocalePath).listFiles().each {&lt;br /&gt;                    if (!it.name.startsWith(".")) {&lt;br /&gt;                        println "**   Adding locale: " + it.name&lt;br /&gt;                        antBuilder.'compiler.locale'(it.name)&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;&lt;br /&gt;                antBuilder.'compiler.source-path'('path-element': flexAppPath)&lt;br /&gt;                println "***  Adding dependency from: " + flexAppPath&lt;br /&gt;&lt;br /&gt;                usesProjectBuildList.each {&lt;br /&gt;                        String dependentSourcePath = it + 'flex/src'&lt;br /&gt;                        antBuilder.'compiler.source-path'('path-element': dependentSourcePath)&lt;br /&gt;                        println "***  Adding dependency from: " + dependentSourcePath&lt;br /&gt;                &lt;br /&gt;                }&lt;br /&gt;                antBuilder.project.references.flexLibList.each {&lt;br /&gt;                    String libraryPath = it&lt;br /&gt;                    println "**** Adding external library: " + libraryPath&lt;br /&gt;                    antBuilder.'compiler.library-path'('file': libraryPath, 'append': 'true')&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;I especially like this code for listing files:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;&lt;br /&gt;new File(flexLocalePath).listFiles().each {&lt;br /&gt;if (!it.name.startsWith(".")) {&lt;br /&gt;println "**   Adding locale: " + it.name&lt;br /&gt;antBuilder.'compiler.locale'(it.name)&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;This is the pure power of Groovy especially in conjunction with ant features.&lt;/p&gt;&lt;p&gt;Enjoy :)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8736350832664937104-939440549573294555?l=tech4web.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tech4web.blogspot.com/feeds/939440549573294555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tech4web.blogspot.com/2008/12/mxmlc-ant-flex-task-in-groovy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/939440549573294555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/939440549573294555'/><link rel='alternate' type='text/html' href='http://tech4web.blogspot.com/2008/12/mxmlc-ant-flex-task-in-groovy.html' title='mxmlc ant Flex task in Groovy'/><author><name>Piotr Dziubecki</name><uri>http://www.blogger.com/profile/04762361429913229433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_FKwQMYRn2MU/SUuRAdLlEKI/AAAAAAAAAec/gS_DQsUNzs8/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8736350832664937104.post-3921140354769557331</id><published>2008-12-30T01:06:00.001-08:00</published><updated>2008-12-30T06:56:55.388-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='effect'/><title type='text'>Simple example of fish eye effect  in flex</title><content type='html'>Ok,&lt;p&gt;it's very simple, but can do the work :) Below, there is a screenshot from the rss component from Vine Toolkit - you can change views using that feature. When pointer is over the icon it's being zoomed in, with pointer out of the icon area it's zoomed out to its original state.  Additionally whole logic ( except effect definitions ) is done on the Action Script side.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_FKwQMYRn2MU/SVnk8gc1sUI/AAAAAAAAAfI/v493MYarQU0/s1600-h/tutorials_rss.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 211px;" src="http://3.bp.blogspot.com/_FKwQMYRn2MU/SVnk8gc1sUI/AAAAAAAAAfI/v493MYarQU0/s400/tutorials_rss.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5285507365850165570" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In the mxml code define 2 effects responsible for the image resizing:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;&amp;lt;mx:Zoom id="zoomIn" zoomHeightTo="1.1" zoomWidthTo="1.1"&gt;&amp;lt;/mx:Zoom&gt;&lt;br /&gt;&amp;lt;mx:Zoom id="zoomOut" zoomHeightTo="1.0" zoomWidthTo="1.0"&gt;&amp;lt;/mx:Zoom&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Then in our as class we need a logic for creating icons with their handlers:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;[Bindable]&lt;br /&gt;&lt;br /&gt;[Embed(source="assets/panel_view_250_176.png")]&lt;br /&gt;&lt;br /&gt;static public var panelViewIcon:Class;&lt;br /&gt;&lt;br /&gt;[Bindable]&lt;br /&gt;&lt;br /&gt;[Embed(source="assets/accordion_view_250_176.png")]&lt;br /&gt;&lt;br /&gt;static public var accordionViewIcon:Class;&lt;br /&gt;&lt;br /&gt;[Bindable]&lt;br /&gt;&lt;br /&gt;[Embed(source="assets/tab_view_250_176.png")]&lt;br /&gt;&lt;br /&gt;static public var tabViewIcon:Class;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public function createChangeViewHBox():void {&lt;br /&gt;&lt;br /&gt;   viewHBox = new HBox();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   var panelViewButton:Button = new Button();&lt;br /&gt;&lt;br /&gt;   panelViewButton.setStyle("icon", panelViewIcon);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   panelViewButton.addEventListener(flash.events.MouseEvent.CLICK, &lt;br /&gt;&lt;br /&gt;    function(event:flash.events.MouseEvent):void {&lt;br /&gt;&lt;br /&gt;       PopUpManager.removePopUp(viewHBox);&lt;br /&gt;&lt;br /&gt;       Alert.show("panelViewButton clicked");&lt;br /&gt;&lt;br /&gt;   });&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   panelViewButton.setStyle("rollOverEffect", zoomIn);&lt;br /&gt;&lt;br /&gt;   panelViewButton.setStyle("rollOutEffect", zoomOut);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   viewHBox.addChild(panelViewButton);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   var accordionViewButton:Button = new Button();&lt;br /&gt;&lt;br /&gt;   accordionViewButton.setStyle("icon", accordionViewIcon)&lt;br /&gt;&lt;br /&gt;   accordionViewButton.addEventListener(flash.events.MouseEvent.CLICK,&lt;br /&gt;&lt;br /&gt;    function(event:flash.events.MouseEvent):void {&lt;br /&gt;&lt;br /&gt;       PopUpManager.removePopUp(viewHBox);&lt;br /&gt;&lt;br /&gt;       Alert.show("accordionViewButton clicked");&lt;br /&gt;&lt;br /&gt;   });&lt;br /&gt;&lt;br /&gt;   accordionViewButton.setStyle("rollOverEffect", zoomIn);&lt;br /&gt;&lt;br /&gt;   accordionViewButton.setStyle("rollOutEffect", zoomOut);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   viewHBox.addChild(accordionViewButton);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   var tabViewButton:Button = new Button();&lt;br /&gt;&lt;br /&gt;   tabViewButton.setStyle("icon", tabViewIcon)&lt;br /&gt;&lt;br /&gt;   tabViewButton.addEventListener(flash.events.MouseEvent.CLICK, &lt;br /&gt;&lt;br /&gt;    function(event:flash.events.MouseEvent):void {&lt;br /&gt;&lt;br /&gt;       PopUpManager.removePopUp(viewHBox);&lt;br /&gt;&lt;br /&gt;       Alert.show("tabViewButton clicked");&lt;br /&gt;&lt;br /&gt;   });&lt;br /&gt;&lt;br /&gt;   tabViewButton.setStyle("rollOverEffect", zoomIn);&lt;br /&gt;&lt;br /&gt;   tabViewButton.setStyle("rollOutEffect", zoomOut);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   viewHBox.addChild(tabViewButton);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;As you can see it's pretty simple code, just don't forget that effects and icons are set via &lt;strong&gt;setStyle()&lt;/strong&gt; method.&lt;/p&gt;&lt;p&gt;Second thing, viewHBox is a separate widget just to make a popup of it.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8736350832664937104-3921140354769557331?l=tech4web.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tech4web.blogspot.com/feeds/3921140354769557331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tech4web.blogspot.com/2008/12/simple-example-of-fish-eye-effect-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/3921140354769557331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/3921140354769557331'/><link rel='alternate' type='text/html' href='http://tech4web.blogspot.com/2008/12/simple-example-of-fish-eye-effect-in.html' title='Simple example of fish eye effect  in flex'/><author><name>Piotr Dziubecki</name><uri>http://www.blogger.com/profile/04762361429913229433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_FKwQMYRn2MU/SUuRAdLlEKI/AAAAAAAAAec/gS_DQsUNzs8/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_FKwQMYRn2MU/SVnk8gc1sUI/AAAAAAAAAfI/v493MYarQU0/s72-c/tutorials_rss.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8736350832664937104.post-7238468569775611046</id><published>2008-12-19T04:58:00.000-08:00</published><updated>2009-10-30T03:52:31.499-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VineToolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='BlazeDs'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='Grid'/><title type='text'>VineToolkit as a Java / Flex / BlazeDs web MVC framework</title><content type='html'>&lt;p&gt;As I've mentioned before I'd like to present you my main field of research and work - Vine Toolkit framework. This is pretty interesting piece of software, especially because of its modular structure.  In a current form it could be perceived as a MVC framework with the following structure:&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FKwQMYRn2MU/SUufaBrCarI/AAAAAAAAAfA/yFzOcHQicz8/s1600-h/exampleStructure.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 381px;" src="http://4.bp.blogspot.com/_FKwQMYRn2MU/SUufaBrCarI/AAAAAAAAAfA/yFzOcHQicz8/s400/exampleStructure.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5281490257496402610" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;You can see here that I've included some mappings between the server and client side. If you're familiar with BlazeDs and Flex you'll notice that right away - it's the Remoting from BlazeDs integrated trough our additional logic with a hosting environment ( i.e. portlet container - session/user management and so on ).&lt;/p&gt;&lt;p&gt;But what Vine gives you apart from that ? &lt;strong&gt;Ease of use. &lt;/strong&gt;What does it stands for ? There are two things which do all the magic:&lt;/p&gt;&lt;p&gt;- build system:&lt;/p&gt;&lt;p&gt;It's a set of powerful scripts ( Ant mixed with Groovy ) responsible for building all parts of Vine and performing additional pre/post-processing task. It means that with one command:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;code&gt;ant install&lt;/code&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;build system will fetch all needed sources from the svn, compile Java and Flex source files,  process all annotations of classes and generate configuration files for BlazeDs and servlet/portlet container. Then it will deploy all that stuff to the target environment and performs some post-processing tasks like tuning deployment descriptors in a destination environment.&lt;/p&gt;&lt;p&gt;Another use-case is to add new components - it's just creating another project with our gui wizard - then you'll get a template component which could be a base to your new one.&lt;/p&gt;&lt;p&gt;- integration logic:&lt;/p&gt;&lt;p&gt;we've created several tools responsible for hiding some implementation details from the end user ( there is a base class on the client side which is responsible for the MVC logic and adds some helper methods i.e. to manage file upload/download ) and on the server side we have logic which among the others is synchronizing data between hosting environment and user components, it's responsible for the model persistence and so on.&lt;/p&gt;&lt;p&gt;I didn't mention about the strong HPC/Grid background of Vine, it's added value here. Thanks to the modular structure of Vine we extended its basic functionality and added a resource model - the resource in Vine could be any concept i.e. file system resource, task resource etc.&lt;/p&gt;&lt;p&gt;As a base functionality we give you a local file system resource where user can store his files with advanced file upload/download control, possibility to define your own custom resources and much more. If you want to do something with a HPC you can use our grid sub-projects like:&lt;/p&gt;&lt;p&gt;- Globus Toolkit, G-Lite, Unicore support with their secuirity solutions,&lt;/p&gt;&lt;p&gt;- support for grid file systems,&lt;/p&gt;&lt;p&gt;- support for info services.&lt;/p&gt;&lt;p&gt;Then you'll gain a grid context in your components and a transparent way to access them.&lt;/p&gt;&lt;p&gt;Of course this is just general description of Vine Toolkit. If you get interested in that you can go to the &lt;a href="http://vinetoolkit.org/"&gt;vinetookit.org&lt;/a&gt; page and get into details..&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8736350832664937104-7238468569775611046?l=tech4web.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tech4web.blogspot.com/feeds/7238468569775611046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tech4web.blogspot.com/2008/12/vinetoolkit-as-java-flex-blazeds-web-ui.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/7238468569775611046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/7238468569775611046'/><link rel='alternate' type='text/html' href='http://tech4web.blogspot.com/2008/12/vinetoolkit-as-java-flex-blazeds-web-ui.html' title='VineToolkit as a Java / Flex / BlazeDs web MVC framework'/><author><name>Piotr Dziubecki</name><uri>http://www.blogger.com/profile/04762361429913229433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_FKwQMYRn2MU/SUuRAdLlEKI/AAAAAAAAAec/gS_DQsUNzs8/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_FKwQMYRn2MU/SUufaBrCarI/AAAAAAAAAfA/yFzOcHQicz8/s72-c/exampleStructure.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8736350832664937104.post-4274943947336142696</id><published>2008-12-19T02:27:00.000-08:00</published><updated>2008-12-19T04:00:42.224-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Gridsphere'/><category scheme='http://www.blogger.com/atom/ns#' term='VineToolkit'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='BlazeDs'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><title type='text'>To begin with..</title><content type='html'>&lt;p&gt;Hi,&lt;/p&gt;&lt;p&gt;just few words of introduction.  The main purpose of this blog is to share my ideas regarding Web UI with you. Many times sites like this were saving me a lot of time and now I'd like to give something in exchange :) I'll mainly focus on the Flex / BlazeDs issues as well as on the Groovy scripting language since I'm using it to enhance Ant build scripts in our framework. Talking about that, I'm the core developer in the &lt;a href="http://vinetoolkit.org"&gt;Vine Toolkit&lt;/a&gt; project and most cases my posts will be the solutions to problems I have faced there. I'll also do a brief presentation of this framework - it's the glue between Flex/BlazeDs and the web application containers like Tomcat and it could be deployed in a portlet containers ( &lt;a href="http://www.gridsphere.org"&gt;Gridsphere&lt;/a&gt; ) as a set of integrated portlet components. &lt;/p&gt;&lt;p&gt;That all for now.&lt;/p&gt;&lt;p&gt;Cheers,&lt;/p&gt;&lt;p&gt;Piotr&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8736350832664937104-4274943947336142696?l=tech4web.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tech4web.blogspot.com/feeds/4274943947336142696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://tech4web.blogspot.com/2008/12/to-begin-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/4274943947336142696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8736350832664937104/posts/default/4274943947336142696'/><link rel='alternate' type='text/html' href='http://tech4web.blogspot.com/2008/12/to-begin-with.html' title='To begin with..'/><author><name>Piotr Dziubecki</name><uri>http://www.blogger.com/profile/04762361429913229433</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/_FKwQMYRn2MU/SUuRAdLlEKI/AAAAAAAAAec/gS_DQsUNzs8/S220/me.jpg'/></author><thr:total>0</thr:total></entry></feed>
