<?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; PureMVC</title>
	<atom:link href="http://blog.log2e.com/tag/puremvc/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.log2e.com</link>
	<description>Tutorials and Code Snippets</description>
	<lastBuildDate>Mon, 01 Jun 2009 13:05:31 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Handling FlashVars in PureMVC</title>
		<link>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/</link>
		<comments>http://blog.log2e.com/2008/08/13/handling-flashvars-in-puremvc/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 18:09:59 +0000</pubDate>
		<dc:creator>Stefan Schmalhaus</dc:creator>
				<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[FlashDevelop]]></category>
		<category><![CDATA[PureMVC]]></category>
		<category><![CDATA[FlashVars]]></category>

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

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

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


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