Click here to Skip to main content
Click here to Skip to main content
Add your own
alternative version

A remote dynamic Command pattern with GWT and LinkSet

, 19 Jan 2011
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>
HierarchyAwareEventBus (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="HierarchyAwareEventBus (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/HierarchyAwareEventBus.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/HandlerMethod.html" title="annotation in org.linkset"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../org/linkset/ListenerManager.html" title="interface in org.linkset"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../index.html?org/linkset/HierarchyAwareEventBus.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="HierarchyAwareEventBus.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 HierarchyAwareEventBus</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../resources/inherit.gif" ALT="extended by "><B>org.linkset.HierarchyAwareEventBus</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>HierarchyAwareEventBus</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 simple single threaded implementation that is aware of an event type
 heirarchy.
<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/HierarchyAwareEventBus.html#HierarchyAwareEventBus()">HierarchyAwareEventBus</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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/HierarchyAwareEventBus.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/HierarchyAwareEventBus.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/HierarchyAwareEventBus.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/HierarchyAwareEventBus.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/HierarchyAwareEventBus.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/HierarchyAwareEventBus.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/HierarchyAwareEventBus.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="HierarchyAwareEventBus()"><!-- --></A><H3>
HierarchyAwareEventBus</H3>
<PRE>
public <B>HierarchyAwareEventBus</B>()</PRE>
<DL>
</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/HierarchyAwareEventBus.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/HandlerMethod.html" title="annotation in org.linkset"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../org/linkset/ListenerManager.html" title="interface in org.linkset"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../index.html?org/linkset/HierarchyAwareEventBus.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="HierarchyAwareEventBus.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)

About the Author

No Biography provided

| Advertise | Privacy | Mobile
Web03 | 2.8.140721.1 | Last Updated 19 Jan 2011
Article Copyright 2011 by Łukasz Bownik
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid