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

<channel>
	<title>blog.log2e.com &#187; Flash</title>
	<atom:link href="http://blog.log2e.com/category/flash/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.log2e.com</link>
	<description>Tutorials and Code Snippets</description>
	<lastBuildDate>Tue, 25 May 2010 12:47:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Utilizing the Zend AMF Server Inside a Zend Controller</title>
		<link>http://blog.log2e.com/2008/12/14/utilizing-the-zend-amf-server-inside-a-zend-controller/</link>
		<comments>http://blog.log2e.com/2008/12/14/utilizing-the-zend-amf-server-inside-a-zend-controller/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 00:39:02 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[AMFPHP]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Zend Amf]]></category>
		<category><![CDATA[Zend]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=199</guid>
		<description><![CDATA[Many tutorials suggest that you set up the Zend AMF server directly in the bootstrap or index.php file. But what if you want to build a hybrid application with both Flex and HTML interfaces? In this case it&#8217;s better to let the bootstrap file do its usual job of application dispatching, and to make the [...]]]></description>
			<content:encoded><![CDATA[<p>Many tutorials suggest that you set up the Zend AMF server directly in the bootstrap or <em>index.php</em> file. But what if you want to build a hybrid application with both Flex and HTML interfaces? In this case it&#8217;s better to let the bootstrap file do its usual job of application dispatching, and to make the AMF gateway a controller.</p>
<p><span id="more-199"></span></p>
<h3>Introducing the Gateway Controller</h3>
<p>Setting up a Zend AMF server inside a Zend controller is pretty easy:</p>
<div class="geshi no php">
<div class="head">&lt;?php</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> GatewayController <span class="kw2">extends</span> Zend_Controller_Action </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> indexAction<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">$this</span><span class="sy0">-&gt;</span><span class="me1">getHelper</span><span class="br0">&#40;</span><span class="st0">&#39;ViewRenderer&#39;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">setNoRender</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <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">&nbsp; &nbsp; &nbsp; <span class="re1">$server</span><span class="sy0">-&gt;</span><span class="me1">addDirectory</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;/../services/&#39;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <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> &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>Since we do not want to output any visible content we disable the view renderer (otherwise the action controller will look for a view script in a subdirectory named after the controller). The endpoint URI of our AMF server gateway is now something like <em>http://www.mydomain.com/gateway/</em>, and doesn&#8217;t interfere with our other controllers. By calling the <code>addDirectory()</code> method we tell the server where to look for the services. We only need to provide a base directory here. If we set up our remote objects in Flex with full namespaces the AMF server is able to resolve the dot syntax into the appropriate path. </p>
<p>For example, the dot syntax in the source attribute of this remote object</p>
<p><code>&lt;mx:RemoteObject id="articlesRO" showBusyCursor="true" source="com.xeladon.cms.ArticlesService" destination="zend"/&gt;</code></p>
<p>will be transformed into the path <code>com/xeladon/cms/ArticlesService</code>. Please note that in this setup there is no need for explicitly propagating each service class to the server with the <code>setClass()</code> method. For more information on the different approaches (<code>addDirectory()</code> vs. <code>setClass()</code>) please refer to Wade Arnold&#8217;s blog post on <a href="http://wadearnold.com/blog/?p=103" target="_blank" onclick="pageTracker._trackPageview('/outgoing/wadearnold.com/blog/?p=103&amp;referer=');">Lazy Loading Classes</a>. </p>
<h3>Organizing Value Objects with Namespaces</h3>
<p>Now let&#8217;s take this one step further. As a long-time AMFPHP user, I have gotten in the habit of organizing my value objects with namespaces. I usually put my VOs in a folder below the service classes:</p>
<p><a href="http://blog.log2e.com/wp-content/uploads/2008/12/zend_amf_controller_setup.gif"><img class="alignnone size-medium wp-image-120" title="Zend Framework Folder Structure" src="http://blog.log2e.com/wp-content/uploads/2008/12/zend_amf_controller_setup.gif" alt="" width="280" height="434" /></a></p>
<p>We can still do this with Zend but we have to make sure that Zend Loader is able to find the VO classes. I suggest adding the path to the include path in the <em>index.php</em> file:</p>
<div class="geshi no 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;/models/&#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/com/xeladon/cms/vo/&#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">&quot;Zend/Loader.php&quot;</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>
</ol>
</div>
<h3>Adding More Functionality</h3>
<p>Based on the above setup, we can easily add more functionaliy to the bootstrap file without worrying about the AMF server gateway. We would probably want to make use of <code>Zend_Config</code> for configuring the application, and <code>Zend_Db</code> for managing database interactions. By adding a few more lines of code to the bootstrap file, these functions become automatically available to the AMF service classes. </p>
<p>Let&#8217;s assume we set up a database adapter in the bootstrap file. This allows us to write very clean code inside the service classes. The following code is just an example (where <code>ArticleVO</code> is a typical value object, and <code>Articles</code> is supposed to be a Zend model class that extends <code>Zend_Db_Table</code>):</p>
<div class="geshi no php">
<div class="head">&lt;?php</div>
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> ArticlesService</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">function</span> getArticles<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">$articles</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; &nbsp; &nbsp; <span class="re1">$table</span> <span class="sy0">=</span> <span class="kw2">new</span> Articles<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> &nbsp; &nbsp; &nbsp; &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></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$article</span> <span class="sy0">=</span> <span class="kw2">new</span> ArticleVO<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">$article</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">$article</span><span class="sy0">-&gt;</span><span class="me1">author</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">author</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$article</span><span class="sy0">-&gt;</span><span class="me1">title</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">title</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$article</span><span class="sy0">-&gt;</span><span class="me1">teaser</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">teaser</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$article</span><span class="sy0">-&gt;</span><span class="me1">body</span> <span class="sy0">=</span> <span class="re1">$row</span><span class="sy0">-&gt;</span><span class="me1">body</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">$articles</span><span class="sy0">,</span> <span class="re1">$article</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> &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$articles</span><span class="sy0">;</span> &nbsp; &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>
<h3>Summary</h3>
<p>What do we gain with all this? </p>
<ol>
<li>We keep things organized and can rely on the same structures (packages, folders, namespaces) in both ActionScript and PHP.</li>
<li>We can use other powerful features of the Zend framework for the application&#8217;s server-side logic.</li>
<li>We have the flexibility of adding Flex/Flash and HTML interfaces to the same core application whenever and whereever needed.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/12/14/utilizing-the-zend-amf-server-inside-a-zend-controller/feed/</wfw:commentRss>
		<slash:comments>36</slash:comments>
		</item>
		<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 &#8211; 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>
		<slash:comments>18</slash:comments>
		</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 &#8211; 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 &#8211; 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 &#8211; 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>&#8216;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>
		<slash:comments>11</slash:comments>
		</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 [...]]]></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>&#8216;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>&#8216;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>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>1, true, yes, y, on? &#8211; 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 [...]]]></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>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; 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. [...]]]></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>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; 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 [...]]]></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</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; &nbsp;<span class="kw3">import</span> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</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> SectionView <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> _sectionVO:SectionVO;</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> _labelTextField:<span class="kw3">TextField</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _contentTextField:<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> SectionView<span class="br0">&#40;</span> sectionVO:SectionVO, 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;_sectionVO = sectionVO;</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;_labelTextField = <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;_labelTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">y</span> = <span class="nu0">60</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">wordWrap</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">multiline</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_labelTextField.<span class="kw3">htmlText</span> = <span class="st0">&#39;&lt;p class=&quot;label&quot;&gt;&#39;</span> + _sectionVO.<span class="me1">label</span> + <span class="st0">&#39;&lt;/p&gt;&#39;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField = <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;_contentTextField.<span class="kw3">autoSize</span> = TextFieldAutoSize.<span class="kw3">LEFT</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">x</span> = <span class="nu0">20</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">y</span> = <span class="nu0">90</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">width</span> = <span class="nu0">350</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">wordWrap</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">multiline</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="me1">styleSheet</span> = _css;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_contentTextField.<span class="kw3">htmlText</span> = _sectionVO.<span class="me1">content</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _labelTextField <span class="br0">&#41;</span>; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;addChild<span class="br0">&#40;</span> _contentTextField <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>
<h3>The <em>StageMediator</em></h3>
<p>An instance of the <em>StageMediator</em> class has already been created and registered with the application inside the <em>StartupCommand</em> (<a title="Part 2" href="http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/" target="_self">see part 2</a>):</p>
<div class="geshi actionscript">
<ol start="19">
<li class="li1">
<div class="de1">&#8230;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="kw3">stage</span>:<span class="kw3">Stage</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">facade.<span class="me1">registerMediator</span><span class="br0">&#40;</span> <span class="kw2">new</span> StageMediator<span class="br0">&#40;</span> <span class="kw3">stage</span> <span class="br0">&#41;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&#8230;</div>
</li>
</ol>
</div>
<p>The role of the <em>StageMediator</em> is to initialize the view once all resources have been loaded successfully. In a real-world project you would probably want to display some state information on the loading progress before creating the main view. To simplify things, we will be sending this information to the output panel using <code>trace()</code>. </p>
<p>In our sample project the <em>StageMediator</em> not only declares an interest in the &#8220;Loaded&#8221; and &#8220;Failed&#8221; notifications for each resource, it also listens to various other notifications that are automatically sent by the monitor. </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> </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">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</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">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span>.<span class="me1">TitleView</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">Stage</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">IMediator</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">mediator</span>.<span class="me1">Mediator</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">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupMonitorProxy</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">puremvcdemo</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">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">StyleSheetProxy</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">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">SiteDataProxy</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">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">components</span>.<span class="me1">SectionView</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> StageMediator <span class="kw3">extends</span> Mediator <span class="kw3">implements</span> IMediator </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;StageMediator&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _styleSheetProxy:StyleSheetProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _siteDataProxy:SiteDataProxy;</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> StageMediator<span class="br0">&#40;</span> viewComponent:<span class="kw3">Object</span> <span class="br0">&#41;</span> </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="kw3">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</span>, viewComponent <span class="br0">&#41;</span>; &nbsp; &nbsp; &nbsp; &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; override <span class="kw3">public</span> <span class="kw2">function</span> listNotificationInterests<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Array</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> &nbsp;<span class="br0">&#91;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_PROGRESS</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOAD_RESOURCE_TIMED_OUT</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_COMPLETE</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOADING_FINISHED_INCOMPLETE</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">CALL_OUT_OF_SYNC_IGNORED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;StartupMonitorProxy.<span class="me1">LOAD_RESOURCES_REJECTED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">STYLE_SHEET_FAILED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ApplicationFacade.<span class="me1">SITE_DATA_FAILED</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</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; override <span class="kw3">public</span> <span class="kw2">function</span> handleNotification<span class="br0">&#40;</span> note:INotification <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="kw1">switch</span> <span class="br0">&#40;</span> note.<span class="me1">getName</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">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading StyleSheet&#8230;&quot;</span> <span class="br0">&#41;</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="kw1">case</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>: </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;StyleSheet Loaded&quot;</span> <span class="br0">&#41;</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="kw1">case</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADING</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Site Data&#8230;&quot;</span> <span class="br0">&#41;</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="kw1">case</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>: </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Site Data Loaded&quot;</span> <span class="br0">&#41;</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">LOAD_RESOURCES_REJECTED</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> StartupMonitorProxy.<span class="me1">CALL_OUT_OF_SYNC_IGNORED</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Abnormal State, Abort&quot;</span> <span class="br0">&#41;</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="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_PROGRESS</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> perc:<span class="kw3">Number</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Number</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Progress: &quot;</span> + perc + <span class="st0">&quot;%&quot;</span> <span class="br0">&#41;</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="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_COMPLETE</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;&gt;&gt;&gt; Loading Complete&quot;</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;initializeView<span class="br0">&#40;</span><span class="br0">&#41;</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="kw1">case</span> StartupMonitorProxy.<span class="me1">LOADING_FINISHED_INCOMPLETE</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">trace</span><span class="br0">&#40;</span> <span class="st0">&quot;Loading Finished Incomplete&quot;</span> <span class="br0">&#41;</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></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> initializeView<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;_styleSheetProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> StyleSheetProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as StyleSheetProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_siteDataProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> SiteDataProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as SiteDataProxy;</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="kw2">var</span> titleView:TitleView = <span class="kw2">new</span> TitleView<span class="br0">&#40;</span> _siteDataProxy.<span class="me1">title</span>, _styleSheetProxy.<span class="me1">css</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span> titleView <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="kw2">var</span> sectionVO:SectionVO = _siteDataProxy.<span class="me1">sections</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> sectionView:SectionView = <span class="kw2">new</span> SectionView<span class="br0">&#40;</span> sectionVO, _styleSheetProxy.<span class="me1">css</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">stage</span>.<span class="me1">addChild</span><span class="br0">&#40;</span> sectionView <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> <span class="kw3">stage</span><span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Stage</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> viewComponent as <span class="kw3">Stage</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><strong>Lines 29-34</strong>: These notifications are generated by the monitor. For more details please refer to the <a title="StartupMonitorProxy API Docs" onclick="pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/?p=25&#038;preview=true');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');" href="http://puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html" target="_blank">StartupMonitorProxy API documentation</a>.</p>
<p><strong>Lines 35-40</strong>: These notifications are generated inside the resource proxies.</p>
<p><strong>Line 71</strong>: The main view is only initialized if all resources have been loaded. </p>
<p>And, finally, here&#8217;s the class that starts it all (<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> com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">ApplicationFacade</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">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;</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> </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>; &nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &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">this</span>.<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;</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>Testing the Demo</h3>
<p>If you run our sample app, you should see three textfields that display the content from the XML file, all nicely formatted:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_demo_screenshot.gif" alt="Project Panel" width="441" height="363" /></p>
<p>The output panel should display the following lines (don&#8217;t be confused by the fact that the &#8220;Site Data Loaded&#8221; message is spit out after the &#8220;>>> Loading Complete&#8221; message):<br />
<code><br />
Loading StyleSheet...<br />
Loading Progress: 50%<br />
Loading Site Data...<br />
StyleSheet Loaded<br />
Loading Progress: 100%<br />
>>> Loading Complete<br />
Site Data Loaded<br />
</code></p>
<p>Now, in order to test that the Startup Manager is working properly, you can, for example, rename one of the resource files (<em>styles.css</em>, <em>data.xml</em>). In either case the utility should display a &#8220;Loading Finished Incomplete&#8221; message.</p>
<h3>Conclusion</h3>
<p>I hope this three-parts tutorial helped you to use the PureMVC Startup Manager in your own PureMVC projects. This utility is an excellent addition to the PureMVC framework, it&#8217;s very flexible and can greatly support you to organize the loading of resources and to correctly handle errors that might occur during startup.</p>
<hr />
<em>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). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Part 2</title>
		<link>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/</link>
		<comments>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/#comments</comments>
		<pubDate>Sat, 17 May 2008 10:27:47 +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=22</guid>
		<description><![CDATA[The StartupMonitorProxy A PureMVC-based application typically has a startup command that instantiates some basic proxies and mediators. In our sample project we want to load a CSS stylesheet and an XML file with content before allowing any user interaction (see part 1). The important thing here is to make sure that everything gets loaded in [...]]]></description>
			<content:encoded><![CDATA[<h3>The <em>StartupMonitorProxy</em></h3>
<p>A PureMVC-based application typically has a startup command that instantiates some basic proxies and mediators. In our sample project we want to load a CSS stylesheet and an XML file with content before allowing any user interaction (<a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">see part 1</a>). The important thing here is to make sure that everything gets loaded in the proper order and is fully loaded before it is accessed. Here is where the <code>StartupMonitorProxy</code> steps in. This class is at the core of the Startup Manager utility.<br />
<span id="more-22"></span><br />
The <code>StartupMonitorProxy</code> takes care of how the resource loading should be sequenced so that dependent resources are loaded in correct order. It also keeps track of the progress of the resource loading, and it knows when the resource loading is complete. The way you use the <code>StartupMonitorProxy</code> is pretty straightforward:</p>
<ol>
<li>A single instance of the <code>StartupMonitorProxy</code> is registered which is usually referred to as the monitor.</li>
<li>Each startup resource is registered with the monitor, using the <code>addResource()</code> method.</li>
<li>The loading process is started by calling the monitor&#8217;s <code>loadResources()</code> method.</li>
</ol>
<p>(For a more detailed description please refer to the excellent <a title="StartupMonitorProxy API Docs" onclick="pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');pageTracker._trackPageview('/outgoing/puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=22&amp;message=4');" href="http://puremvc.org/pages/utils/AS3/Utility_AS3_StartupManager/asdoc/org/puremvc/as3/utilities/startupmanager/model/StartupMonitorProxy.html" target="_blank">API documentation</a>.)</p>
<p>Now let&#8217;s take a quick look at the other actors that are needed to make the startup utility work.</p>
<h3>The <em>StartupResourceProxy</em></h3>
<p>For each startup resource the application must instantiate a <code>StartupResourceProxy</code> object. These objects are required only by the utility and must not be confused with the normal resource proxies that represent the data carrier objects of the model. The regular proxies are instantiated and registered with the application first. After that the <code>StartupResourceProxy</code> objects are instantiated, receiving the resource proxy instance and a separate startup resource name. The two proxy types are like twins, but they live in different worlds. We will shortly see what this looks like in code.</p>
<h3>&#8220;Loaded&#8221; and &#8220;Failed&#8221; Notifications</h3>
<p>In order to inform the monitor that a resource has been loaded successfully or that the resource load has failed, the application must register the utility commands <code>StartupResourceLoadedCommand</code> and <code>StartupResourceFailedCommand</code>. These commands are responsible for sending &#8220;Loaded&#8221; and &#8220;Failed&#8221; notifications to the monitor whereby the notification body identifies the particular resource.</p>
<h3>Updating the Project Space</h3>
<p>Before we continue with the actual ActionScript code, let&#8217;s create some more class files in our project space. </p>
<ol>
<li>Create a file with the name <em>StartupCommand.as</em> in the <em>controller</em> folder.</li>
<li>Create three new files in the <em>model</em> folder and name them <em>EntityProxy.as</em>, <em>SiteDataProxy.as</em>, <em>StyleSheetProxy.as</em>.</li>
<li>Create a new folder <em>vo</em> under the <em>model</em> folder.</li>
<li>Create a file with the name <em>SectionVO</em> in the <em>vo</em> folder.</li>
</ol>
<p>Your project panel should look like this now:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_2.gif" alt="Project Space" width="426" height="433" /></p>
<h3>The <em>ApplicationFacade</em></h3>
<p>We are starting with the <em>ApplicationFacade</em> class (if you followed <a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_blank">part 1</a> of this tutorial you can paste the code below into the already existing empty <em>ApplicationFacade.as</em> file). It pretty much looks like a typical PureMVC facade:</p>
<div class="geshi actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</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> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">controller</span>.<span class="me1">StartupResourceLoadedCommand</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">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">controller</span>.<span class="me1">StartupResourceFailedCommand</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">puremvcdemo</span>.<span class="me1">controller</span>.<span class="me1">StartupCommand</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> 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 STARTUP:<span class="kw3">String</span> = <span class="st0">&quot;startup&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_LOADING:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetLoading&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_LOADED:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetLoaded&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const STYLE_SHEET_FAILED:<span class="kw3">String</span> = <span class="st0">&quot;styleSheetFailed&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_LOADING:<span class="kw3">String</span> = <span class="st0">&quot;siteDataLoading&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_LOADED:<span class="kw3">String</span> = <span class="st0">&quot;siteDataLoaded&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SITE_DATA_FAILED:<span class="kw3">String</span> = <span class="st0">&quot;siteDataFailed&quot;</span>; &nbsp;</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></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;</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>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STARTUP, StartupCommand <span class="br0">&#41;</span>; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STYLE_SHEET_LOADED, StartupResourceLoadedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> SITE_DATA_LOADED, StartupResourceLoadedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> STYLE_SHEET_FAILED, StartupResourceFailedCommand <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;registerCommand<span class="br0">&#40;</span> SITE_DATA_FAILED, StartupResourceFailedCommand <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> <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;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;</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 12-17</strong>: Three notification names are defined for each of both resources, the stylesheet (<code>STYLE_SHEET_LOADING</code>, <code>STYLE_SHEET_LOADED</code>, <code>STYLE_SHEET_FAILED</code>) and the site data (<code>SITE_DATA_LOADING</code>, <code>SITE_DATA_LOADED</code>, <code>SITE_DATA_FAILED</code>). Please note that the <code>..._LOADING</code> notifications are not necessarily required by the Startup Manager utility, they are just sent as additional information, using the regular PureMVC <code>sendNotification()</code> method every time a load attempt is made.</p>
<p><strong>Lines 33-37</strong>: The before mentioned utility commands are registered. It&#8217;s important that the commands are registered separately with the &#8220;Loaded&#8221; and &#8220;Failed&#8221; notification names for every single startup resource.</p>
<h3>The <em>StartupCommand</em></h3>
<p>The <em>StartupCommand</em> is the place where we define the proxies and instantiate the <em>StartupMonitorProxy</em> object:</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">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">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">SiteDataProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">import</span> flash.<span class="me1">display</span>.<span class="kw3">Stage</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> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupResourceProxy</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">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupMonitorProxy</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">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</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">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">StyleSheetProxy</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">puremvcdemo</span>.<span class="me1">view</span>.<span class="me1">StageMediator</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> StartupCommand <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></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _monitor:StartupMonitorProxy;</div>
</li>
<li class="li1">
<div class="de1">&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></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> <span class="kw3">stage</span>:<span class="kw3">Stage</span> = note.<span class="me1">getBody</span><span class="br0">&#40;</span><span class="br0">&#41;</span> as <span class="kw3">Stage</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerMediator</span><span class="br0">&#40;</span> <span class="kw2">new</span> StageMediator<span class="br0">&#40;</span> <span class="kw3">stage</span> <span class="br0">&#41;</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;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> <span class="kw2">new</span> StartupMonitorProxy<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;_monitor = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> StartupMonitorProxy.<span class="kw3">NAME</span> <span class="br0">&#41;</span> as StartupMonitorProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">defaultTimeout</span> = <span class="nu0">30</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="kw2">var</span> styleSheetProxy:IStartupProxy = <span class="kw2">new</span> StyleSheetProxy<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="kw2">var</span> siteDataProxy:IStartupProxy = <span class="kw2">new</span> SiteDataProxy<span class="br0">&#40;</span><span class="br0">&#41;</span>;</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> styleSheetProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> siteDataProxy <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="kw2">var</span> rStyleSheetProxy:StartupResourceProxy = makeAndRegisterStartupResource<span class="br0">&#40;</span> StyleSheetProxy.<span class="me1">SRNAME</span>, styleSheetProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> rSiteDataProxy:StartupResourceProxy = makeAndRegisterStartupResource<span class="br0">&#40;</span> SiteDataProxy.<span class="me1">SRNAME</span>, siteDataProxy <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;rSiteDataProxy.<span class="me1">requires</span> = <span class="br0">&#91;</span> rStyleSheetProxy <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; &nbsp; &nbsp;_monitor.<span class="me1">loadResources</span><span class="br0">&#40;</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> makeAndRegisterStartupResource<span class="br0">&#40;</span> proxyName:<span class="kw3">String</span>, appResourceProxy:IStartupProxy <span class="br0">&#41;</span>:StartupResourceProxy </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> r:StartupResourceProxy = <span class="kw2">new</span> StartupResourceProxy<span class="br0">&#40;</span> proxyName, appResourceProxy <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;facade.<span class="me1">registerProxy</span><span class="br0">&#40;</span> r <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_monitor.<span class="me1">addResource</span><span class="br0">&#40;</span> r <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> r;</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><strong>Lines 23-24</strong>: An instance of the <code>StartupMonitorProxy</code> class is created and registered with the application. The proxy is assigned to the private property <code>_monitor</code>.</p>
<p><strong>Line 25</strong>: A default timeout is set. You can set individual timeout values for each startup resource. If you do not set timeouts on the resource level the monitor&#8217;s default timeout is used. (For more information on the use of timeouts take a look at the <a title="StartupResourceProxy API" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_blank">StartupResourceProxy API documentation</a>.)</p>
<p><strong>Lines 27-28</strong>: The proxies for the stylesheet and the site data are instantiated. Please note that they are typed as <code>IStartupProxy</code> because the proxies are supposed to implement the <code>IStartupProxy</code> interface in addition to the usual PureMVC <code>IProxy</code> interface. We will return to this topic when we look at the implementation of the proxies.</p>
<p><strong>Lines 30-31</strong>: Like any other PureMVC proxy the <code>styleSheetProxy</code> and the <code>siteDataProxy</code> are registered with the application.</p>
<p><strong>Lines 33-34</strong>: Whereas instances of the <code>StyleSheetProxy</code> and the <code>SiteDataProxy</code> are supposed to be used throughout the whole application, the <code>rStyleSheetProxy</code> and the <code>rSiteDataProxy</code> objects are only needed in the context of the startup utility. </p>
<p><strong>Line 36</strong>: The dependency between the two resources is specified. The site data requires that the stylesheet must be loaded first.</p>
<p><strong>Line 38</strong>: Calling <code>loadResources()</code> on the monitor instance triggers the loading of all startup resources.</p>
<p><strong>Lines 41-47</strong>: This is a helper function that I borrowed from the <a title="Startup As Ordered" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');">Startup As Ordered</a> demo. It creates and registers a <code>StartupResourceProxy</code> object and adds it to the monitor&#8217;s list of resources. </p>
<h3>The Resource Proxies</h3>
<p>Generally speaking, a proxy in a PureMVC-based application manages a piece of the data model. The same proxy might also be responsible for retrieving its data from a remote location during startup. The PureMVC Startup Manager utility supports this pattern by providing the <code>IStartupProxy</code> interface which strictly requires the implementation of a <code>load()</code> method. Any resource proxy that is part of the initial loading process monitored by the utility must implement this interface.</p>
<p>On the other hand, the proxies must work in the usual PureMVC environment where they are supposed to extend the framework&#8217;s <code>Proxy</code> class and to implement the <code>IProxy</code> interface. To make the resource proxies work in both contexts, the utitliy author uses an abstract class that facilitates the cooperation between the Startup Manager and the application. You can find this class in the <a title="Startup As Ordered" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=');">Startup As Ordered</a> demo, the class name is <em>EntityProxy</em>. It extends <code>Proxy</code> and implements <code>IProxy</code> like a normal PureMVC proxy. But this proxy class isn&#8217;t instantiated and registered with the application itself, it only serves as a helper class for the actual resource proxies. The resource proxies extend <code>EntityProxy</code> and implement <code>IStartupProxy</code>. This way they become part of both contexts.</p>
<p>Here&#8217;s the code of the <em>EntityProxy</em> class:</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">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> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">model</span>.<span class="me1">StartupResourceProxy</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">puremvcdemo</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="kw3">public</span> <span class="kw2">class</span> EntityProxy <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="kw2">function</span> EntityProxy<span class="br0">&#40;</span> <span class="kw3">name</span> :<span class="kw3">String</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="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; protected <span class="kw2">function</span> sendLoadedNotification<span class="br0">&#40;</span> noteName:<span class="kw3">String</span>, noteBody:<span class="kw3">String</span>, srName:<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;<span class="kw2">var</span> srProxy:StartupResourceProxy = facade.<span class="me1">retrieveProxy</span><span class="br0">&#40;</span> srName <span class="br0">&#41;</span> as StartupResourceProxy;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="sy0">!</span> srProxy.<span class="me1">isTimedOut</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">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sendNotification<span class="br0">&#40;</span> noteName, noteBody <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; <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><strong>Lines 15-22</strong>: The <code>sendLoadedNotification()</code> method is a helper function that is used by the actual resource proxies to send &#8220;Loaded&#8221; or &#8220;Failed&#8221; notifications. These notifications are only sent if the Startup Manager hasn&#8217;t timed out the resource. In order to get the timeout information, the resource proxy&#8217;s &#8220;twin object&#8221; (<code>srProxy</code>) is retrieved. By the way, accessing this state information is the only reason why the <code>StartupResourceProxy</code> objects have been registered with the application in the <em>StartupCommand</em> class (see above, line 44: <code>facade.registerProxy( r );</code>). The utility itself does not require that they are registered with the PureMVC model.</p>
<p>The resource proxies finally implement the actual loading mechanisms. I hope you remember that the proxies in our sample project are responsible for loading an external CSS stylesheet and an XML file. Here&#8217;s the code of the two proxies. </p>
<p><em>StyleSheetProxy</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">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> 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">URLLoader</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">text</span>.<span class="me1">StyleSheet</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> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</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">puremvcdemo</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">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">EntityProxy</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> StyleSheetProxy <span class="kw3">extends</span> EntityProxy <span class="kw3">implements</span> IStartupProxy</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;StyleSheetProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SRNAME:<span class="kw3">String</span> = <span class="st0">&quot;StyleSheetSRProxy&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> StyleSheetProxy<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">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</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">load</span><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;sendNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADING</span> <span class="br0">&#41;</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> request:URLRequest = <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;styles.css&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:URLLoader = <span class="kw2">new</span> URLLoader<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;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, errorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, loaderCompleteHandler<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;loader.<span class="kw3">load</span><span class="br0">&#40;</span>request<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> loaderCompleteHandler<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="kw3">data</span> = <span class="kw2">new</span> StyleSheet<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="kw3">data</span>.<span class="kw3">parseCSS</span><span class="br0">&#40;</span> URLLoader<span class="br0">&#40;</span>event.<span class="kw3">target</span><span class="br0">&#41;</span>.<span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_LOADED</span>, <span class="kw3">NAME</span>, SRNAME <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> errorHandler<span class="br0">&#40;</span><span class="kw3">e</span>:IOErrorEvent<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;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">STYLE_SHEET_FAILED</span>, <span class="kw3">NAME</span>, SRNAME <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> css<span class="br0">&#40;</span><span class="br0">&#41;</span>:StyleSheet</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 StyleSheet;</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><strong>Line 16</strong>: The <code>SRNAME</code> constant holds the name of the <code>StartupResourceProxy</code> twin.</p>
<p><strong>Line 40, line 45</strong>: The helper method in the parent <code>EntityProxy</code> class is called to send &#8220;Loaded&#8221;/&#8221;Failed&#8221; notifications.</p>
<p><strong>Lines 48-51</strong>: The getter method returns the internal <code>data</code> property as a typed <code>StyleSheet</code> object.</p>
<p>The <em>SiteDataProxy</em> class works in a similar fashion:</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">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> 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">URLLoader</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> 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> org.<span class="me1">puremvc</span>.<span class="me1">as3</span>.<span class="me1">utilities</span>.<span class="me1">startupmanager</span>.<span class="me1">interfaces</span>.<span class="me1">IStartupProxy</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">puremvcdemo</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">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">EntityProxy</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;iimport com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</span>.<span class="me1">model</span>.<span class="me1">vo</span>.<span class="me1">SectionVO</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> SiteDataProxy <span class="kw3">extends</span> EntityProxy <span class="kw3">implements</span> IStartupProxy</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;SiteDataProxy&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">public</span> <span class="kw3">static</span> const SRNAME:<span class="kw3">String</span> = <span class="st0">&quot;SiteDataSRProxy&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> SiteDataProxy<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">super</span><span class="br0">&#40;</span> <span class="kw3">NAME</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">load</span><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;sendNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADING</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="kw2">var</span> request:URLRequest = <span class="kw2">new</span> URLRequest<span class="br0">&#40;</span><span class="st0">&quot;data.xml&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> loader:URLLoader = <span class="kw2">new</span> URLLoader<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;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>IOErrorEvent.<span class="me1">IO_ERROR</span>, errorHandler<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loader.<span class="me1">addEventListener</span><span class="br0">&#40;</span>Event.<span class="me1">COMPLETE</span>, loaderCompleteHandler<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;loader.<span class="kw3">load</span><span class="br0">&#40;</span>request<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> loaderCompleteHandler<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> &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">var</span> <span class="kw3">xml</span>:<span class="kw3">XML</span> = <span class="kw2">new</span> <span class="kw3">XML</span><span class="br0">&#40;</span> event.<span class="kw3">target</span>.<span class="kw3">data</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">xml</span>.<span class="me1">ignoreWhitespace</span> = <span class="kw2">true</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="kw2">var</span> title:<span class="kw3">String</span> = <span class="kw3">xml</span>.<span class="me1">title</span>.<span class="me1">children</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toXMLString</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="kw2">var</span> sections:<span class="kw3">Array</span> = <span class="kw2">new</span> <span class="kw3">Array</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="kw2">var</span> sectionsXMLList:XMLList = <span class="kw3">xml</span>.<span class="me1">sections</span>.<span class="me1">section</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:uint=<span class="nu0">0</span>; i<span class="sy0">&lt;</span>sectionsXMLList.<span class="kw3">length</span><span class="br0">&#40;</span><span class="br0">&#41;</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="kw2">var</span> section:<span class="kw3">XML</span> = sectionsXMLList<span class="br0">&#91;</span>i<span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> id:uint = section.<span class="sy0">@</span>id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> sectionVO:SectionVO = <span class="kw2">new</span> SectionVO<span class="br0">&#40;</span> id, section.<span class="sy0">@</span>label, section.<span class="me1">content</span> <span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sections.<span class="kw3">push</span><span class="br0">&#40;</span> sectionVO <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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span> = <span class="kw2">new</span> <span class="kw3">Object</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="kw3">data</span>.<span class="me1">title</span> = title;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw3">data</span>.<span class="me1">sections</span> = sections;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_LOADED</span>, <span class="kw3">NAME</span>, SRNAME <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> errorHandler<span class="br0">&#40;</span><span class="kw3">e</span>:IOErrorEvent<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;sendLoadedNotification<span class="br0">&#40;</span> ApplicationFacade.<span class="me1">SITE_DATA_FAILED</span>, <span class="kw3">NAME</span>, SRNAME <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> title<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>.<span class="me1">title</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; </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> sections<span class="br0">&#40;</span><span class="br0">&#41;</span>:<span class="kw3">Array</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>.<span class="me1">sections</span> as <span class="kw3">Array</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><strong>Lines 38-51</strong>: Please refer to the <em>data.xml</em> file described in <a title="Part 1" href="http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/" target="_self">part 1</a> of this tutorial.</p>
<p><strong>Line 49</strong>: The <em>SiteDataProxy</em> class makes use of a simple value object class (<em>SectionVO</em>):</p>
<div class="geshi no actionscript">
<ol>
<li class="li1">
<div class="de1">package com.<span class="kw3">log2e</span>.<span class="me1">puremvcdemo</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;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">public</span> <span class="kw2">class</span> SectionVO</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> _id:uint;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">private</span> <span class="kw2">var</span> _label:<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> _content:<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; <span class="kw3">public</span> <span class="kw2">function</span> SectionVO<span class="br0">&#40;</span> id:uint, label:<span class="kw3">String</span>, content:<span class="kw3">String</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;_id = id;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_label = label;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;_content = content;</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> id<span class="br0">&#40;</span><span class="br0">&#41;</span>:uint</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> _id;</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> label<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> _label;</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> content<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> _content;</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>In the <a title="Part 3" href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-part-3/" target="_self">third and last part</a> of this tutorial we will be creating a rudimentary view to test our efforts.</p>
<hr />
<em>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). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Getting Started with the PureMVC Startup Manager &#8211; Part 1</title>
		<link>http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/</link>
		<comments>http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/#comments</comments>
		<pubDate>Fri, 16 May 2008 14:04:50 +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>
		<category><![CDATA[Cairngorm]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=19</guid>
		<description><![CDATA[Coming from a Flex/Cairngorm background, I&#8217;ve always missed a utility that takes care of the asynchronous loading of resources during application startup. Being too lazy to write one myself, I usually chain together several Cairngorm commands for loading configuration settings, stylesheets, language resources and initial data from a database. Each command is only executed if [...]]]></description>
			<content:encoded><![CDATA[<p>Coming from a Flex/Cairngorm background, I&#8217;ve always missed a utility that takes care of the asynchronous loading of resources during application startup. Being too lazy to write one myself, I usually chain together several Cairngorm commands for loading configuration settings, stylesheets, language resources and initial data from a database. Each command is only executed if the predecessor task has been finished successfully. The user interface isn&#8217;t initialized until the whole chain is completed, otherwise an error message is generated and the application won&#8217;t start. It&#8217;s not elegant but it works.</p>
<p>When I started to learn <a title="PureMVC" onclick="pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.puremvc.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://www.puremvc.org/" target="_blank">PureMVC</a> (and I&#8217;m still learning), I was happy to discover that the AS3 version is accompanied by a <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/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&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=19&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=19&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=19&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=19&amp;message=4');" href="http://trac.puremvc.org/Utility_AS3_StartupManager" target="_blank">Startup Manager</a>. This utility isn&#8217;t part of the core PureMVC framework and has to be downloaded and installed separately, but it nicely integrates with the &#8220;PureMVC way of things&#8221;.<br />
<span id="more-19"></span><br />
There&#8217;s a very well-documented sample project (<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/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&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=19&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=19&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=19&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=19&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=19');" href="http://trac.puremvc.org/Demo_AS3_Flex_StartupAsOrdered" target="_blank">Startup as Ordered</a>) from the author of the utility, Philip Sexton. After exploring the source code of this project, I thought I give it a try and set up my own little startup sequence. Philip&#8217;s sample just simulates the asynchronous loading with the help of another utility he wrote (<a title="Asynchronous Stub" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_AsyncStub?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19');" href="http://trac.puremvc.org/Utility_AS3_AsyncStub" target="_blank">Asynchronous Stub</a>), so I decided to take a more real-world scenario where an external stylesheet and an XML file are loaded before the user interface is created. Once you have understood the basic setup, it&#8217;s no big deal to extend the startup sequence by, for example, making asynchronous calls to remote services.</p>
<h3>Preparing the Project Space</h3>
<p>Loading a stylesheet and some initial data is a common task in both Flash and Flex projects. So my approach in this tutorial is to set up a pure AS3 project that can easily be adjusted to work in both worlds. This also means that you can use whatever IDE you prefer for ActionScript coding. I&#8217;m using <a title="FlashDevelop" onclick="pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/www.flashdevelop.org/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://www.flashdevelop.org/" target="_blank">FlashDevelop</a> along with the Flex 3 SDK but the project space would look very similar in FlexBuilder.</p>
<p>If you haven&#8217;t already done so, download the <a title="PureMVC Download Page" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/PureMVC_AS3/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://trac.puremvc.org/PureMVC_AS3/wiki/Downloads" target="_blank">PureMVC framework</a> and the <a title="Startup Manager Download Page" onclick="pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');pageTracker._trackPageview('/outgoing/trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=19&amp;message=4');" href="http://trac.puremvc.org/Utility_AS3_StartupManager/wiki/Downloads" target="_blank">Startup Manager</a>. Make sure that both libraries are available to your project. Either copy the SWC files in your project space or add their locations to the classpath. On the top level, your project should contain the three folders <em>bin</em>, <em>lib</em> and <em>src</em>. For my purposes, I placed copies of the SWC files in the <em>lib</em> folder so that I can provide a working FlashDevelop project for download that includes all resources.</p>
<p>Choose a package name (I&#8217;m going to use <em>com.log2e.puremvcdemo</em>) and create the usual <em>model</em>, <em>view</em>, <em>controller</em> folders.  Also, in addtion to your document class (<em>Main.as</em>) create an empty file with the name <em>ApplicationFacade.as</em> in the <em>puremvcdemo</em> folder. You project panel should look similar to this now:</p>
<p><img style="border: 0pt none; margin: 0px;" src="http://blog.log2e.com/wp-content/uploads/2008/05/startup_manager_project_space_1.gif" alt="Project Panel" width="426" height="292" /></p>
<h3>The Resource Files: <em>styles.css</em> and <em>data.xml</em></h3>
<p>Inside the <em>bin</em> folder create two text files with the names <em>styles.css</em> and <em>data.xml</em>. These are the resources that we will be loading during startup. The stylesheet is pretty simple:</p>
<div class="geshi no css">
<ol>
<li class="li1">
<div class="de1"><span class="re1">.title</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-size<span class="re2">:<span class="re3">16px</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-family<span class="re2">:Arial</span>,Helvetica,<span class="kw2">sans-serif</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-weight<span class="re2">:bold</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">color</span><span class="sy0">:</span><span class="re0">#<span class="nu0">990000</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">.label</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-size<span class="re2">:<span class="re3">14px</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-family<span class="re2">:Arial</span>,Helvetica,<span class="kw2">sans-serif</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-weight<span class="re2">:bold</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">color</span><span class="sy0">:</span><span class="re0">#<span class="nu0">999999</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">p <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-size<span class="re2">:<span class="re3">12px</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;font-family<span class="re2">:Arial</span>,Helvetica,<span class="kw2">sans-serif</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">color</span><span class="sy0">:</span><span class="re0">#<span class="nu0">333333</span></span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The XML file contains some sample content:</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;site<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Welcome to the PureMVC Startup Manager Demo!<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;sections<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;section</span> <span class="re0">id</span>=<span class="st0">&quot;1&quot;</span> <span class="re0">label</span>=<span class="st0">&quot;Home&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;content<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2">&lt;![CDATA[&lt;p&gt;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Quisque consequat. Nam ut leo &lt;i&gt;vitae metus vehicula&lt;/i&gt; posuere. Nullam nunc. Vivamus nec ligula vel tortor molestie elementum. Integer faucibus elementum dolor. Nulla lorem. Quisque varius sodales mi. Nam tincidunt pede. Nam scelerisque nulla a nisl.&lt;/p&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc2">&lt;p&gt;Vivamus nec ligula vel tortor molestie elementum. Nam ut leo vitae metus vehicula posuere. Nullam nunc. Vivamus nec ligula vel &lt;b&gt;tortor molestie elementum&lt;/b&gt;. Integer faucibus elementum dolor. Nulla lorem. Quisque varius sodales mi. Nam tincidunt pede. Nam scelerisque nulla a nisl. Quisque consequat.&lt;/p&gt;]]&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/content<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/section<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/sections<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/site<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Important note: Make sure that the HTML-coded content inside the CDATA block is only composed of HTML tags that can be interpreted by HTML-enabled textfields in Flash/Flex.</p>
<p>In the <a title="Part 2" href="http://blog.log2e.com/2008/05/17/getting-started-with-the-puremvc-startup-manager-part-2/" target="_self">next part</a> of this tutorial we will be taking a closer look at the inner working of the Startup Manager.</p>
<hr />
<em>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). If you want to comment on this tutorial please post in the comments section at the end of the <a href="http://blog.log2e.com/2008/05/19/getting-started-with-the-puremvc-startup-manager-introduction/" target="_self">introductory post</a>.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/16/getting-started-with-the-puremvc-startup-manager-part-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Quick Tip &#8211; Where are my Easing Equations?</title>
		<link>http://blog.log2e.com/2008/05/14/quick-tip-easing-equations/</link>
		<comments>http://blog.log2e.com/2008/05/14/quick-tip-easing-equations/#comments</comments>
		<pubDate>Wed, 14 May 2008 08:52:21 +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[TweenLite]]></category>
		<category><![CDATA[TweenMax]]></category>

		<guid isPermaLink="false">http://blog.log2e.com/?p=18</guid>
		<description><![CDATA[Tutorials on TweenLite or TweenMax often rely on the easing functions that come with the Flash CS3 IDE. These functions are contained in the package fl.motion.easing. All classes under the package name fl are specific to Flash CS3 and are not available in the free Flex 3 SDK. If you, for example, use FlashDevelop with [...]]]></description>
			<content:encoded><![CDATA[<p>Tutorials on <a title="TweenLite" onclick="pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=http://blog.log2e.com/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=18&amp;message=4');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenliteas3/?referer=http://blog.log2e.com/wp-admin/post-new.php');" href="http://blog.greensock.com/tweenliteas3/" target="_blank">TweenLite</a> or <a title="TweenMax" onclick="pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=http://blog.log2e.com/wp-admin/edit.php');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=http://blog.log2e.com/wp-admin/post.php?action=edit&amp;post=18&amp;message=4');pageTracker._trackPageview('/outgoing/blog.greensock.com/tweenmaxas3/?referer=http://blog.log2e.com/wp-admin/post-new.php');" href="http://blog.greensock.com/tweenmaxas3/" target="_blank">TweenMax</a> often rely on the easing functions that come with the Flash CS3 IDE. These functions are contained in the package <em>fl.motion.easing</em>. All classes under the package name <em>fl</em> are specific to Flash CS3 and are not available in the free Flex 3 SDK. If you, for example, use FlashDevelop with the Flex 3 SDK you have to import your easing functions from the package <em>mx.effects.easing</em>. So any time you see an import statement like this</p>
<p><code>import fl.motion.easing.*;</code></p>
<p>you should be able to replace it with</p>
<p><code>import mx.effects.easing.*;</code></p>
<p>and get the same functionality.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.log2e.com/2008/05/14/quick-tip-easing-equations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

