<?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"
	>

<channel>
	<title>blog.log2e.com</title>
	<atom:link href="http://blog.log2e.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.log2e.com</link>
	<description>Tutorials and Code Snippets</description>
	<pubDate>Thu, 27 Nov 2008 08:10:20 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>What&#8217;s in the Zend Framework for the Flash/Flex Developer?</title>
		<link>http://blog.log2e.com/2008/11/26/whats-in-the-zend-framework-for-the-flashflex-developer/</link>
		<comments>http://blog.log2e.com/2008/11/26/whats-in-the-zend-framework-for-the-flashflex-developer/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 17:01:39 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[AMFPHP]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[Zend Amf]]></category>

		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=109</guid>
		<description><![CDATA[The 1.7 release of the Zend Framework includes the new Zend_Amf package which provides a gateway server implementation for AMF remoting.  By the time of writing this article, there are not many resources available yet (a good starting point is here), and the few tutorials mostly guide you through the process of setting up the [...]]]></description>
			<content:encoded><![CDATA[<p>The 1.7 release of the <a title="Zend Framework" href="http://framework.zend.com" target="_blank" onclick="pageTracker._trackPageview('/outgoing/framework.zend.com?referer=');">Zend Framework</a> includes the new <a title="Zend_Amf" href="http://framework.zend.com/manual/en/zend.amf.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/framework.zend.com/manual/en/zend.amf.html?referer=');">Zend_Amf</a> package which provides a gateway server implementation for AMF remoting.  By the time of writing this article, there are not many resources available yet (a good starting point is <a title="Zend_Amf Resources" href="http://diamondtearz.org/blog/zend_amf-collection/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/diamondtearz.org/blog/zend_amf-collection/?referer=');">here</a>), and the few tutorials mostly guide you through the process of setting up the bootstrap file and establishing a MySQL database connection by using <code>mysql_connect()</code> directly in the service classes.</p>
<p><span id="more-109"></span></p>
<p>I would like to introduce a Zend AMF server setup that makes use of some of Zend&#8217;s best practices like configuration files, database adapters and models. If you are a Flash/Flex developer coming from an <a title="AMFPHP" href="http://www.amfphp.org" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.amfphp.org?referer=');">AMFPHP</a> background and have never worked with the Zend framework before, you may easily feel overwhelmed by the framework&#8217;s complexity. This article is not meant to present a thourough overview of all Zend features you could possibly utilize in your Flex/Flash development work, but it might motivate you to dive deeper into the framework&#8217;s features.</p>
<h3>The Folder Structure</h3>
<p>First of all, even if I only need the AMF server from the Zend framework I set up my server directories like I would do with any other Zend/PHP application. If you already have some experience with the Zend framework this folder structure probably looks familiar to you:</p>
<p><a href="http://blog.log2e.com/wp-content/uploads/2008/11/zend_amf_setup.gif"><img class="alignnone size-medium wp-image-120" title="Zend Framework Folder Structure" src="http://blog.log2e.com/wp-content/uploads/2008/11/zend_amf_setup.gif" alt="" width="192" height="266" /></a></p>
<p>This is a rudimentary folder structure, of course, because a typical Zend application with an HTML frontend has additional folders for controllers, views, layouts, forms, plugins, helpers, etc. But the basic setup is the same: We have an <em>application</em> and a <em>library</em> folder that are outside the web server&#8217;s root directory (<em>public</em>). The Zend framework packages are inside the <em>library</em> folder, and below the <em>application</em> folder there are a <em>config</em> and a <em>models</em> folder. For the special purpose of the AMF gateway, I added a <em>services</em> folder which is supposed to contain all service class files.</p>
<h3>The Database and the Configuration File</h3>
<p>Let&#8217;s assume we are working on an application that needs to manage user accounts. A very basic table would look like this:</p>
<div class="geshi no sql">
<div class="head">CREATE TABLE users (</div>
<ol>
<li class="li1">
<div class="de1">&nbsp; id int<span class="br0">&#40;</span><span class="nu0">11</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; username varchar<span class="br0">&#40;</span><span class="nu0">32</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#39;&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; password varchar<span class="br0">&#40;</span><span class="nu0">32</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#39;&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; email varchar<span class="br0">&#40;</span><span class="nu0">255</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#39;&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; firstname varchar<span class="br0">&#40;</span><span class="nu0">50</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#39;&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; lastname varchar<span class="br0">&#40;</span><span class="nu0">50</span><span class="br0">&#41;</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">DEFAULT</span> <span class="st0">&#39;&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> <span class="br0">&#40;</span>id<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>The database credentials are stored in an INI file (<em>app.ini</em>). In this example there are configuration data for both a production system and a development system. Because the development system configuration data are very similar to those for production, the development section inherits from the production section:</p>
<div class="geshi no ini">
<ol>
<li class="li1">
<div class="de1"><span class="re0"><span class="br0">&#91;</span>production<span class="br0">&#93;</span></span></div>
</li>
<li class="li1">
<div class="de1">database.<span class="re1">adapter </span><span class="sy0">=</span><span class="re2"> PDO_MYSQL</span></div>
</li>
<li class="li1">
<div class="de1">database.params.<span class="re1">host </span><span class="sy0">=</span><span class="re2"> localhost</span></div>
</li>
<li class="li1">
<div class="de1">database.params.<span class="re1">dbname </span><span class="sy0">=</span><span class="re2"> prod_dbname</span></div>
</li>
<li class="li1">
<div class="de1">database.params.<span class="re1">username </span><span class="sy0">=</span><span class="re2"> dbusername</span></div>
</li>
<li class="li1">
<div class="de1">database.params.<span class="re1">password </span><span class="sy0">=</span><span class="re2"> dbpassword</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0"><span class="br0">&#91;</span>development : production<span class="br0">&#93;</span></span></div>
</li>
<li class="li1">
<div class="de1">database.params.<span class="re1">dbname </span><span class="sy0">=</span><span class="re2"> dev_dbname</span></div>
</li>
</ol>
</div>
<p>This configuration file also allows you to easily change the database adapter (if needed).</p>
<h3>The Bootstrap File</h3>
<p>Let&#8217;s take a look at the bootstrap file (<em>index.php</em>):</p>
<div class="geshi php">
<div class="head">&lt;?php</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw3">define</span><span class="br0">&#40;</span><span class="st0">&#39;APPLICATION_PATH&#39;</span><span class="sy0">,</span> <span class="kw3">realpath</span><span class="br0">&#40;</span><span class="kw3">dirname</span><span class="br0">&#40;</span><span class="kw2">__FILE__</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&#39;/../application/&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">set_include_path</span><span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">get_include_path</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">.</span> PATH_SEPARATOR <span class="sy0">.</span> APPLICATION_PATH <span class="sy0">.</span> <span class="st0">&#39;/../library/&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">.</span> PATH_SEPARATOR <span class="sy0">.</span> APPLICATION_PATH <span class="sy0">.</span> <span class="st0">&#39;/services/&#39;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">.</span> PATH_SEPARATOR <span class="sy0">.</span> APPLICATION_PATH <span class="sy0">.</span> <span class="st0">&#39;/models/&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">require_once</span> <span class="st0">&#39;Zend/Loader.php&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">Zend_Loader<span class="sy0">::</span><span class="me2">registerAutoload</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$server</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Amf_Server<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$server</span><span class="sy0">-&gt;</span><span class="me1">setClass</span><span class="br0">&#40;</span><span class="st0">&#39;UsersService&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$server</span><span class="sy0">-&gt;</span><span class="me1">setClassMap</span><span class="br0">&#40;</span><span class="st0">&#39;UserVO&#39;</span><span class="sy0">,</span><span class="st0">&#39;User&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$server</span><span class="sy0">-&gt;</span><span class="me1">setProduction</span><span class="br0">&#40;</span><span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span><span class="br0">&#40;</span><span class="re1">$server</span><span class="sy0">-&gt;</span><span class="me1">handle</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>This bootstrap file is very similar to the standard bootstrap files you find in other tutorials or in the Zend Reference Guide. It adds some include paths, initializes the Zend autoload feature for classes, and sets up the AMF server.  </p>
<h3>The Service Classes</h3>
<p>Utilizing the <em>Zend_Config</em> and <em>Zend_Db</em> packages, we set up the database connection in a base service class that the actual service classes inherit from. In line 7 in the listing below we provide a default database adapter for all subsequent instances of <em>Zend_Db_Table</em> objects in our application (for more information, please refer to the <a title="Zend_Db" href="http://framework.zend.com/manual/en/zend.db.table.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/framework.zend.com/manual/en/zend.db.table.html?referer=');">Zend_Db chapter</a> in the Reference Guide). This way we keep the logic of creating a database connection in one central place. </p>
<div class="geshi php">
<div class="head">&lt;?php</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> BaseService </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">$configuration</span> <span class="sy0">=</span> <span class="kw2">new</span> Zend_Config_Ini<span class="br0">&#40;</span>APPLICATION_PATH <span class="sy0">.</span> <span class="st0">&#39;/config/app.ini&#39;</span><span class="sy0">,</span> <span class="st0">&#39;development&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">$dbAdapter</span> <span class="sy0">=</span> Zend_Db<span class="sy0">::</span><span class="me2">factory</span><span class="br0">&#40;</span><span class="re1">$configuration</span><span class="sy0">-&gt;</span><span class="me1">database</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; Zend_Db_Table_Abstract<span class="sy0">::</span><span class="me2">setDefaultAdapter</span><span class="br0">&#40;</span><span class="re1">$dbAdapter</span><span class="br0">&#41;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The only real service class in our example is <em>UsersService</em> which extends <em>BaseService</em> and invokes the parent class&#8217;s constructor by calling <code>parent::__construct();</code>. For the sake of simplicity it contains only one method (<code>getUsers()</code>):</p>
<div class="geshi php">
<div class="head">&lt;?php</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> UsersService <span class="kw2">extends</span> BaseService</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; parent<span class="sy0">::</span>__construct<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">function</span> getUsers<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">$usersArray</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">$table</span> <span class="sy0">=</span> <span class="kw2">new</span> Users<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">$result</span> <span class="sy0">=</span> <span class="re1">$table</span><span class="sy0">-&gt;</span><span class="me1">fetchAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$result</span> <span class="kw1">as</span> <span class="re1">$row</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$user</span> <span class="sy0">=</span> <span class="kw2">new</span> User<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$user</span><span class="sy0">-&gt;</span><span class="me1">id</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">id</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$user</span><span class="sy0">-&gt;</span><span class="me1">username</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">username</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$user</span><span class="sy0">-&gt;</span><span class="me1">email</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">email</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$user</span><span class="sy0">-&gt;</span><span class="me1">firstname</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">firstname</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$user</span><span class="sy0">-&gt;</span><span class="me1">lastname</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">lastname</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">array_push</span><span class="br0">&#40;</span><span class="re1">$usersArray</span><span class="sy0">,</span> <span class="re1">$user</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$usersArray</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>You may wonder what the <em>Users</em> class does (line 12 in the above code listing). Here&#8217;s the answer: It&#8217;s a model class.</p>
<h3>The Model Class</h3>
<p>Models are another important concept of the Zend framework. Although the classical MVC pattern doesn&#8217;t apply in the context of the Zend AMF server, I stick to this concept here because it may come in handy sometimes. Imagine an application that is supposed to support both a Flash and an HTML interface. By following the framework&#8217;s MVC guidelines, we are able to build an application engine that uses the same model classes for both the AMF server gateway and the MVC-based HTML frontend.</p>
<p>The class <em>Users</em> is located in the <em>models</em> folder. It extends <em>Zend_Db_Table</em> and holds the name of the corresponding database table:</p>
<div class="geshi php">
<div class="head">&lt;?php</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> Users <span class="kw2">extends</span> Zend_Db_Table</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;protected <span class="re1">$_name</span> <span class="sy0">=</span> <span class="st0">&#39;users&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Remember that we provided an application-wide database adapter for all <em>Zend_Db_Table</em> objects (see line 7 in the <em>BaseService</em> class). By creating an instance of <em>Users</em> (which inherits all methods from <em>Zend_Db_Table</em>) we are able to use <code>fetchAll()</code> to retrieve all rows from the table <em>users</em>.</p>
<h3>The Value Object Class</h3>
<p>The class <em>User</em> (see line 17 in the <em>UsersService</em> code listing) is a helper class that allows us to send an array of typed objects to the Flash player. This is especially useful in Flex-based applications where you want to use value objects for data-binding, for example. By the way, the class <em>User</em> doesn&#8217;t look any different than a VO class in an <a title="AMFPHP" href="http://www.amfphp.org" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.amfphp.org?referer=');">AMFPHP</a> context.</p>
<div class="geshi php">
<div class="head">&lt;?php</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> User <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re1">$id</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re1">$username</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re1">$password</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re1">$firstname</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re1">$lastnamne</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="re1">$email</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>By calling <code>$server->setClassMap('UserVO','User');</code> inside the bootstrap file, the <em>User</em> objects are mapped to <em>UserVO</em>. </p>
<p>I skip the Flex/Flash part here because this topic is well covered in other tutorials. But I hope you caught a glimpse of how you can leverage the power of other components inside the Zend framework - even if you are only interested in the Zend AMF server. There are more scenarios where the Zend framework may come in handy for a Flash/Flex developer (for example, think of generating PDF files on the fly by using <em>Zend_Pdf</em>).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/11/26/whats-in-the-zend-framework-for-the-flashflex-developer/feed/</wfw:commentRss>
		</item>
		<item>
		<title>When a Cross-Domain Policy File is not Enough</title>
		<link>http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/</link>
		<comments>http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/#comments</comments>
		<pubDate>Fri, 15 Aug 2008 13:03:25 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=87</guid>
		<description><![CDATA[This post is a reminder to myself (and a source of help to anyone who may need it). For a long time I thought a cross-domain policy file in a web server&#8217;s root directory solves all cross-domain security issues automagically - until I stumbled over the fact that I wasn&#8217;t able to manipulate the bitmap [...]]]></description>
			<content:encoded><![CDATA[<p>This post is a reminder to myself (and a source of help to anyone who may need it). For a long time I thought a cross-domain policy file in a web server&#8217;s root directory solves all cross-domain security issues automagically - until I stumbled over the fact that I wasn&#8217;t able to manipulate the bitmap data of an image that was loaded from outside my SWF file&#8217;s domain.</p>
<p><span id="more-87"></span></p>
<p>Let&#8217;s say you want to load a PNG file from &#8220;my.domain.com&#8221; into a SWF file on &#8220;your.domain.com&#8221;. Let&#8217;s also assume you have provided a &#8220;crossdomain.xml&#8221; file on &#8220;my.domain.com&#8221; that grants access to &#8220;your.domain.com&#8221;. As long as you only add an instance of the <code>flash.display.Loader</code> class to the display list everything is fine. But what if you, for example, want to access the bitmap data inside the loader object? In my case, I just wanted to set the <code>smoothing</code> property of the <code>Bitmap</code> object to <code>true</code> before resizing the image. So I tried this:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:Loader = <span class="kw2">new</span> Loader<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">contentLoaderInfo</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span> Event.<span class="me1">COMPLETE</span>, onComplete <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="kw3">load</span><span class="br0">&#40;</span> <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span> <span class="st0">&quot;http://my.domain.com/image.png&quot;</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onComplete<span class="br0">&#40;</span> event:Event <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> bitmap:Bitmap = event.<span class="kw3">target</span>.<span class="me1">loader</span>.<span class="me1">content</span> as Bitmap;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitmap.<span class="kw3">smoothing</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitmap.<span class="kw3">width</span> = bitmap.<span class="kw3">width</span> <span class="sy0">/</span> <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitmap.<span class="kw3">height</span> = bitmap.<span class="kw3">height</span> <span class="sy0">/</span> <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> bitmap <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>This works fine inside the Flash CS3 IDE (or whatever IDE you use). I deployed the SWF file to a web server - and it failed. Why? Probably because I have missed to read this <a title="Creating More Secure SWF Web Applications" href="http://www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_print.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.adobe.com/devnet/flashplayer/articles/secure_swf_apps_print.html?referer=');">article</a>, this <a title="BitmapData/draw() and checkPolicyFile" href="http://www.toybot.nl/blog/?p=50" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.toybot.nl/blog/?p=50&amp;referer=');">blog post</a>, and this <a title="Enabling BitmapData.draw (..) on crossdomain images in Adobe Flash Player 9" href="http://www.abdulqabiz.com/blog/archives/flash_and_actionscript/enabling_bitmapdatad.php" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.abdulqabiz.com/blog/archives/flash_and_actionscript/enabling_bitmapdatad.php?referer=');">blog post</a>. And yes, I admittedly have never paid attention to the existence of the <a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/LoaderContext.html" target="_blank" onclick="pageTracker._trackPageview('/outgoing/livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/LoaderContext.html?referer=');">flash.system.LoaderContext</a> class. But this class is all what we need here (forget all the PHP proxy hacks, folks!).</p>
<p>Create a <code>LoaderContext</code> object with <code>checkPolicyFile</code> set to <code>true</code> and add it to the <code>flash.display.Loader</code>&#8217;s <code>load()</code> method!</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">events</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">URLRequest</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">system</span>.<span class="me1">LoaderContext</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loaderContext:LoaderContext = <span class="kw2">new</span> LoaderContext<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loaderContext.<span class="me1">checkPolicyFile</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:Loader = <span class="kw2">new</span> Loader<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">contentLoaderInfo</span>.<span class="me1">addEventListener</span><span class="br0">&#40;</span> Event.<span class="me1">COMPLETE</span>, onComplete <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="kw3">load</span><span class="br0">&#40;</span> <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span> <span class="st0">&quot;http://my.domain.com/image.png&quot;</span> <span class="br0">&#41;</span>, loaderContext <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">function</span> onComplete<span class="br0">&#40;</span> event:Event <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> bitmap:Bitmap = event.<span class="kw3">target</span>.<span class="me1">loader</span>.<span class="me1">content</span> as Bitmap;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitmap.<span class="kw3">smoothing</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitmap.<span class="kw3">width</span> = bitmap.<span class="kw3">width</span> <span class="sy0">/</span> <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bitmap.<span class="kw3">height</span> = bitmap.<span class="kw3">height</span> <span class="sy0">/</span> <span class="nu0">2</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> bitmap <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>It&#8217;s easy when you know it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/08/15/when-a-cross-domain-policy-file-is-not-enough/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Handling FlashVars in PureMVC</title>
		<link>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/</link>
		<comments>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 18:09:59 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[FlashDevelop]]></category>

		<category><![CDATA[PureMVC]]></category>

		<category><![CDATA[FlashVars]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=36</guid>
		<description><![CDATA[In this blog entry I would like to share my approach to handling FlashVars in a PureMVC application. I assume that you are familiar with the basic concepts of PureMVC.

A Real-World Scenario
Recently, I developd a PureMVC-based Flash game for a client. The application had to be multi-lingual and had to provide an auto-login option. After [...]]]></description>
			<content:encoded><![CDATA[<p>In this blog entry I would like to share my approach to handling FlashVars in a PureMVC application. I assume that you are familiar with the basic concepts of PureMVC.</p>
<p><span id="more-36"></span></p>
<h3>A Real-World Scenario</h3>
<p>Recently, I developd a PureMVC-based Flash game for a client. The application had to be multi-lingual and had to provide an auto-login option. After registration via an HTML form, the user is redirected to the page with the embedded SWF file. The locale information and the credentials are handed over to the game page as GET variables (with the password encrypted). A PHP script then generates the appropriate JavaScript code for <a title="SWFObject" href="http://code.google.com/p/swfobject/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/swfobject/?referer=');">SWFObject</a>:</p>
<div class="geshi php">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>script type<span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> flashvars <span class="sy0">=</span> <span class="br0">&#123;</span> locale<span class="sy0">:</span> <span class="st0">&quot;&lt;?=$locale?&gt;&quot;</span><span class="sy0">,</span> username<span class="sy0">:</span><span class="st0">&quot;&lt;?=$username?&gt;&quot;</span><span class="sy0">,</span> password<span class="sy0">:</span><span class="st0">&quot;&lt;?=$password?&gt;&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> params <span class="sy0">=</span> <span class="br0">&#123;</span> bgcolor<span class="sy0">:</span> <span class="st0">&quot;#000000&quot;</span> <span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> attributes <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; swfobject<span class="sy0">.</span>embedSWF<span class="br0">&#40;</span><span class="st0">&quot;Main.swf&quot;</span><span class="sy0">,</span> <span class="st0">&quot;FlashDiv&quot;</span><span class="sy0">,</span> <span class="st0">&quot;800&quot;</span><span class="sy0">,</span> <span class="st0">&quot;600&quot;</span><span class="sy0">,</span> <span class="st0">&quot;9.0.0&quot;</span><span class="sy0">,</span> <span class="st0">&quot;assets/swfobject/expressInstall.swf&quot;</span><span class="sy0">,</span> flashvars<span class="sy0">,</span> params<span class="sy0">,</span> attributes<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">&lt;/script&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&#8230;</span></div>
</li>
</ol>
</div>
<p>With the help of SWFObject the parameters are injected into the Flash file.</p>
<h3>The Document Class</h3>
<p>The Flash <em>Main.as</em> document class isn&#8217;t much different from a usual PureMVC document class except for extracting the <code>flashVars</code> object from the <code>root.loaderInfo</code> object&#8217;s <code>parameters</code> property and passing it to the <code>ApplicationFacade</code>&#8217;s <code>startup()</code> method as the second parameter:</p>
<p><em>Main.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">LoaderInfo</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageScaleMode</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">StageAlign</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#91;</span>SWF<span class="br0">&#40;</span><span class="kw3">width</span>=<span class="st0">&quot;800&quot;</span>, <span class="kw3">height</span>=<span class="st0">&quot;600&quot;</span>, frameRate=<span class="st0">&quot;30&quot;</span>, <span class="kw3">backgroundColor</span>=<span class="st0">&quot;#FFFFFF&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> Main <span class="kw3">extends</span> Sprite</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> Main<span class="br0">&#40;</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">scaleMode</span> = StageScaleMode.<span class="me1">NO_SCALE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="kw3">align</span> = StageAlign.<span class="me1">TOP_LEFT</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> flashVars:<span class="kw3">Object</span> = LoaderInfo<span class="br0">&#40;</span> <span class="kw3">this</span>.<span class="me1">root</span>.<span class="me1">loaderInfo</span> <span class="br0">&#41;</span>.<span class="me1">parameters</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> facade:ApplicationFacade = ApplicationFacade.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">startup</span><span class="br0">&#40;</span> <span class="kw3">stage</span>, flashVars <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<h3>The <em>ApplicationFacade</em></h3>
<p>Now, what to do with the <code>flashVars</code> inside the <em>ApplicationFacade</em>? I prefer using multiple fine-granulated proxy classes for managing different portions of my application&#8217;s data model. Therefore I created two proxies, one for holding the locale information, the other one for keeping track of the login parameters. Both proxies are registered by PureMVC commands that are invoked inside the <code>startup()</code> method.</p>
<p>To get the big picture first, let&#8217;s take a look at the <em>ApplicationFacade</em> class before exploring the proxies and commands:</p>
<p><em>ApplicationFacade.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">facade</span>.<span class="me1">Facade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">controller</span>.<span class="me1">*</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">LoginVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> ApplicationFacade <span class="kw3">extends</span> Facade <span class="kw3">implements</span> IFacade</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const INIT_LOCALE_PROXY:<span class="kw3">String</span> = <span class="st0">&quot;initLocaleProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const INIT_LOGIN_PROXY:<span class="kw3">String</span> = <span class="st0">&quot;initLoginProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STARTUP:<span class="kw3">String</span> = <span class="st0">&quot;startup&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> getInstance<span class="br0">&#40;</span><span class="br0">&#41;</span>: ApplicationFacade </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span>instance == <span class="kw2">null</span><span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; instance = <span class="kw2">new</span> ApplicationFacade<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> instance as ApplicationFacade;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override protected <span class="kw2">function</span> initializeController<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span>.<span class="me1">initializeController</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">INIT_LOCALE_PROXY</span>, InitLocaleProxyCommand <span class="br0">&#41;</span>; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">INIT_LOGIN_PROXY</span>, InitLoginProxyCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STARTUP</span>, StartupCommand <span class="br0">&#41;</span>; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> startup<span class="br0">&#40;</span> <span class="kw3">stage</span>:<span class="kw3">Object</span>, flashVars:<span class="kw3">Object</span> <span class="br0">&#41;</span>:<span class="kw3">void</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> locale:<span class="kw3">String</span> = <span class="st0">&#39;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> flashVars.<span class="me1">locale</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; locale = flashVars.<span class="me1">locale</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loginVO:LoginVO = <span class="kw2">new</span> LoginVO<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> flashVars.<span class="me1">username</span> <span class="sy0">&amp;&amp;</span> flashVars.<span class="kw3">password</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loginVO.<span class="me1">username</span> = flashVars.<span class="me1">username</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loginVO.<span class="kw3">password</span> = flashVars.<span class="kw3">password</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> INIT_LOCALE_PROXY, locale <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> INIT_LOGIN_PROXY, loginVO <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendNotification<span class="br0">&#40;</span> STARTUP, <span class="kw3">stage</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 27-28</strong>: The <code>InitLocaleProxyCommand</code> and the <code>InitLoginProxyCommand</code> are registered. These commands are responsible for populating the proxies. We will take a look at them shortly.</p>
<p><strong>Lines 34-38</strong>: So far we haven&#8217;t checked if the <code>flashVars</code> object&#8217;s <code>locale</code> property is set at all. If it is empty the <code>locale</code> variable  holds an empty string.</p>
<p><strong>Line 40</strong>: <em>LoginVO</em> is a value object class that is used as the inner data structure of the <em>LoginProxy</em>. We will take a closer look at this helper class, too.</p>
<p><strong>Lines 41-45</strong>: Similar to checking the <code>flashVars</code> object&#8217;s <code>locale</code> property, we examine the <code>username</code> and <code>password</code> properties.</p>
<p><strong>Lines 47-48</strong>: The <code>InitLocaleProxyCommand</code> and the <code>InitLoginProxyCommand</code> are triggered by sending the notifications they were registered with.</p>
<p><strong>Line 49</strong>: The application flow is continued with the usual PureMVC <code>StartupCommand</code> that takes care of registering the stage mediator, etc.</p>
<h3>The Proxy Classes</h3>
<p>In order to understand what the commands do with their payload, we need to look at the proxy classes first. The <em>LocaleProxy</em>&#8217;s data object is a string that simply contains the locale (e.g. &#8220;en_GB&#8221;):</p>
<p><em>LocaleProxy.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> LocaleProxy <span class="kw3">extends</span> Proxy <span class="kw3">implements</span> IProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;LocaleProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> LocaleProxy<span class="br0">&#40;</span> <span class="kw3">name</span>:<span class="kw3">String</span>, <span class="kw3">data</span>:<span class="kw3">String</span>=<span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">name</span>, <span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> locale<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span> as <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The <em>LoginProxy</em> class is a little more complex. Not only is the inner data structure defined by a value object class (<em>LoginVO</em>), the proxy also provides a getter method that inspects the data object in order to decide if the application should try an auto-login.</p>
<p><em>LoginProxy.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">IProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">proxy</span>.<span class="me1">Proxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">LoginVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> LoginProxy <span class="kw3">extends</span> Proxy <span class="kw3">implements</span> IProxy</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const <span class="kw3">NAME</span>:<span class="kw3">String</span> = <span class="st0">&quot;LoginProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> LoginProxy<span class="br0">&#40;</span> <span class="kw3">name</span>:<span class="kw3">String</span>, <span class="kw3">data</span>:LoginVO=<span class="kw2">null</span> <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">name</span>, <span class="kw3">data</span> ? <span class="kw3">data</span> : <span class="kw2">new</span> LoginVO<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> tryAutoLogin<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Boolean</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="br0">&#40;</span> loginVO.<span class="me1">username</span> <span class="sy0">!</span>= <span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span> loginVO.<span class="kw3">password</span> <span class="sy0">!</span>= <span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> loginVO<span class="br0">&#40;</span><span class="br0">&#41;</span>:LoginVO</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">data</span> as LoginVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 16-18</strong>: If the credentials have been passed to Flash via SWFObject the application is supposed to try an auto-login. If <code>tryAutoLogin</code> is <code>false</code> the user will be redirected to a login view inside the Flash movie.</p>
<p>The <em>LoginVO</em> class contains setter and getter methods for <code>username</code> and <code>password</code>.</p>
<p><em>LoginVO.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">net</span>.<span class="me1">registerClassAlias</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> LoginVO</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _username:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _password:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> LoginVO<span class="br0">&#40;</span> username:<span class="kw3">String</span>=<span class="st0">&#39;&#39;</span>, <span class="kw3">password</span>:<span class="kw3">String</span>=<span class="st0">&#39;&#39;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_username = username;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_password = <span class="kw3">password</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> username<span class="br0">&#40;</span> username:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_username = username;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> username<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _username;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">set</span> <span class="kw3">password</span><span class="br0">&#40;</span> <span class="kw3">password</span>:<span class="kw3">String</span> <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_password = <span class="kw3">password</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> <span class="kw3">get</span> <span class="kw3">password</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> _password;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">static</span> <span class="kw3">public</span> <span class="kw2">function</span> register<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerClassAlias<span class="br0">&#40;</span> <span class="st0">&quot;com.log2e.app.model.vo.LoginVO&quot;</span>, LoginVO <span class="br0">&#41;</span>; &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 36-39</strong>: The static method <code>register()</code> is supposed to be used in an AMF remoting environment. Since this post describes a pure AS3 approach we can&#8217;t rely on the <code>RemoteClass</code> meta tag which is only available in Flex. (Maybe I will blog on PureMVC and AMFPHP in another post.)</p>
<h3>The Commands</h3>
<p>Finally, here are the commands that process the FlashVars information and register the proxies.</p>
<p><em>InitLocaleProxyCommand.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">controller</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">LocaleProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">ICommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">command</span>.<span class="me1">SimpleCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> InitLocaleProxyCommand <span class="kw3">extends</span> SimpleCommand <span class="kw3">implements</span> ICommand </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> execute<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> locale:<span class="kw3">String</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">switch</span> <span class="br0">&#40;</span> locale <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;de_DE&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;en_GB&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;en_US&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;es_ES&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;fr_FR&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&#39;it_IT&#39;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">default</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;locale = <span class="st0">&#39;en_GB&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> <span class="kw2">new</span> LocaleProxy<span class="br0">&#40;</span> LocaleProxy.<span class="kw3">NAME</span>, locale <span class="br0">&#41;</span> <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 15-27</strong>: The locale is checked against a list of valid locales. If no valid value is found a default value is set.</p>
<p>There&#8217;s nothing special about the <code>InitLoginProxyCommand</code>, I post it here just for the sake of completeness:</p>
<p><em>InitLoginProxyCommand.as</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">controller</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">ICommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">interfaces</span>.<span class="me1">INotification</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">patterns</span>.<span class="me1">command</span>.<span class="me1">SimpleCommand</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">LoginProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">ApplicationFacade</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">app</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">LoginVO</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> InitLoginProxyCommand <span class="kw3">extends</span> SimpleCommand <span class="kw3">implements</span> ICommand </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span> &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; override <span class="kw3">public</span> <span class="kw2">function</span> execute<span class="br0">&#40;</span> note:INotification <span class="br0">&#41;</span>:<span class="kw3">void</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loginVO:LoginVO = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as LoginVO;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> <span class="kw2">new</span> LoginProxy<span class="br0">&#40;</span> LoginProxy.<span class="kw3">NAME</span>, loginVO <span class="br0">&#41;</span> <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>After the <code>LocaleProxy</code> and the <code>LoginProxy</code> have been registered the <code>StartupCommand</code> (which I do not post here) takes control over the application flow by registering the <code>StageMediator</code> and so on.</p>
<p>I hope you found this post useful. Do share your thoughts and comments. Thanks for your time.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>1, true, yes, y, on? - A Boolean Converter in AS3</title>
		<link>http://blog.log2e.com/2008/06/04/a-boolean-converter-in-as3/</link>
		<comments>http://blog.log2e.com/2008/06/04/a-boolean-converter-in-as3/#comments</comments>
		<pubDate>Wed, 04 Jun 2008 16:09:19 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=35</guid>
		<description><![CDATA[Configuration files often contain Boolean parameters for enabling or disabling features in an application or website. This way non-programmers can easily customize complex systems. But what if someone uses another word than &#8220;true&#8221; (for example, &#8220;1&#8243;, &#8220;yes&#8221;, &#8220;y&#8221;, &#8220;on&#8221;)?

In order to make my Flash/Flex apps less error-prone, I usually run all Boolean values from external [...]]]></description>
			<content:encoded><![CDATA[<p>Configuration files often contain Boolean parameters for enabling or disabling features in an application or website. This way non-programmers can easily customize complex systems. But what if someone uses another word than &#8220;true&#8221; (for example, &#8220;1&#8243;, &#8220;yes&#8221;, &#8220;y&#8221;, &#8220;on&#8221;)?<br />
<span id="more-35"></span><br />
In order to make my Flash/Flex apps less error-prone, I usually run all Boolean values from external configuration files through a converter. It&#8217;s a simple class with a single static method:</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">package </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> BooleanConverter</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const TRUE_VALUES:<span class="kw3">Array</span> = <span class="br0">&#91;</span> <span class="st0">&quot;1&quot;</span>, <span class="st0">&quot;true&quot;</span>, <span class="st0">&quot;yes&quot;</span>, <span class="st0">&quot;y&quot;</span>, <span class="st0">&quot;on&quot;</span>, <span class="st0">&quot;enabled&quot;</span> <span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> <span class="kw2">function</span> makeBoolean<span class="br0">&#40;</span> val:<span class="sy0">*</span> <span class="br0">&#41;</span>:<span class="kw3">Boolean</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> str:<span class="kw3">String</span> = <span class="kw3">String</span><span class="br0">&#40;</span> val <span class="br0">&#41;</span>.<span class="kw3">toLowerCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">for</span> <span class="br0">&#40;</span> <span class="kw2">var</span> i:<span class="kw3">int</span> = <span class="nu0">0</span>; i <span class="sy0">&lt;</span> BooleanConverter.<span class="me1">TRUE_VALUES</span>.<span class="kw3">length</span>; i++ <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> str == BooleanConverter.<span class="me1">TRUE_VALUES</span><span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw2">false</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The method <code>makeBoolean()</code> accepts any type of data and converts it into a string. The string value is then compared to a list of words which represent the Boolean status <code>true</code>. If no match is found <code>false</code> is returned.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/06/04/a-boolean-converter-in-as3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>TinyURL API</title>
		<link>http://blog.log2e.com/2008/05/28/tinyurl-api/</link>
		<comments>http://blog.log2e.com/2008/05/28/tinyurl-api/#comments</comments>
		<pubDate>Wed, 28 May 2008 11:11:21 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[TinyURL]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=33</guid>
		<description><![CDATA[Did you know TinyURL has an open API? As the service itself, the API is incredibly simple:
http://tinyurl.com/api-create.php?url=http://blog.log2e.com/
Here&#8217;s a little Flex demo that demonstrates its use.

View source.
]]></description>
			<content:encoded><![CDATA[<p>Did you know TinyURL has an open API? As the service itself, the API is incredibly simple:</p>
<p><a onclick="pageTracker._trackPageview('/outgoing/tinyurl.com/api-create.php?url=http_//blog.log2e.com/&amp;referer=');pageTracker._trackPageview('/outgoing/tinyurl.com/api-create.php?url=http_//blog.log2e.com/&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=33');pageTracker._trackPageview('/outgoing/tinyurl.com/api-create.php?url=http_//blog.log2e.com/&amp;referer=http://blog.log2e.com/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/tinyurl.com/api-create.php?url=http_//blog.log2e.com/&amp;referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=33&amp;message=4');pageTracker._trackPageview('/outgoing/tinyurl.com/api-create.php?url=http_//blog.log2e.com/&amp;referer=http://blog.log2e.com/wp-admin/post-new.php');" href="http://tinyurl.com/api-create.php?url=http://blog.log2e.com/" target="_blank">http://tinyurl.com/api-create.php?url=http://blog.log2e.com/</a></p>
<p>Here&#8217;s a little <a title="TinyURL Demo" href="http://blog.log2e.com/demos/tinyurl/" target="_blank">Flex demo</a> that demonstrates its use.</p>
<p><a title="TinyURL Demo" href="http://blog.log2e.com/demos/tinyurl/" target="_blank"><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/tinyurl_demo.jpg" alt="TinyURL Demo" width="450" height="200" /></a></p>
<p><a title="View Source" href="http://blog.log2e.com/demos/tinyurl/srcview/index.html" target="_blank">View source</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/28/tinyurl-api/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Twitter, Flex and JSON</title>
		<link>http://blog.log2e.com/2008/05/25/twitter-flex-and-json/</link>
		<comments>http://blog.log2e.com/2008/05/25/twitter-flex-and-json/#comments</comments>
		<pubDate>Sun, 25 May 2008 16:36:19 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[JSON]]></category>

		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=32</guid>
		<description><![CDATA[There are libraries in several programming languages that provide access to the Twitter API. Although there&#8217;s an ActionScript 3 library for Twitter, in this tutorial we will be looking at how you can retrieve Twitter&#8217;s public timeline with a little help from another collection of ActionScript 3 utilities, the corelib library. 
The result of this [...]]]></description>
			<content:encoded><![CDATA[<p>There are libraries in several programming languages that provide access to the <a title="Twitter API" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/twitter-development-talk/web/api-documentation?referer=');pageTracker._trackPageview('/outgoing/groups.google.com/group/twitter-development-talk/web/api-documentation?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=32&amp;message=4');" href="http://groups.google.com/group/twitter-development-talk/web/api-documentation" target="_blank">Twitter API</a>. Although there&#8217;s an ActionScript 3 library for Twitter, in this tutorial we will be looking at how you can retrieve Twitter&#8217;s public timeline with a little help from another collection of ActionScript 3 utilities, the <a title="corelib" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/as3corelib/?referer=');pageTracker._trackPageview('/outgoing/code.google.com/p/as3corelib/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=32&amp;message=4');" href="http://code.google.com/p/as3corelib/" target="_blank">corelib</a> library. </p>
<p>The result of this tutorial can be <a title="Twitter Demo" onclick="pageTracker._trackPageview('/outgoing/blog.log2e.com/demos/twitter-flex-json/?referer=http://blog.log2e.com/wp-admin/edit.php');" href="http://blog.log2e.com/demos/twitter-flex-json/" target="_blank">seen here</a> (&#8221;View Source&#8221; is enabled).<br />
<span id="more-32"></span></p>
<h3>Twitter&#8217;s Public Timeline</h3>
<p>Twitter&#8217;s public timeline returns the 20 most recent statuses from non-protected users. The result is offered in four different formats (XML, JSON, RSS, Atom). The structure of the data can best be explored when we look at the XML representation of the &#8220;tweets&#8221; (Twitter speak for messages). Here&#8217;s a simplified view where the child nodes inside the status nodes have been removed:</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span> <span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;statuses</span> <span class="re0">type</span>=<span class="st0">&quot;array&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/statuses<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>A single status node looks like this:</p>
<div class="geshi no xml">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;status<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;created_at<span class="re2">&gt;</span></span></span>Sat May 24 17:29:46 +0000 2008<span class="sc3"><span class="re1">&lt;/created_at<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;id<span class="re2">&gt;</span></span></span>819102544<span class="sc3"><span class="re1">&lt;/id<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;text<span class="re2">&gt;</span></span></span>I also won interview in the pageant<span class="sc3"><span class="re1">&lt;/text<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;source<span class="re2">&gt;</span></span></span>web<span class="sc3"><span class="re1">&lt;/source<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;truncated<span class="re2">&gt;</span></span></span>false<span class="sc3"><span class="re1">&lt;/truncated<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;in_reply_to_status_id<span class="re2">&gt;</span></span></span><span class="sc3"><span class="re1">&lt;/in_reply_to_status_id<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;in_reply_to_user_id<span class="re2">&gt;</span></span></span><span class="sc3"><span class="re1">&lt;/in_reply_to_user_id<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;favorited<span class="re2">&gt;</span></span></span>false<span class="sc3"><span class="re1">&lt;/favorited<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;user<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;id<span class="re2">&gt;</span></span></span>3725701<span class="sc3"><span class="re1">&lt;/id<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>Kelly King Anderson<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;screen_name<span class="re2">&gt;</span></span></span>startupprincess<span class="sc3"><span class="re1">&lt;/screen_name<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;location<span class="re2">&gt;</span></span></span>Utah County<span class="sc3"><span class="re1">&lt;/location<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;description<span class="re2">&gt;</span></span></span>Mentor and Friend, Make a Wish, Make it Happen!<span class="sc3"><span class="re1">&lt;/description<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;profile_image_url<span class="re2">&gt;</span></span></span>http://s3.amazonaws.com/twitter_production/profile_images/19834292/7355f_web_normal.jpg<span class="sc3"><span class="re1">&lt;/profile_image_url<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;url<span class="re2">&gt;</span></span></span>http://www.startupprincess.com<span class="sc3"><span class="re1">&lt;/url<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;protected<span class="re2">&gt;</span></span></span>false<span class="sc3"><span class="re1">&lt;/protected<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;followers_count<span class="re2">&gt;</span></span></span>206<span class="sc3"><span class="re1">&lt;/followers_count<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/user<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/status<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>As you can see, the status node contains a user node which itself has several child nodes.</p>
<h3><em>corelib</em>&#8217;s JSON Class</h3>
<p>Of course, you could use ActionScript&#8217;s XML capabilities to manipulate and further process the XML data. In this tutorial though, we want to make use of the JSON class which is part of the ActionScript 3 <em>corelib</em> library and which facilitates both serialization and deserialization of JSON data.</p>
<p><a title="corelib" onclick="pageTracker._trackPageview('/outgoing/code.google.com/p/as3corelib/?referer=');pageTracker._trackPageview('/outgoing/code.google.com/p/as3corelib/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=32&amp;message=4');" href="http://code.google.com/p/as3corelib/" target="_blank">Download the corelib library</a> and make the <em>corelib.swc</em> file available to your Flex project. The JSON class is inside the <em>com.adobe.serialization.json</em> package. The class provides two static methods, <code>encode()</code> and <code>decode()</code>. The <code>decode()</code> method reads a JSON string and returns a native object as specified by the input string.</p>
<h3>Creating the Demo Application</h3>
<p>Our demo displays the public timeline in a datagrid. Here&#8217;s the code with some explanations below:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">&lt;</span>mx:Application xmlns:mx=<span class="st0">&quot;http://www.adobe.com/2006/mxml&quot;</span> xmlns=<span class="st0">&quot;*&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;layout=<span class="st0">&quot;absolute&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;creationComplete=<span class="st0">&quot;onCreationComplete()&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">&lt;</span>mx:Script<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sy0">&lt;!</span><span class="br0">&#91;</span>CDATA<span class="br0">&#91;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">import</span> mx.<span class="me1">collections</span>.<span class="me1">ArrayCollection</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">import</span> mx.<span class="me1">rpc</span>.<span class="me1">http</span>.<span class="me1">HTTPService</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">import</span> mx.<span class="me1">rpc</span>.<span class="me1">events</span>.<span class="me1">ResultEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">import</span> mx.<span class="me1">rpc</span>.<span class="me1">events</span>.<span class="me1">FaultEvent</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">import</span> mx.<span class="me1">formatters</span>.<span class="me1">DateFormatter</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">import</span> com.<span class="me1">adobe</span>.<span class="me1">serialization</span>.<span class="me1">json</span>.<span class="me1">JSON</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#91;</span>Bindable<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">private</span> <span class="kw2">var</span> publicTimeline:ArrayCollection;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">private</span> <span class="kw2">function</span> onCreationComplete<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; loadPublicTimeline<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">private</span> <span class="kw2">function</span> loadPublicTimeline<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; twitterService.<span class="kw3">send</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">private</span> <span class="kw2">function</span> onPublicTimelineResult<span class="br0">&#40;</span> event:ResultEvent <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> rawData:<span class="kw3">String</span> = <span class="kw3">String</span><span class="br0">&#40;</span> event.<span class="me1">result</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> arr:<span class="kw3">Array</span> = JSON.<span class="me1">decode</span><span class="br0">&#40;</span> rawData <span class="br0">&#41;</span> as <span class="kw3">Array</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; publicTimeline = <span class="kw2">new</span> ArrayCollection<span class="br0">&#40;</span> arr <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">private</span> <span class="kw2">function</span> onPublicTimelineFault<span class="br0">&#40;</span> event:FaultEvent <span class="br0">&#41;</span>:<span class="kw3">void</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">trace</span><span class="br0">&#40;</span> event.<span class="me1">fault</span>.<span class="kw3">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">private</span> <span class="kw2">function</span> getFormattedDate<span class="br0">&#40;</span> item:<span class="kw3">Object</span>, column:DataGridColumn <span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> dateFormatter:DateFormatter = <span class="kw2">new</span> DateFormatter<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dateFormatter.<span class="me1">formatString</span> = <span class="st0">&quot;MMMM D, YYYY, J:NN:SS&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> dateFormatter.<span class="me1">format</span><span class="br0">&#40;</span> item.<span class="me1">created_at</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">private</span> <span class="kw2">function</span> getScreenName<span class="br0">&#40;</span> item:<span class="kw3">Object</span>, column:DataGridColumn <span class="br0">&#41;</span>:<span class="kw3">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> item.<span class="me1">user</span>.<span class="me1">screen_name</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span><span class="br0">&#93;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">&lt;/</span>mx:Script<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">&lt;</span>mx:HTTPService</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; id=<span class="st0">&quot;twitterService&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">url</span>=<span class="st0">&quot;http://twitter.com/statuses/public_timeline.json&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; resultFormat=<span class="st0">&quot;text&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; result=<span class="st0">&quot;onPublicTimelineResult(event)&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; fault=<span class="st0">&quot;onPublicTimelineFault(event)&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; showBusyCursor=<span class="st0">&quot;true&quot;</span> <span class="sy0">/&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">&lt;</span>mx:VBox <span class="kw3">width</span>=<span class="st0">&quot;100%&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;100%&quot;</span> paddingBottom=<span class="st0">&quot;20&quot;</span> paddingLeft=<span class="st0">&quot;20&quot;</span> paddingRight=<span class="st0">&quot;20&quot;</span> paddingTop=<span class="st0">&quot;20&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>mx:Label <span class="kw3">text</span>=<span class="st0">&quot;Twitter Demo&quot;</span> fontSize=<span class="st0">&quot;20&quot;</span> fontWeight=<span class="st0">&quot;bold&quot;</span> <span class="sy0">/&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>mx:DataGrid dataProvider=<span class="st0">&quot;{ publicTimeline }&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;100%&quot;</span> rowCount=<span class="st0">&quot;20&quot;</span><span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">&lt;</span>mx:columns<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>mx:DataGridColumn <span class="kw3">width</span>=<span class="st0">&quot;200&quot;</span> headerText=<span class="st0">&quot;Created&quot;</span> labelFunction=<span class="st0">&quot;getFormattedDate&quot;</span> <span class="sy0">/&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>mx:DataGridColumn <span class="kw3">width</span>=<span class="st0">&quot;200&quot;</span> headerText=<span class="st0">&quot;Screen Name&quot;</span> labelFunction=<span class="st0">&quot;getScreenName&quot;</span> <span class="sy0">/&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>mx:DataGridColumn headerText=<span class="st0">&quot;Tweet&quot;</span> dataField=<span class="st0">&quot;text&quot;</span> <span class="sy0">/&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">&lt;/</span>mx:columns<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sy0">&lt;/</span>mx:DataGrid<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sy0">&lt;</span>mx:<span class="kw3">Button</span> label=<span class="st0">&quot;Refresh&quot;</span> <span class="kw3">width</span>=<span class="st0">&quot;100&quot;</span> <span class="kw3">height</span>=<span class="st0">&quot;30&quot;</span> click=<span class="st0">&quot;loadPublicTimeline()&quot;</span> <span class="sy0">/&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sy0">&lt;/</span>mx:VBox<span class="sy0">&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>mx:Application<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
<p><strong>Lines 14-15</strong>: Twitter&#8217;s public timeline data is converted into an <code>ArrayCollection</code> which in turn serves as a bindable dataprovider that is used to populate the datagrid.</p>
<p><strong>Lines 22-25</strong>: The <code>loadPublicTimeline()</code> method invokes the <code>send()</code> method on the <code>HTTPService</code> object <code>twitterService</code>.</p>
<p><strong>Lines 27-32</strong>: The payload of the result event contains the JSON string that has been returned by the Twitter API. The <code>decode()</code> method converts it into an array of generic objects. The array itself is wrapped into an <code>ArrayCollection</code>.</p>
<p><strong>Lines 39-44</strong>: This is a helper function that formats the date/time value of the <code>created_at</code> field.</p>
<p><strong>Lines 46-49</strong>: This is another helper function that retrieves the <code>screen_name</code> value from the Twitter user. Please note that the <code>user</code> object is nested inside the <code>status</code> object (see the XML code above). The <code>user</code> object can be accessed with the usual dot syntax.</p>
<p><strong>Lines 54-60</strong>: The <code>HTTPService</code> instance that retrieves the public timeline from Twitter&#8217;s official API URL (for more details please refer to the <a title="Twitter API" onclick="pageTracker._trackPageview('/outgoing/groups.google.com/group/twitter-development-talk/web/api-documentation?referer=');pageTracker._trackPageview('/outgoing/groups.google.com/group/twitter-development-talk/web/api-documentation?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=32&amp;message=4');" href="http://groups.google.com/group/twitter-development-talk/web/api-documentation" target="_blank">Twitter API documentation</a>).</p>
<p><a title="Twitter Demo" onclick="pageTracker._trackPageview('/outgoing/blog.log2e.com/demos/twitter-flex-json/?referer=http://blog.log2e.com/wp-admin/edit.php');" href="http://blog.log2e.com/demos/twitter-flex-json/" target="_blank">View the demo application.</a></p>
<h3>Security Restrictions</h3>
<p>If you recreate this demo application in FlexBuilder, everything should be working fine as long as you run it from your local machine. If you put the files on your server though, you will be experiencing the &#8220;Security error accessing url&#8221; error. The reason is Twitter&#8217;s cross-domain policy. If you look at <a title="crossdomain.xml" onclick="pageTracker._trackPageview('/outgoing/twitter.com/crossdomain.xml?referer=');pageTracker._trackPageview('/outgoing/twitter.com/crossdomain.xml?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=32&amp;message=4');" href="http://twitter.com/crossdomain.xml" target="_blank">Twitter&#8217;s crossdomain.xml file</a>, you notice that it allows access only from a very few domains.</p>
<p>Here&#8217;s what you have to do to get around this restriction: Replace the URL in line 56 </p>
<p><em>http://twitter.com/statuses/public_timeline.json</em></p>
<p>with a URL that points to a PHP proxy file on your server:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Cache-Control: no-cache, must-revalidate&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">header</span><span class="br0">&#40;</span><span class="st0">&quot;Expires: Mon, 26 Jul 1997 05:00:00 GMT&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$dataUrl</span> <span class="sy0">=</span> <span class="st0">&quot;http://twitter.com/statuses/public_timeline.json?&quot;</span> <span class="sy0">.</span> <span class="kw3">microtime</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">readfile</span><span class="br0">&#40;</span><span class="re1">$dataUrl</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>The PHP script simply reads the data from Twitter and writes it to the output buffer (the file header settings and <code>microtime()</code> are used to prevent caching).</p>
<p>I hope you enjoyed the tutorial. If you have any thoughts or suggestions, feel free to leave a comment below.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/25/twitter-flex-and-json/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager - Introduction</title>
		<link>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/</link>
		<comments>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/#comments</comments>
		<pubDate>Mon, 19 May 2008 09:27:56 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[FlashDevelop]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=29</guid>
		<description><![CDATA[This three-parts tutorial reflects my own learning experience with the PureMVC framework and the PureMVC Startup Manager. It was inspired by Philip Sexton&#8217;s demo Startup as Ordered and is my first attempt on PureMVC. The tutorial&#8217;s goal is to provide beneficial information to other novice PureMVC users who have understood the theory but lack practice.

Here&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>This three-parts tutorial reflects my own learning experience with the <a title="PureMVC" onclick="pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/edit.php');" href="http://www.puremvc.org/" target="_blank">PureMVC framework</a> and the <a title="PureMVC Startup Manager" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29');" href="http://trac.puremvc.org/Utility_AS3_StartupManager" target="_blank">PureMVC Startup Manager</a>. It was inspired by Philip Sexton&#8217;s demo <a title="Startup as Ordered" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=29');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/edit.php');" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank">Startup as Ordered</a> and is my first attempt on PureMVC. The tutorial&#8217;s goal is to provide beneficial information to other novice PureMVC users who have understood the theory but lack practice.<br />
<span id="more-29"></span><br />
Here&#8217;s a short overview of the tutorial&#8217;s content:</p>
<p><a title="Getting Started with the PureMVC Startup Manager - Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">Part 1</a></p>
<ol>
<li>Preparing the Project Space</li>
<li>The Resource Files: styles.css and data.xml</li>
</ol>
<p><a title="Getting Started with the PureMVC Startup Manager - Part 2" href="http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/" target="_self">Part 2</a></p>
<ol>
<li>The StartupMonitorProxy</li>
<li>The StartupResourceProxy</li>
<li>&#8220;Loaded&#8221; and &#8220;Failed&#8221; Notifications</li>
<li>Updating the Project Space</li>
<li>The ApplicationFacade</li>
<li>The StartupCommand</li>
<li>The Resource Proxies</li>
</ol>
<p><a title="Getting Started with the PureMVC Startup Manager - Part 3" href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/" target="_self">Part 3</a></p>
<ol>
<li>Preparing the View</li>
<li>The StageMediator</li>
<li>Testing the Demo</li>
<li>Conclusion</li>
</ol>
<p>I closed the comments sections of the three tutorial parts. If you want to discuss the tutorial please add your comments to this introductory post. You can download the sample files <a href="http://blog.log2e.com/wp-content/uploads/2008/05/puremvc_startup_manager_demo.zip">from here</a> (the ZIP archive includes a FlashDevelop project file). </p>
<p>And now <a title="Getting Started with the PureMVC Startup Manager - Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">let&#8217;s get started&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager - Part 3</title>
		<link>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/</link>
		<comments>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/#comments</comments>
		<pubDate>Mon, 19 May 2008 08:20:58 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
		
		<category><![CDATA[ActionScript]]></category>

		<category><![CDATA[Flash]]></category>

		<category><![CDATA[FlashDevelop]]></category>

		<category><![CDATA[Flex]]></category>

		<category><![CDATA[PureMVC]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=25</guid>
		<description><![CDATA[Preparing the View
We are almost there. In the final step of this tutorial we will be creating a very simple view:

Create a file with the name StageMediator.as in the view folder.
Create a new folder inside the view folder and call it components.
Create two files in the components folder and name them SectionView.as and TitleView.as.


Here&#8217;s an [...]]]></description>
			<content:encoded><![CDATA[<h3>Preparing the View</h3>
<p>We are almost there. In the final step of this tutorial we will be creating a very simple view:</p>
<ol>
<li>Create a file with the name <em>StageMediator.as</em> in the <em>view</em> folder.</li>
<li>Create a new folder inside the <em>view</em> folder and call it <em>components</em>.</li>
<li>Create two files in the <em>components</em> folder and name them <em>SectionView.as</em> and <em>TitleView.as</em>.</li>
</ol>
<p><span id="more-25"></span><br />
Here&#8217;s an updated screenshot of the project panel:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_3.gif" alt="Project Panel" width="426" height="481" /></p>
<p>Both view components are not PureMVC-specific. Their only purpose is to display the CSS-formatted content from the XML file. The code of the view components is shown here without any comments.</p>
<p><em>TitleView</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="me1">Sprite</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">StyleSheet</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="kw3">text</span>.<span class="me1">TextFieldAutoSize</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> TitleView <span class="kw3">extends</span> Sprite </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _title:<span class="kw3">String</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _css:StyleSheet;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _titleTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw2">function</span> TitleView<span class="br0">&#40;</span> title:<span class="kw3">String</span>, css:StyleSheet <span class="br0">&#41;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_title = title;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_css = css; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField = <span class="kw2">new</span> <span class="kw3">TextField</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">y</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">wordWrap</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">multiline</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_titleTextField.<span class="kw3">htmlText</span> = <span class="st0">&#39;&lt;p class=&quot;title&quot;&gt;&#39;</span> + _title + <span class="st0">&#39;&lt;/p&gt;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _titleTextField <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p><em>SectionView</em></p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</s