Friday, September 08, 2006
'ListOfFiles' ant task
Here is an ant task, that converts ant FileSet into property containing string with list of files. I have used that task many times in my ant scripts. Most useful use cases include building "Class-Path:" manifest attribute and list of files for compc Flex 2 compiler.
It can be used in many other places where you need to convert fileset into a string of comma or space separated files.
You can download source and jar for this task at http://igorgrapp.com/files/anttools.zip
Here is an example on how to use it:
For more examples download zip file and check out test.xml
There are number of utilities that need to be run during project build process and require to pass files as list of comma or space separated arguments.
It can be used in many other places where you need to convert fileset into a string of comma or space separated files.
You can download source and jar for this task at http://igorgrapp.com/files/anttools.zip
Here is an example on how to use it:
<project …
<taskdef name="list-of-files" class="com.igorgrapp.taskdefs.ListOfFilesTask">
<classpath>
<pathelement location="ant-igrapp.jar"/>
</classpath>
</taskdef>
...
<target …
<list-of-files separator=" " outProperty="libs" prefix="../lib">
<fileset dir="${basedir}/lib">
<include name="**/*.jar"/>
</fileset>
</list-of-files>
<jar destfile="some.jar">
<manifest>
<attribute name="Class-Path" value="${libs}">
...
For more examples download zip file and check out test.xml
There are number of utilities that need to be run during project build process and require to pass files as list of comma or space separated arguments.
Tuesday, September 05, 2006
Link JSP Tag
Link tag is a tag that is similar to "html:struts" tag, but render an "link tag rather "a" tag.
Basically code is very straightforward, and most complicated chunk is on lines 112-125 - rendering static html attributes was placed there out of my laziness - I did not want to cut-n-paste all these attributes.
Anyway, I found it very useful for rendering context independent css link tags in the header of the html page.
Download source here
Download source here
Friday, September 01, 2006
Flex for Java Prgrammers
I discover a very interesting Flex 2 feature today:
You MUST explicitly import all classes used in your program, even if you specify full class name ( including package )
This WILL NOT work:
public var myclass: com.package.MyClass;
This WILL work:
import com.package.MyClass;
public var myclass: com.package.MyClass;
Weird, but true....
You MUST explicitly import all classes used in your program, even if you specify full class name ( including package )
This WILL NOT work:
public var myclass: com.package.MyClass;
This WILL work:
import com.package.MyClass;
public var myclass: com.package.MyClass;
Weird, but true....
Saturday, August 26, 2006
SVN and CVS eclipse plugins.
Today I have used SVN for the first time and I got mixed feeling about SVN plugin for Eclipse.
Overwall it works ok , however there were couple of things that confused me.
A lot of people claim SVN to be faster, but I really did not feel it. To me it seemed to have no better performance than CVS.
Many times, when integrating other people changes to CVS, I just place updated file over existing and commit. When I tried to do that using eclipse SNV plugin, it marked file as deleted. I needed to open file and use cut-n-paste to replace its content. Seems a little weird to me and CVS is much straightforward in this.
SVN has file locking - this is a good thing, becuase many tims you need to lock a file while working on it and merge really complicate things, rather solves issues. Developers suppose to talk one with each other about changes, but it does not work at times.
My final conclusion that I will need to think if I really want to use SVN instead of CVS.
Overwall it works ok , however there were couple of things that confused me.
A lot of people claim SVN to be faster, but I really did not feel it. To me it seemed to have no better performance than CVS.
Many times, when integrating other people changes to CVS, I just place updated file over existing and commit. When I tried to do that using eclipse SNV plugin, it marked file as deleted. I needed to open file and use cut-n-paste to replace its content. Seems a little weird to me and CVS is much straightforward in this.
SVN has file locking - this is a good thing, becuase many tims you need to lock a file while working on it and merge really complicate things, rather solves issues. Developers suppose to talk one with each other about changes, but it does not work at times.
My final conclusion that I will need to think if I really want to use SVN instead of CVS.
Wednesday, August 23, 2006
Struts error message handling
There is a lot of material written on how to handle error messages with struts, but I would like outline implementation for specific use case that I had to implement today.
Scenario:
There is a form that does some work Once user submit the form, action performed and user redirected back to the initial page with form, displaying either error message in red color or success message in green color.
Message should be displayed only once, and subsequent refresh of the page should not display neither success or error message. No ".do" url should ever appear in address bar
Solution:
Create "success" and "error" message bundles and use 2 different instances of tag to control presentation. Make sure that in the action code either "success" or "error" resources keys are passed, not both. Errors then saved on the session, in order to survive http redirect. jsp page has logic for transering error o
Important Implementation points:
- In this implementation I specifically using session to store errors and use redirect ="true" attribute in action mapping config.
- Due my laziness, I am using FONT tags instead of CSS, but it does the job just fine.
- Errors then saved on the session, in order to survive http redirect.
- Jsp page has logic for transering error object from session to request scope, removing it afterwards. This is needed to display it only once, and avoid displaying messages upond page refresh after action performed.