<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>erlendaakre.com &#187; Object</title>
	<atom:link href="http://www.erlendaakre.com/tag/object/feed" rel="self" type="application/rss+xml" />
	<link>http://www.erlendaakre.com</link>
	<description>Erlend Aakre's blog</description>
	<lastBuildDate>Wed, 18 Jan 2012 12:56:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Toodledo API (simple java version)</title>
		<link>http://www.erlendaakre.com/toodledo-api-simple-java-version.html</link>
		<comments>http://www.erlendaakre.com/toodledo-api-simple-java-version.html#comments</comments>
		<pubDate>Sun, 05 Jun 2011 13:15:09 +0000</pubDate>
		<dc:creator>Erlend Aakre</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[documentbuilderfactory]]></category>
		<category><![CDATA[dom document]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[implementation]]></category>
		<category><![CDATA[inputstreamreader]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java implementation]]></category>
		<category><![CDATA[java object]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[star trek]]></category>
		<category><![CDATA[star trek game]]></category>
		<category><![CDATA[Toodledo]]></category>
		<category><![CDATA[Toodledo api]]></category>
		<category><![CDATA[trekwar]]></category>
		<category><![CDATA[w3c dom]]></category>
		<category><![CDATA[wiki]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.erlendaakre.com/?p=1449</guid>
		<description><![CDATA[Wanted to get a list of all the bugs for my Star Trek game, that I have registered at Toodledo and have them listed on the Trekwar wiki. Toodledo offers a nicely done API, but there was no java implementation, there were a couple of unofficial ones, but I decided to write my own very [...]]]></description>
			<content:encoded><![CDATA[<p>Wanted to get a list of all the bugs for my <a title="Trekwar" href="http://www.trekwar.org/">Star Trek game</a>, that I have registered at <a title="Toodledo" href="http://www.toodledo.com">Toodledo </a>and have them listed on the Trekwar <a title="Trekwar bugs" href="http://www.trekwar.org/Wiki.jsp?page=Bugs">wiki</a>.</p>
<p>Toodledo offers a nicely done API, but there was no java implementation, there were a couple of unofficial ones, but I decided to write my own very simple basic program for connecting to Toodledo and getting all the tasks as XML, and parsing them into a simple Java object. So if you&#8217;re doing something similar, this program might be a nice place to start. To keep it as short as possible, comments and exception handling is pretty much not there <img src='http://www.erlendaakre.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>download the file: <a href="http://www.erlendaakre.com/wp-content/uploads/2011/06/Toodledoo2html.txt">Toodledo2html.java</a></p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">import</span> <span class="co2">java.io.BufferedReader</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.io.IOException</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.io.InputStreamReader</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.io.StringReader</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.net.MalformedURLException</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.net.URL</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.net.URLConnection</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.security.MessageDigest</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.security.NoSuchAlgorithmException</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.util.ArrayList</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.util.logging.Level</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.util.logging.Logger</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.xml.parsers.DocumentBuilder</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.xml.parsers.DocumentBuilderFactory</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.xml.parsers.ParserConfigurationException</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">org.w3c.dom.Document</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">org.w3c.dom.Element</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">org.w3c.dom.NodeList</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">org.xml.sax.InputSource</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">org.xml.sax.SAXException</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">class</span> Task <span class="br0">&#123;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> id<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> title<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> modified<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> completed<span class="sy0">;</span>
&nbsp;
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> folder<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> context<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> tag<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> status<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> priority<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> length<span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> note<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> Toodledoo2html <span class="br0">&#123;</span>
    <span class="co1">// TODO you must get the 4 values below from Toodledo</span>
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> appID <span class="sy0">=</span> <span class="st0">&quot;x&quot;</span><span class="sy0">;</span>
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> userID <span class="sy0">=</span> <span class="st0">&quot;x&quot;</span><span class="sy0">;</span>
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> userPW <span class="sy0">=</span> <span class="st0">&quot;x&quot;</span><span class="sy0">;</span>
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> applicationToken <span class="sy0">=</span> <span class="st0">&quot;x&quot;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> fields <span class="sy0">=</span> <span class="st0">&quot;folder,context,tag,status,priority,length,note&quot;</span><span class="sy0">;</span> <span class="co1">// get these fields when downloading tasks</span>
&nbsp;
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> sessionToken<span class="sy0">;</span>
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> key<span class="sy0">;</span>
&nbsp;
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> toodledoTokenURL <span class="sy0">=</span> <span class="st0">&quot;https://api.toodledo.com/2/account/token.php&quot;</span><span class="sy0">;</span>
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> toodledoGetTaskURL <span class="sy0">=</span> <span class="st0">&quot;https://api.toodledo.com/2/tasks/get.php&quot;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        sessionToken <span class="sy0">=</span> getSessionToken<span class="br0">&#40;</span>md5<span class="br0">&#40;</span>userID<span class="sy0">+</span>applicationToken<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        key <span class="sy0">=</span> md5<span class="br0">&#40;</span>md5<span class="br0">&#40;</span>userPW<span class="br0">&#41;</span><span class="sy0">+</span>applicationToken<span class="sy0">+</span>sessionToken<span class="br0">&#41;</span><span class="sy0">;</span>
        ArrayList<span class="sy0">&lt;</span>Task<span class="sy0">&gt;</span> tasks <span class="sy0">=</span> getTasks<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="co1">// do whatever to tasks</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">private</span> <span class="kw1">static</span> ArrayList<span class="sy0">&lt;</span>Task<span class="sy0">&gt;</span> getTasks<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">try</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> data <span class="sy0">=</span> <span class="st0">&quot;?key=&quot;</span> <span class="sy0">+</span> key <span class="sy0">+</span> <span class="st0">&quot;;fields=&quot;</span> <span class="sy0">+</span> fields <span class="sy0">+</span> <span class="st0">&quot;;f=xml&quot;</span><span class="sy0">;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Getting tasks: &quot;</span> <span class="sy0">+</span> toodledoGetTaskURL <span class="sy0">+</span> data<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aurl+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">URL</span></a> url <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aurl+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">URL</span></a><span class="br0">&#40;</span>toodledoGetTaskURL <span class="sy0">+</span> data<span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aurlconnection+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">URLConnection</span></a> connection <span class="sy0">=</span> url.<span class="me1">openConnection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            connection.<span class="me1">setDoOutput</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abufferedreader+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedReader</span></a> in <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abufferedreader+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedReader</span></a><span class="br0">&#40;</span><span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainputstreamreader+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">InputStreamReader</span></a><span class="br0">&#40;</span>connection.<span class="me1">getInputStream</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            StringBuilder xml <span class="sy0">=</span> <span class="kw1">new</span> StringBuilder<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> line <span class="sy0">=</span> in.<span class="me1">readLine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">while</span><span class="br0">&#40;</span> line <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>line<span class="br0">&#41;</span><span class="sy0">;</span>
                xml.<span class="me1">append</span><span class="br0">&#40;</span>line<span class="br0">&#41;</span><span class="sy0">;</span>
                line <span class="sy0">=</span> in.<span class="me1">readLine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
            in.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            ArrayList<span class="sy0">&lt;</span>Task<span class="sy0">&gt;</span> tasks <span class="sy0">=</span> xmlToTasks<span class="br0">&#40;</span>xml.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <span class="kw1">for</span><span class="br0">&#40;</span>Task t <span class="sy0">:</span> tasks<span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>t.<span class="me1">id</span> <span class="sy0">+</span> <span class="st0">&quot; &quot;</span> <span class="sy0">+</span> t.<span class="me1">title</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
            <span class="kw1">return</span> tasks<span class="sy0">;</span>
&nbsp;
        <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amalformedurlexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MalformedURLException</span></a> ex<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>ex<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> ioe<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>ioe<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">return</span> <span class="kw2">null</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">private</span> <span class="kw1">static</span> ArrayList<span class="sy0">&lt;</span>Task<span class="sy0">&gt;</span> xmlToTasks<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> xml<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        ArrayList<span class="sy0">&lt;</span>Task<span class="sy0">&gt;</span> taskList <span class="sy0">=</span> <span class="kw1">new</span> ArrayList<span class="sy0">&lt;</span>Task<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
        <span class="kw1">try</span> <span class="br0">&#123;</span>
            DocumentBuilderFactory dbf <span class="sy0">=</span> DocumentBuilderFactory.<span class="me1">newInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            DocumentBuilder db <span class="sy0">=</span> dbf.<span class="me1">newDocumentBuilder</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Adocument+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Document</span></a> doc <span class="sy0">=</span> db.<span class="me1">parse</span><span class="br0">&#40;</span><span class="kw1">new</span> InputSource<span class="br0">&#40;</span><span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astringreader+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">StringReader</span></a><span class="br0">&#40;</span>xml<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Element</span></a> root <span class="sy0">=</span> doc.<span class="me1">getDocumentElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            NodeList tasks <span class="sy0">=</span> root.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;task&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> tasks.<span class="me1">getLength</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Element</span></a> task <span class="sy0">=</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Element</span></a><span class="br0">&#41;</span> tasks.<span class="me1">item</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
                Task t <span class="sy0">=</span> <span class="kw1">new</span> Task<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">id</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;id&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">title</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;title&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">modified</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;modified&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">completed</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;completed&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
                t.<span class="me1">folder</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;folder&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">context</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;context&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">tag</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;tag&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">status</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;status&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">priority</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;priority&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">length</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;length&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                t.<span class="me1">note</span> <span class="sy0">=</span> getDomTextValue<span class="br0">&#40;</span>task, <span class="st0">&quot;note&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                taskList.<span class="me1">add</span><span class="br0">&#40;</span>t<span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
&nbsp;
        <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>ParserConfigurationException ex<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            Logger.<span class="me1">getLogger</span><span class="br0">&#40;</span>Toodledoo2html.<span class="kw1">class</span>.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">log</span><span class="br0">&#40;</span>Level.<span class="me1">SEVERE</span>, <span class="kw2">null</span>, ex<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">catch</span><span class="br0">&#40;</span>SAXException se<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="br0">&#125;</span>
        <span class="kw1">catch</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> ioe<span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
        <span class="br0">&#125;</span>
&nbsp;
        <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;xmlToTasks got &quot;</span> <span class="sy0">+</span> taskList.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot; tasks&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">return</span> taskList<span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> getSessionToken<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> signature<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">try</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> data <span class="sy0">=</span> <span class="st0">&quot;?userid=&quot;</span> <span class="sy0">+</span> userID <span class="sy0">+</span> <span class="st0">&quot;;appid=&quot;</span> <span class="sy0">+</span> appID <span class="sy0">+</span> <span class="st0">&quot;;sig=&quot;</span> <span class="sy0">+</span> signature <span class="sy0">+</span> <span class="st0">&quot;;f=xml&quot;</span><span class="sy0">;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Getting session token: &quot;</span> <span class="sy0">+</span> toodledoTokenURL<span class="sy0">+</span>data<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aurl+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">URL</span></a> url <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aurl+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">URL</span></a><span class="br0">&#40;</span>toodledoTokenURL <span class="sy0">+</span> data<span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aurlconnection+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">URLConnection</span></a> connection <span class="sy0">=</span> url.<span class="me1">openConnection</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            connection.<span class="me1">setDoOutput</span><span class="br0">&#40;</span><span class="kw2">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abufferedreader+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedReader</span></a> in <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abufferedreader+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BufferedReader</span></a><span class="br0">&#40;</span><span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainputstreamreader+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">InputStreamReader</span></a><span class="br0">&#40;</span>connection.<span class="me1">getInputStream</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> xml <span class="sy0">=</span> in.<span class="me1">readLine</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            in.<span class="me1">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> token <span class="sy0">=</span> xml.<span class="me1">substring</span><span class="br0">&#40;</span>xml.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;token&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">+</span><span class="nu0">7</span>, xml.<span class="me1">indexOf</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;/token&gt;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">return</span> token<span class="sy0">;</span>
        <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amalformedurlexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MalformedURLException</span></a> ex<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>ex<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">catch</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> ioe<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>ioe<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">return</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">private</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> md5<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> input<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">try</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a> md <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a>.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&quot;MD5&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            md.<span class="me1">update</span><span class="br0">&#40;</span>input.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <span class="kw4">byte</span> byteData<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> md.<span class="me1">digest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            StringBuilder sb <span class="sy0">=</span> <span class="kw1">new</span> StringBuilder<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> byteData.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                sb.<span class="me1">append</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#40;</span>byteData<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">&amp;</span> 0xff<span class="br0">&#41;</span> <span class="sy0">+</span> 0x100, 16<span class="br0">&#41;</span>.<span class="me1">substring</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
            <span class="kw1">return</span> sb.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Anosuchalgorithmexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">NoSuchAlgorithmException</span></a> nse<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">err</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;ERROR. MD5 ALGORITHM NOT FOUND&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">return</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">public</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> getDomTextValue<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Element</span></a> element, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> tag<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span> <span class="br0">&#40;</span>element <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            NodeList nl <span class="sy0">=</span> element.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span>tag<span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw1">if</span> <span class="br0">&#40;</span>nl <span class="sy0">!=</span> <span class="kw2">null</span> <span class="sy0">&amp;&amp;</span> nl.<span class="me1">getLength</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Element</span></a> el <span class="sy0">=</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aelement+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Element</span></a><span class="br0">&#41;</span> nl.<span class="me1">item</span><span class="br0">&#40;</span>0<span class="br0">&#41;</span><span class="sy0">;</span>
                <span class="kw1">if</span><span class="br0">&#40;</span>el <span class="sy0">!=</span> <span class="kw2">null</span> <span class="sy0">&amp;&amp;</span> el.<span class="me1">getFirstChild</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                    <span class="kw1">return</span> el.<span class="me1">getFirstChild</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getNodeValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
                <span class="br0">&#125;</span>
            <span class="br0">&#125;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">return</span> <span class="st0">&quot;&quot;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p><strong>Note:</strong> This program was made to run once per hour.. running this program many times in a row will cause Toodledo to ban you for about 1 hour. When that happens there will be a IndexOutOfBoundsException -7 from the method that gets the session token. This can be fixed by saving the token you get between requests, and not asking for a new one each time (which is what causes the short ban).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.erlendaakre.com/toodledo-api-simple-java-version.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oups</title>
		<link>http://www.erlendaakre.com/oups.html</link>
		<comments>http://www.erlendaakre.com/oups.html#comments</comments>
		<pubDate>Sun, 14 Mar 2010 23:25:10 +0000</pubDate>
		<dc:creator>Erlend Aakre</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[boolean]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Collections]]></category>
		<category><![CDATA[core classes]]></category>
		<category><![CDATA[documention]]></category>
		<category><![CDATA[equals]]></category>
		<category><![CDATA[equals method]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[faction]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[getName]]></category>
		<category><![CDATA[instanceof]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java collections]]></category>
		<category><![CDATA[java generics]]></category>
		<category><![CDATA[method]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[star systems]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[Trek]]></category>
		<category><![CDATA[trekwar]]></category>

		<guid isPermaLink="false">http://www.erlendaakre.com/?p=926</guid>
		<description><![CDATA[While cleaning up in the core classes of Trekwar yesterday (documenting functions, formatting/structuring code, minor improvements) I also saw lots of equals(Object o) methods. And in my infinite wisdom I decided to use generics since it is used pretty extensively throughout the code anyway, so I changed basically all the equals methods. example: was changed [...]]]></description>
			<content:encoded><![CDATA[<p>While cleaning up in the core classes of Trekwar yesterday (documenting functions, formatting/structuring code, minor improvements) I also saw lots of equals(Object o) methods. And in my infinite wisdom I decided to use generics since it is used pretty extensively throughout the code anyway, so I changed basically all the equals methods.</p>
<p>example:</p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw4">boolean</span> equals<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> o<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span><span class="br0">&#40;</span>o <span class="kw1">instanceof</span> Structure<span class="br0">&#41;</span>
            <span class="kw1">return</span> equals<span class="br0">&#40;</span><span class="br0">&#40;</span>Structure<span class="br0">&#41;</span>o<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span>
    <span class="br0">&#125;</span></pre></div></div>
<p>was changed to:</p>
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw4">boolean</span> equals<span class="br0">&#40;</span>Structure s2<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">return</span> name.<span class="me1">equals</span><span class="br0">&#40;</span>s2.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span></pre></div></div>
<p>Now this is not a problem when writing code, as you pretty much always compare objects of the same type. However, the code also uses the Java Collections contains() method a few places, and it always uses the equals(Object) version. So when my classes no longer provided this method, the default one inherited from java.lang.Object was used instead. This caused a strange array of bugs to appear (star systems on the map not shown with faction color/icon except for the Cardassians for some strange reason, users not having any technologies, unable to build any structures, generally erratic behavior, etc..). Luckily I discovered the cause pretty quickly and only wasted about an hour or so on this <img src='http://www.erlendaakre.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I guess the lesson is that objects that needs to be compared, directly or indirectly by contains() or other methods, should always define an equals(Object) method that just passes the call along to the equals method written with generics.</p>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Code block</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.erlendaakre.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw4">boolean</span> equals<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> o<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">if</span><span class="br0">&#40;</span>o <span class="kw1">instanceof</span> Structure<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw1">return</span> equals<span class="br0">&#40;</span><span class="br0">&#40;</span>Structure<span class="br0">&#41;</span>o<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span>
    <span class="br0">&#125;</span></pre></div></div>
<p>And perhaps that you should not mess around with your code for hours on end without stopping to test if you broke it once in a while <img src='http://www.erlendaakre.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.erlendaakre.com/oups.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

