<?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-7236509178758526641</id><updated>2011-04-21T12:09:15.838-07:00</updated><title type='text'>Mark Ashworth</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://markashworth.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://markashworth.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mark Ashworth</name><uri>http://www.blogger.com/profile/02379687736490128922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></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-7236509178758526641.post-2571790956137648223</id><published>2008-05-15T19:15:00.000-07:00</published><updated>2008-05-15T20:09:29.349-07:00</updated><title type='text'>Interesting Websites</title><content type='html'>This post is here to help me remember some of the good content out there in the sea of mindless waffle and copy-and-paste blogging.&lt;br /&gt;&lt;br /&gt;Presentation Zen &lt;br /&gt;http://www.presentationzen.com/&lt;br /&gt;&lt;br /&gt;Adventures of Johnny Bunko&lt;br /&gt;http://www.johnnybunko.com/&lt;br /&gt;&lt;br /&gt;Daniel Pink&lt;br /&gt;http://www.danpink.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7236509178758526641-2571790956137648223?l=markashworth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markashworth.blogspot.com/feeds/2571790956137648223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7236509178758526641&amp;postID=2571790956137648223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/2571790956137648223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/2571790956137648223'/><link rel='alternate' type='text/html' href='http://markashworth.blogspot.com/2008/05/interesting-websites.html' title='Interesting Websites'/><author><name>Mark Ashworth</name><uri>http://www.blogger.com/profile/02379687736490128922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7236509178758526641.post-3606041752799349011</id><published>2008-02-23T00:16:00.000-08:00</published><updated>2008-02-23T00:16:58.008-08:00</updated><title type='text'></title><content type='html'>&lt;P&gt;The folks at &lt;A id=dn:2 title=Metawidget href="http://www.metawidget.org"&gt;Metawidget&lt;/A&gt; have added support to render the sections as tabbed panels. I have integrated this into the application the results speak for themselves.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=y9pv style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_19d4frkqg3"&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7236509178758526641-3606041752799349011?l=markashworth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markashworth.blogspot.com/feeds/3606041752799349011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7236509178758526641&amp;postID=3606041752799349011' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/3606041752799349011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/3606041752799349011'/><link rel='alternate' type='text/html' href='http://markashworth.blogspot.com/2008/02/folks-at-metawidget-have-added-support.html' title=''/><author><name>Mark Ashworth</name><uri>http://www.blogger.com/profile/02379687736490128922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7236509178758526641.post-8996799519515421345</id><published>2008-02-18T20:00:00.000-08:00</published><updated>2008-02-23T00:16:58.067-08:00</updated><title type='text'></title><content type='html'>&lt;H1&gt;Metawidget update&lt;/H1&gt; &lt;P&gt;Fixed so that the JTabbedPane with the lists of the domain objects is aligned correctly by modifying the TableGroupLayout.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Using the classes in NetBeans 6.0 RCP application but I needed to changed the classes that load the Metawidget XML configuration to not validate the schema or I get a error.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;FONT color=#6633ff&gt;SEVERE [org.metawidget.inspector.ConfigReader]: Unable to parse config &lt;BR&gt;java.lang.UnsupportedOperationException: This parser does not support specification "null" version "null" &lt;BR&gt;at javax.xml.parsers.DocumentBuilderFactory.setSchema(DocumentBuilderFactory.java:561) &lt;BR&gt;at org.metawidget.inspector.impl.AbstractXmlInspector.&amp;lt;init&amp;gt;(AbstractXmlInspector.java:149) &lt;BR&gt;Caused: org.metawidget.inspector.InspectorException &lt;/FONT&gt;&lt;BR&gt; &lt;/P&gt; &lt;DIV id=frp8 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_16grhk7dfd"&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7236509178758526641-8996799519515421345?l=markashworth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markashworth.blogspot.com/feeds/8996799519515421345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7236509178758526641&amp;postID=8996799519515421345' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/8996799519515421345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/8996799519515421345'/><link rel='alternate' type='text/html' href='http://markashworth.blogspot.com/2008/02/metawidget-update-fixed-so-that.html' title=''/><author><name>Mark Ashworth</name><uri>http://www.blogger.com/profile/02379687736490128922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7236509178758526641.post-956248363051601468</id><published>2008-02-15T16:38:00.000-08:00</published><updated>2008-02-23T00:16:58.100-08:00</updated><title type='text'></title><content type='html'>&lt;H1&gt;Metawidget Introduction &lt;/H1&gt; &lt;P&gt;&lt;b&gt;Background&lt;/b&gt; &lt;/P&gt; &lt;P&gt;Developing forms to update, delete and create domain objects in a business application usually all follow the same style, layout and functionality. So would it not be great if these forms could be created at runtime instead of hand-coded. Introducing &lt;A id=kqqq title=MetaWidget href="http://www.metawidget.org/" target=_blank&gt;MetaWidget&lt;/A&gt; ... &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;How&lt;/b&gt; &lt;/P&gt; &lt;P&gt;Metawidget uses inspectors (annotations, XML and JavaBeans) to define the back-end architecture of the application and using this information constructs the front-end at runtime for numerous technologies (Swing, Andriod, Struts, JSF). &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;The strength of Metawidget is that is allows the developer flexibility to change how the front-end is rendered because Metawidget does not exclusively own the front-end like many other frameworks. To demonstrate this I have changed how my domain objects are presented by configuring and overriding how Metawidget renders them. I also created a single panel and dialog that could display any of my domain objects by inspecting them at runtime and applying a certain layout or style to the panel. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;Model&lt;/b&gt; &lt;/P&gt; &lt;P&gt;The model for the domain is a simple Organization, Company, Departments object model. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=cx6i style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_97r35dqdn"&gt; &lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;Showing the dialog&lt;/b&gt; &lt;/P&gt; &lt;P&gt;The following code constructs a new organization object and adds a company. The dialog and panel that use Metawidget are constructed and instructed to inspect the object and render the user interface. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=n9bp style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_11gg8shrfk"&gt; &lt;/DIV&gt; &lt;P&gt;The organization has a list of companies and when a company is double-clicked then a dialog showing the company is opened. This is all handled by the AbstractDomainObjectPanel class. The JTabbedPanel is an addition that I created for the demo, whereas the original rendering of Metawidget for the Organization class would have been to have each table below each other. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;Screen shots&lt;/b&gt; &lt;/P&gt; &lt;P&gt;No demo would be complete without some screen shots, so here are mine. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=k119 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_12g9n5zhdk"&gt; &lt;/DIV&gt; &lt;DIV id=lo7a style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_13gqvsm7hp"&gt; &lt;/DIV&gt; &lt;DIV id=kl89 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_14fbb5sxvv"&gt; &lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;b&gt;Areas that still need work&lt;/b&gt; &lt;/P&gt; &lt;P&gt;The columns shown by the tables are still under construction and of course the editors used by the tables. &lt;/P&gt; &lt;P&gt;The icons for the JDialog still needs to be ironed out. &lt;/P&gt; &lt;P&gt;The table does not take up the correct width but for this I would need to write a new layout for Metawidget. &lt;/P&gt; &lt;P&gt;The close action on the main (or first dialog) does not close the application, it just sets it invisible. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7236509178758526641-956248363051601468?l=markashworth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markashworth.blogspot.com/feeds/956248363051601468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7236509178758526641&amp;postID=956248363051601468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/956248363051601468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/956248363051601468'/><link rel='alternate' type='text/html' href='http://markashworth.blogspot.com/2008/02/metawidget-introduction-background.html' title=''/><author><name>Mark Ashworth</name><uri>http://www.blogger.com/profile/02379687736490128922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7236509178758526641.post-8201171492176198261</id><published>2008-02-15T03:22:00.000-08:00</published><updated>2008-02-15T16:45:52.478-08:00</updated><title type='text'></title><content type='html'>&lt;H1&gt;Connext Graphs Overview&lt;/H1&gt; &lt;P&gt;&lt;B&gt;Introduction&lt;/B&gt;&lt;/P&gt; &lt;P&gt;The basic idea behind connext-graphs is to make integrating the Open Flash Chart (&lt;A href="http://teethgrinder.co.uk/open-flash-chart/"&gt;http://teethgrinder.co.uk/open-flash-chart/&lt;/A&gt;) as easy as possible.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;History&lt;/B&gt;&lt;/P&gt; &lt;P&gt;The project was started because I wanted to use a chart library that looked similar to the Google charts in their Analyzer application. Struts 2.0 has a plug-in for the JFreeChart library but I wanted a chart that a user could interact with. When the user hovers over a chart point the properties of that point is shown and in this way the chart does not feel like an empty piece of information plonked on the site to take up space.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Features&lt;/B&gt;&lt;/P&gt; &lt;OL&gt; &lt;LI&gt; &lt;DIV&gt;Written as a Struts 2.0 plug-in so the initialization of the Flash object is taken care of&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;The chart data generation uses Java objects to model the different aspects of the chart&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;The styling is configurable by the data sent to the chart&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;Some aspects of the chart is stylable via CSS&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;To Be Done&lt;/B&gt;&lt;/P&gt; &lt;OL&gt; &lt;LI&gt; &lt;DIV&gt;Implement the Pie Charts&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;Remove the link to the Open Flash Chart site because the chart does this&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;Small fixes and improvements&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Alternatives&lt;/B&gt;&lt;/P&gt; &lt;OL&gt; &lt;LI&gt; &lt;DIV&gt;JFreeChart (&lt;A href="http://www.jfree.org/jfreechart/"&gt;http://www.jfree.org/jfreechart/&lt;/A&gt;)&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;CeWolf (&lt;A href="http://cewolf.sourceforge.net/new/index.html"&gt;http://cewolf.sourceforge.net/new/index.html&lt;/A&gt;)&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;Fusion Charts (&lt;A href="http://www.fusioncharts.com/"&gt;http://www.fusioncharts.com/&lt;/A&gt;)&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;Open Flash Chart (&lt;A href="http://teethgrinder.co.uk/open-flash-chart/"&gt;http://teethgrinder.co.uk/open-flash-chart/&lt;/A&gt;)&lt;/DIV&gt;&lt;/LI&gt;&lt;/OL&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Open Flash Chart is shown as an alternative because it includes a Java class to output the data file used by the chart library. This Java class was not used when developing connext-graphs.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Sketch Chart&lt;/B&gt;&lt;/P&gt; &lt;P&gt;The sketch chart is based upon the bar chart but has an extra `fun&lt;B&gt;`&lt;/B&gt; option that indicates how interesting the chart should be rendered.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;How to use&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;1. Create a chart controller that specifies the properties of the charting area&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;OFCGraphController controller = new OFCGraphController();&lt;BR&gt;controller.getTitle().setText("Example Sketch Bar Chart");&lt;BR&gt;controller.getTitle().setSize(12);&lt;BR&gt;controller.getLabels().setLabels(Arrays.asList(labels));&lt;BR&gt;controller.getYLegend().setText("No. of tasks");&lt;BR&gt;controller.getYLegend().setColor("#8b0000");&lt;BR&gt;controller.getYLegend().setSize(12);&lt;BR&gt;controller.getXLegend().setText("Months");&lt;BR&gt;controller.getXLegend().setColor("#8b0000");&lt;BR&gt;controller.getXLegend().setSize(12);&lt;BR&gt;controller.getColor().getBgColor().setColor("#FFFFFF");&lt;BR&gt;controller.getColor().getXAxisColor().setColor("#e3e3e3");&lt;BR&gt;controller.getColor().getYAxisColor().setColor("#e3e3e3");&lt;BR&gt;controller.getColor().getXGridColor().setColor("#e3e3e3");&lt;BR&gt;controller.getColor().getYGridColor().setColor("#e3e3e3");&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;2. Create the chart data series&lt;/B&gt;&lt;/P&gt; &lt;P&gt;&lt;I&gt;It is possible to mix and match the different series types so you could a line chart and a sketch chart combined.&lt;/I&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;DefaultOFCGraphDataModel model = new DefaultOFCGraphDataModel();&lt;BR&gt;model.setData(Arrays.asList(data01));&lt;BR&gt;model.setFormat(new DecimalFormat("###0.000"));&lt;BR&gt;model.setSeriesType(new OFCBarSketchSeriesType(55, 10, "#d070ac", "#000000", "Test", 10));&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;The &lt;I&gt;offset&lt;/I&gt; parameter of OFCBarSketchSeriesType(alpha, offset, color, outlineColor, text, size) specifies the fun aspect of the chart. &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;The following values can be used:-&lt;/P&gt; &lt;UL&gt; &lt;LI&gt; &lt;DIV&gt;0 - 3 Boring&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;4 - 6 Fun&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;7 -    Interesting&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;3. Add the series to the charting area&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;controller.add(model); &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;4. Render the chart data&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;value = controller.render();&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Here the data string used by Open Flash Chart is assigned to the value property and this property is read by the graph.jsp view.&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&amp;lt;%@ include file="include.jsp" %&amp;gt;&lt;BR&gt;&amp;lt;s:property value="value" escape="false" /&amp;gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;5. Include the Flash component&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;Of course none of this would work if the Open Flash Chart object was not embedded into the Struts view. &lt;/P&gt; &lt;P&gt;The following :-&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;UL&gt; &lt;LI&gt; &lt;DIV&gt;declares the tag library of connext-graphs&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;creates the Flash object&lt;/DIV&gt; &lt;LI&gt; &lt;DIV&gt;links the data from the data view defined in steps 1 - 4&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&amp;lt;%@ &lt;FONT color=#000099&gt;&lt;B&gt;taglib&lt;/B&gt; &lt;/FONT&gt;&lt;FONT color=#009900&gt;prefix&lt;/FONT&gt;="&lt;FONT color=#996633&gt;m&lt;/FONT&gt;" uri="&lt;FONT color=#996633&gt;/connext&lt;/FONT&gt;" %&amp;gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&amp;lt;&lt;B&gt;&lt;FONT color=#000099&gt;m:graph&lt;/FONT&gt;&lt;/B&gt; &lt;BR&gt;    &lt;FONT color=#009900&gt;id&lt;/FONT&gt;="&lt;FONT color=#996633&gt;graph&lt;/FONT&gt;" &lt;BR&gt;    &lt;FONT color=#006600&gt;width&lt;/FONT&gt;="&lt;FONT color=#996633&gt;400&lt;/FONT&gt;" &lt;BR&gt;    &lt;FONT color=#006600&gt;height&lt;/FONT&gt;="&lt;FONT color=#996633&gt;400&lt;/FONT&gt;" &lt;BR&gt;    &lt;FONT color=#006600&gt;align&lt;/FONT&gt;="&lt;FONT color=#996633&gt;middle&lt;/FONT&gt;" &lt;BR&gt;    &lt;FONT color=#006600&gt;bgcolor&lt;/FONT&gt;="&lt;FONT color=#996633&gt;#FFFFFF&lt;/FONT&gt;"&lt;BR&gt;    &lt;FONT color=#006600&gt;url&lt;/FONT&gt;="&lt;FONT color=#996633&gt;/Graph_exampleSketch.html&lt;/FONT&gt;"&lt;BR&gt;    /&amp;gt;&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;P&gt;&lt;B&gt;Screen shots&lt;/B&gt;&lt;/P&gt; &lt;P&gt; &lt;IMG src="http://docs.google.com/File?id=dc46cwjz_1cnzc2vgv"&gt;&lt;/P&gt; &lt;P&gt;Figure 1 : Hovering over a chart point&lt;/P&gt; &lt;P&gt; &lt;/P&gt; &lt;DIV id=x:iu style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_2gc6cgsg7"&gt;&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;Figure 2 : Sketch chart with an offset of 10&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=z_a3 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_3d25htjcn"&gt;&lt;/DIV&gt;Figure 3 : Sketch chart with an offset of 2&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=ga__ style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_4fnz6fm6b"&gt;&lt;/DIV&gt;Figure 4 : Sketch chart with an offset of 5&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;DIV id=v-qg style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt;&lt;IMG src="http://docs.google.com/File?id=dc46cwjz_5fpm2w4h4"&gt;&lt;/DIV&gt;Figure 5 : Sketch chart with an offset of 15&lt;/DIV&gt; &lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left"&gt; &lt;/DIV&gt; &lt;P&gt; &lt;/P&gt; &lt;P style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left" align=justify&gt; &lt;/P&gt; &lt;H1 style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 1em; PADDING-TOP: 1em; TEXT-ALIGN: left" align=justify&gt; &lt;/H1&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7236509178758526641-8201171492176198261?l=markashworth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://markashworth.blogspot.com/feeds/8201171492176198261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7236509178758526641&amp;postID=8201171492176198261' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/8201171492176198261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7236509178758526641/posts/default/8201171492176198261'/><link rel='alternate' type='text/html' href='http://markashworth.blogspot.com/2008/02/introduction-basic-idea-behind-connext.html' title=''/><author><name>Mark Ashworth</name><uri>http://www.blogger.com/profile/02379687736490128922</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
