Posted by jeyben on 12th June 2008
This evening I released a new version of fixedformat4j containing improved error reporting when failing to parse data using the FixedFormatManager.
The lack of good error reporting was a bit of a pain. It was not easy to see where in the parsing failed and it was not possible to get a complete list of format instructions.
A new ParseException is now thrown which contains the nessesary information.
See example of the new and improved stacktrace:
com.ancientprogramming.fixedformat4j.format.ParseException: failed to parse 'barfooba' at offset 16 as java.util.Date from 'foobarfoobarfoobarfoobar'. Got format instructions from com.ancientprogramming.fixedformat4j.format.impl.MyRecord.getDateData. See details{FormatContext{offset=16, dataType=java.util.Date, formatter=com.ancientprogramming.fixedformat4j.format.impl.ByTypeFormatter}, FormatInstructions{length=8, alignment=LEFT, paddingChar=' ', fixedFormatPatternData=FixedFormatPatternData{pattern='yyyyMMdd'}, fixedFormatBooleanData=FixedFormatBooleanData{trueValue='T', falseValue='F'}, fixedFormatNumberData=FixedFormatNumberData{signing=NOSIGN, positiveSign='+', negativeSign='-'}, fixedFormatDecimalData=FixedFormatDecimalData{decimals=2, useDecimalDelimiter=false, decimalDelimiter='.'}}}
at com.ancientprogramming.fixedformat4j.format.impl.FixedFormatManagerImpl.readDataAccordingFieldAnnotation(FixedFormatManagerImpl.java:179)
at com.ancientprogramming.fixedformat4j.format.impl.FixedFormatManagerImpl.load(FixedFormatManagerImpl.java:70)
Feel free to download the latest version and take a look at the changelist.
Posted in java | 2 Comments »
Posted by jeyben on 5th June 2008
Many maven projects uses the maven site plugin to generate there documentation.
The maven-site-plugin uses the doxia to let authors write xdoc, apt and fml documents as the source for there project documentation. These written documents is processed by doxia to generate html and merged into the complete project site by the maven-site-plugin.
I found doxia and especially the apt language somehow lacking in functionality. I would like to use the syntaxhighlighter to be able to highlight code examples on the fixedformat4j project.
Doxia comes out-of-the-box with a small bunch of macros and you have the ability to write custom macros as well.
Custom macro
I wrote a simple macro based on the core snippet macro:
pom.xml:
org.apache.maven.doxia
doxia-modules
1.0-alpha-11
4.0.0
com.ancientprogramming.maven.doxia
doxia-module-syntaxhighlighter
1.0-alpha-11
Doxia :: syntaxhighlighter
org.codehaus.plexus
plexus-maven-plugin
descriptor
Changes to the snippet plugin:
...
public void execute(Sink sink, MacroRequest request)
throws MacroExecutionException {
System.out.println("ancientprogramming - running execute");
String id = (String) request.getParameter("id");
required(id, "id");
String urlParam = (String) request.getParameter("url");
String fileParam = (String) request.getParameter("file");
String codeParam = (String) request.getParameter("code");
required(codeParam, "code");
URL url;
if (!StringUtils.isEmpty(urlParam)) {
try {
url = new URL(urlParam);
}
catch (MalformedURLException e) {
throw new IllegalArgumentException(urlParam + " is a malformed URL");
}
} else if (!StringUtils.isEmpty(fileParam)) {
File f = new File(fileParam);
if (!f.isAbsolute()) {
f = new File(request.getBasedir(), fileParam);
}
try {
url = f.toURL();
}
catch (MalformedURLException e) {
throw new IllegalArgumentException(urlParam + " is a malformed URL");
}
} else {
throw new IllegalArgumentException("Either the 'url' or the 'file' param has to be given.");
}
StringBuffer snippet;
try {
snippet = getSnippet(url, id);
}
catch (IOException e) {
throw new MacroExecutionException("Error reading snippet", e);
}
sink.rawText("... syntaxhighlighter prefix ...");
sink.rawText(snippet.toString());
sink.rawText("... syntaxhighlighter postfix ...");
}
...
Note: wordpress obfuscates the above code where I wrote the syntax hightlighter pre and post fix. You can see what you actually should write at the syntaxhighligther project.
Use custom macro
To be able to use the macro you have to add your macro as dependency to the maven-site-plugin:
org.apache.maven.plugins
maven-site-plugin
${basedir}/src/site
src/site/fixedformat4j-template.vm
com.ancientprogramming.maven.doxia
doxia-module-syntaxhighlighter
1.0-alpha-11
Now you can use the macro by writing the following in your apt files:
%{code-snippet|id=basicusage|code=java|file=../../BasicUsageRecord.java}
Change your site template
Before the the source can be highlighted in your documentation you should add the syntaxhighlighter javascript and stylesheets to your template.
See how to change your template here.
Posted in how to, java, maven | No Comments »
Posted by jeyben on 5th June 2008
Today I found fixedformat4j was obtained at sonarsoftware and it was exciting to see that it scored pretty well compared to some other very well known opensource projects like the commons series, some of the spring module and even the Apache Maven project.
I didn’t know sonar before today. They describe them as:
Sonar is an entreprise quality control tool, distributed under the terms of the GNU LGPL. Its basic purpose is to join existing continuous integration tools to place Java development projects under quality control.
Even though the metrics at sonar doesn’t draw the complete picture on how good or mature a project is, it still gives a hint.
Posted in fixedformat4j, java | No Comments »
Posted by jeyben on 30th May 2008
We use fixedformat4j on my current project and I am developing fixedformat4j along the way. We have found the initial 1.0.0 release lacking in the ability to parse signed numbers like:
00011050+, that equals a two digit signed bigdecimal number 100.50
The fixedformatnumber annotation was introduced with the ability to add a signed attribute.
This is how you would annotate your method to be able to read and write a string like 000010050+:
...
@Field(offset = 1, length = 10, align = Align.RIGHT, paddingChar = '0')
@FixedFormatDecimal(useDecimalDelimiter = true)
@FixedFormatNumber(sign = Sign.APPEND)
public BigDecimal getBigDecimalData() {
return bigDecimalData;
}
...
This was added in version 1.1.0, but some bugs was spotted and fixed so quickly a 1.1.1 version was released.
Feel free to download the latest version and take a look at the changelist.
Posted in fixedformat4j, java | No Comments »
Posted by jeyben on 25th May 2008
At my current project we decided to use fixedformat4j.
So after all your feedback on my recent draft implementation I have been working quite hard this weekend to get fixedformat4j shined up.
The implementation looks pretty much what Niels proposed here and I implemented support for bigdecimal as Bob wished. That means that javassist is gone and fixedformat4j is now much less intrusive - you don’t have ti extend or implement anything to be able to load and export data.
You can see just how easy on the “getting started” at the frontpage of the project.
At this time of writing the api is only available through the download page, but I have send a maven upload request so soon it will be available from ibiblio.
Posted in fixedformat4j, java | 2 Comments »
Posted by jeyben on 17th March 2008
Earlier I wrote about reading and writing fixed formatted text files. Fortunately you all were eager to comment and provide suggestions on how to do this.
Inspired by your suggestions I decided to write an open source api to manipulate these fixed formatted data and promised to get back when I had code that was releasable.
That time is now!
I have deliberately not released a version yet as I would like some feedback before I commit myself to an api.
Please take a look at the documentation at http://fixedformat4j.ancientprogramming.com/ and let me know your thoughts on the api.
The sourcecode can be browsed here.
I hope you will bring me some feedback before I do a final release.
Posted in fixedformat4j, java | 10 Comments »
Posted by jeyben on 1st March 2008
I am working on a project where we need to manipulate fixed formatted text files. The fixed formatted files are used as protocol for interchanging data between some legacy mainframe systems. I have been looking for some already existing api for manipulating these fixed formatted data but couldn’t find any.
So this weekend I started implementing a solution based on some of the idea´s we got along the way.
Basics
I have a few goals for the api:
- A line of text should be easily manipulated as a java object.
- Should require a minimum of own code to manipulate the text string.
- Use annotations to define attributes like:
- Offset in text
- The fixed length of the text
- padding direction and padding character
The api usage could look something like this:
public interface Record {
// use if you need a reference to the manipulated string - could be a constructor
void initialize(StringBuffer buffer);
// use if you don't need a reference to the manipulated string - could be a constructor
void initialize(String string);
String export(); //export string
}
...
public abstract class MyRecord implements Record {
@FixedFormatField(offset = 10, length=20, paddingChar='0')
public abstract void setMyInteger(Integer myInteger);
@FixedFormatField(offset = 10, length=20, paddingChar='0')
public abstract Integer getMyInteger();
}
And then a factory to create instances of the Record. Maybe annotations on fields would be nice as well as dublicating annotations for setter/getter is waste and could be error-prone.
This is the part I am working on at the moment and getting some hands-on experience with javassist. I will get back to that in another post.
Fixedformat4j
I have named the api fixedformat4j and I will opensource it as soon as I have something worth for others to use. Hopefully it won’t end up as one of my numerous 23% finished projects…
Posted in fixedformat4j, java | 7 Comments »
Posted by admin on 1st March 2008
I have been using blogspot for almost a year now but now I found the time and energy to move to my own domain. The genre of the content should remain the same 
Posted in java | No Comments »