Click here to Skip to main content
15,886,362 members
Articles / Web Development / HTML

A remote dynamic Command pattern with GWT and LinkSet

Rate me:
Please Sign up or sign in to vote.
4.00/5 (1 vote)
19 Jan 2011LGPL32 min read 16.5K   214   3  
Command pattern is a very useful solution, but it causes some problems when used in a distributed environment.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_17) on Tue Jan 18 09:46:50 CET 2011 -->
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<TITLE>
MultiThreadedEventBus (LinkSet Library 1.2-beta API)
</TITLE>

<META NAME="date" CONTENT="2011-01-18">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="MultiThreadedEventBus (LinkSet Library 1.2-beta API)";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../org/linkset/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MultiThreadedEventBus.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../org/linkset/MethodPointer.html" title="class in org.linkset"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../org/linkset/Null.html" title="class in org.linkset"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../index.html?org/linkset/MultiThreadedEventBus.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="MultiThreadedEventBus.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
org.linkset</FONT>
<BR>
Class MultiThreadedEventBus</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../resources/inherit.gif" ALT="extended by "><B>org.linkset.MultiThreadedEventBus</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD><A HREF="../../org/linkset/EventBus.html" title="interface in org.linkset">EventBus</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public final class <B>MultiThreadedEventBus</B><DT>extends java.lang.Object<DT>implements <A HREF="../../org/linkset/EventBus.html" title="interface in org.linkset">EventBus</A></DL>
</PRE>

<P>
A multithreaded event bus with exact matching
<P>

<P>
<DL>
<DT><B>Author:</B></DT>
  <DD>Lukasz Bownik (lukasz.bownik@gmail.com)</DD>
</DL>
<HR>

<P>

<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#MultiThreadedEventBus()">MultiThreadedEventBus</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Constructor</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#add(java.lang.Class, java.lang.Object, java.lang.String)">add</A></B>(java.lang.Class&lt;?&gt;&nbsp;eventType,
    java.lang.Object&nbsp;target,
    java.lang.String&nbsp;methodId)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Adds a listener to this set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#clear()">clear</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Clears the set</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#fire(java.lang.Object)">fire</A></B>(java.lang.Object&nbsp;event)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Fires an event</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#isEmpty()">isEmpty</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#remove(java.lang.Class, java.lang.Object, java.lang.String)">remove</A></B>(java.lang.Class&lt;?&gt;&nbsp;eventType,
       java.lang.Object&nbsp;target,
       java.lang.String&nbsp;methodId)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes a listener form this set.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#removeAll(java.lang.Object)">removeAll</A></B>(java.lang.Object&nbsp;target)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Removes all Listerners targeting a specified object.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../org/linkset/MultiThreadedEventBus.html#size()">size</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="MultiThreadedEventBus()"><!-- --></A><H3>
MultiThreadedEventBus</H3>
<PRE>
public <B>MultiThreadedEventBus</B>()</PRE>
<DL>
<DD>Constructor
<P>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="add(java.lang.Class, java.lang.Object, java.lang.String)"><!-- --></A><H3>
add</H3>
<PRE>
public void <B>add</B>(java.lang.Class&lt;?&gt;&nbsp;eventType,
                java.lang.Object&nbsp;target,
                java.lang.String&nbsp;methodId)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../org/linkset/EventBus.html#add(java.lang.Class, java.lang.Object, java.lang.String)">EventBus</A></CODE></B></DD>
<DD>Adds a listener to this set.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../org/linkset/EventBus.html#add(java.lang.Class, java.lang.Object, java.lang.String)">add</A></CODE> in interface <CODE><A HREF="../../org/linkset/EventBus.html" title="interface in org.linkset">EventBus</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>eventType</CODE> - type of events to receive<DD><CODE>target</CODE> - a target object or class<DD><CODE>methodId</CODE> - a method annotation identifier<DT><B>See Also:</B><DD><CODE>EventBus#addHandler(Class, Object, String)</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="remove(java.lang.Class, java.lang.Object, java.lang.String)"><!-- --></A><H3>
remove</H3>
<PRE>
public void <B>remove</B>(java.lang.Class&lt;?&gt;&nbsp;eventType,
                   java.lang.Object&nbsp;target,
                   java.lang.String&nbsp;methodId)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../org/linkset/EventBus.html#remove(java.lang.Class, java.lang.Object, java.lang.String)">EventBus</A></CODE></B></DD>
<DD>Removes a listener form this set. If a set does not contain a apecified
 listener, then this method does nothing.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../org/linkset/EventBus.html#remove(java.lang.Class, java.lang.Object, java.lang.String)">remove</A></CODE> in interface <CODE><A HREF="../../org/linkset/EventBus.html" title="interface in org.linkset">EventBus</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>eventType</CODE> - type of events to receive<DD><CODE>target</CODE> - a target object or class<DD><CODE>methodId</CODE> - a method annotation identifier<DT><B>See Also:</B><DD><CODE>EventBus#removeHandler(Class, Object, String)</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="removeAll(java.lang.Object)"><!-- --></A><H3>
removeAll</H3>
<PRE>
public void <B>removeAll</B>(java.lang.Object&nbsp;target)</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../org/linkset/EventBus.html#removeAll(java.lang.Object)">EventBus</A></CODE></B></DD>
<DD>Removes all Listerners targeting a specified object.
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../org/linkset/EventBus.html#removeAll(java.lang.Object)">removeAll</A></CODE> in interface <CODE><A HREF="../../org/linkset/EventBus.html" title="interface in org.linkset">EventBus</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>target</CODE> - a target object or null if a listener is a static method<DT><B>See Also:</B><DD><CODE>EventBus#removeAllHandlers(Object)</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="fire(java.lang.Object)"><!-- --></A><H3>
fire</H3>
<PRE>
public void <B>fire</B>(java.lang.Object&nbsp;event)
          throws java.lang.reflect.InvocationTargetException,
                 java.lang.ExceptionInInitializerError</PRE>
<DL>
<DD><B>Description copied from interface: <CODE><A HREF="../../org/linkset/EventBus.html#fire(java.lang.Object)">EventBus</A></CODE></B></DD>
<DD>Fires an event
<P>
<DD><DL>
<DT><B>Specified by:</B><DD><CODE><A HREF="../../org/linkset/EventBus.html#fire(java.lang.Object)">fire</A></CODE> in interface <CODE><A HREF="../../org/linkset/EventBus.html" title="interface in org.linkset">EventBus</A></CODE></DL>
</DD>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>event</CODE> - event object
<DT><B>Throws:</B>
<DD><CODE>java.lang.reflect.InvocationTargetException</CODE> - if any underlying method throws an exception.
<DD><CODE>java.lang.ExceptionInInitializerError</CODE> - if the initialization provoked by any method fails.<DT><B>See Also:</B><DD><A HREF="../../org/linkset/EventBus.html#fire(java.lang.Object)"><CODE>EventBus.fire(Object)</CODE></A></DL>
</DD>
</DL>
<HR>

<A NAME="isEmpty()"><!-- --></A><H3>
isEmpty</H3>
<PRE>
public boolean <B>isEmpty</B>()</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>true if a set is empty</DL>
</DD>
</DL>
<HR>

<A NAME="size()"><!-- --></A><H3>
size</H3>
<PRE>
public int <B>size</B>()</PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>

<DT><B>Returns:</B><DD>the amount of listeners in this set</DL>
</DD>
</DL>
<HR>

<A NAME="clear()"><!-- --></A><H3>
clear</H3>
<PRE>
public void <B>clear</B>()</PRE>
<DL>
<DD>Clears the set
<P>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../org/linkset/package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/MultiThreadedEventBus.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../org/linkset/MethodPointer.html" title="class in org.linkset"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../org/linkset/Null.html" title="class in org.linkset"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../index.html?org/linkset/MultiThreadedEventBus.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="MultiThreadedEventBus.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>
Copyright &#169; 2011. All Rights Reserved.
</BODY>
</HTML>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The GNU Lesser General Public License (LGPLv3)


Written By
Architect
Poland Poland
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions