But PureMVC mediators play the role of middlemen between the UI components and
proxy objects (not controllers), and the need for these middlemen is questionable. In
our opinion, it would be cleaner to introduce a value object and pass it directly (in the
body of 
Notification
) between the view and its controller rather than having the me-
diator reaching out to internals of both the proxy and the view. But it is what it is, and
the 
EmployeeList
view interacts with the 
EmployeeListMediator
, and the latter deals with
the controller’s notifications.
In Example 1-21, note the method 
listNotificationInterests()
, where you, the de-
veloper, have to list all events this mediator is interested in (similar to a subscription
in messaging). The method 
handleNotification()
will process notifications when they
arrive.
Example 1-21. EmployeeListMediator.as
/*
PureMVC AS3 Demo - Flex CafeTownsend
Copyright (c) 2007-08 Michael Ramirez <michael.ramirez@puremvc.org>
Parts Copyright (c) 2005-07 Adobe Systems, Inc.
Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.as3.demos.flex.cafetownsend.view{
import flash.events.Event;
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3.patterns.mediator.Mediator;
import org.puremvc.as3.demos.flex.cafetownsend.ApplicationFacade;
import org.puremvc.as3.demos.flex.cafetownsend.view.components.*;
import org.puremvc.as3.demos.flex.cafetownsend.model.EmployeeProxy;
/**
* A Mediator for interacting with the EmployeeList component
*/
public class EmployeeListMediator extends Mediator{
public static const NAME:String = "EmployeeListMediator";
public function EmployeeListMediator( viewComponent:Object ){
// pass the viewComponent to the superclass where
// it will be stored in the inherited viewComponent property
super( NAME, viewComponent );
employeeProxy = EmployeeProxy( facade.retrieveProxy(
EmployeeProxy.NAME ) );
employeeList.addEventListener( EmployeeList.APP_LOGOUT, logout );
employeeList.addEventListener( EmployeeList.ADD_EMPLOYEE,
addEmployee );
employeeList.addEventListener( EmployeeList.UPDATE_EMPLOYEE,
updateEmployee );
}
/**
* List all notifications this Mediator is interested in.
* Automatically called by the framework when the mediator
* is registered with the view.
PureMVC | | 37
.Pdf to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
changing pdf to jpg on; convert pdf pages to jpg online
.Pdf to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert pdf file to jpg online; convert pdf to jpeg
* @return Array the list of Notification names
*/
override public function listNotificationInterests():Array{
return [ ApplicationFacade.LOAD_EMPLOYEES_SUCCESS,
ApplicationFacade.LOAD_EMPLOYEES_FAILED ];
}
/**
* Handle all notifications this Mediator is interested in.
* <P>
* Called by the framework when a notification is sent that
* this mediator expressed an interest in when registered
* (see <code>listNotificationInterests</code>.</P>
*
* @param INotification a notification
*/
switch ( note.getName() ) {
case ApplicationFacade.LOAD_EMPLOYEES_SUCCESS:
employeeList.employees_li.dataProvider =
employeeProxy.employeeListDP;
break;
case ApplicationFacade.LOAD_EMPLOYEES_FAILED:
employeeList.error.text = employeeProxy.errorStatus;
break;
}
}
/**
* Cast the viewComponent to its actual type.
*
* This is a useful idiom for mediators. The
* PureMVC Mediator class defines a viewComponent
* property of type Object. </P>
*
* @return EmployeeList the viewComponent cast to EmployeeList
*/
protected function get employeeList():EmployeeList{
return viewComponent as EmployeeList;
}
private function logout( event:Event = null ):void{
sendNotification( ApplicationFacade.APP_LOGOUT );
}
private function addEmployee( event:Event = null ):void{
sendNotification( ApplicationFacade.ADD_EMPLOYEE );
}
private function updateEmployee( event:Event = null ):void{
sendNotification( ApplicationFacade.UPDATE_EMPLOYEE,
employeeList.employees_li.selectedItem);
}
private var employeeProxy:EmployeeProxy;
38 | | Chapter 1: Comparing Selected Flex Frameworks
Online Convert Jpeg to PDF file. Best free online export Jpg image
Download Free Trial. Convert a JPG to PDF. Web Security. All your JPG and PDF files will be permanently erased from our servers after one hour.
convert pdf to jpg for online; change pdf to jpg file
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Download Free Trial. Convert a PDF File to JPG. Web Security. Your PDF and JPG files will be deleted from our servers an hour after the conversion.
pdf to jpeg converter; convert pdf pictures to jpg
}
}
The code of 
handleNotification()
directly manipulates the internals of the view com-
ponents (e.g., 
employeeList.employees_li
), which leads to tight coupling between the
mediator and the view. If the next version of the 
employeeList
component will use a
DataGrid
instead of the 
List
component, the mediator’s code has to be refactored, too.
The previous discussion of Example 1-17 did not cover the process of preparing the
view for receiving the events. Handling that process is the branch of code originated
by the following call:
addSubCommand( ViewPrepCommand );
Shown in Example 1-22, the 
ViewPrepCommand
class registers the main application me-
diator (you’d have to write it), and asks the proxy to load the employee list.
Example 1-22. ViewPrepCommand.as
/* PureMVC AS3 Demo - Flex CafeTownsend
Copyright (c) 2007-08 Michael Ramirez <michael.ramirez@puremvc.org>
Parts Copyright (c) 2005-07 Adobe Systems, Inc.
Your reuse is governed by the Creative Commons Attribution 3.0 License
*/
package org.puremvc.as3.demos.flex.cafetownsend.controller{
import org.puremvc.as3.interfaces.*;
import org.puremvc.as3.patterns.command.*;
import org.puremvc.as3.patterns.observer.*;
import org.puremvc.as3.demos.flex.cafetownsend.*;
import org.puremvc.as3.demos.flex.cafetownsend.model.*;
/**
* Prepare the View for use.
* view component was passed on the note body.
* The ApplicationMediator will be created and registered using this
* reference. The ApplicationMediator will then register
* all the Mediators for the components it created.
*/
public class ViewPrepCommand extends SimpleCommand{
override public function execute( note:INotification ) :void{
// Register your ApplicationMediator
// Get the EmployeeProxy
var employeeProxy:EmployeeProxy = facade.retrieveProxy(
EmployeeProxy.NAME ) as EmployeeProxy;
employeeProxy.loadEmployees();
sendNotification( ApplicationFacade.VIEW_EMPLOYEE_LOGIN );
}
}
}
PureMVC | | 39
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
String inputFilePath = @"C:\input.pdf"; String outputFilePath = @"C:\output.jpg"; // Convert PDF to jpg. C# sample code for PDF to jpg image conversion.
change pdf to jpg format; advanced pdf to jpg converter
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. String inputFilePath = @"C:\input.tif"; String outputFilePath = @"C:\output.jpg"; // Convert tiff to jpg.
change pdf to jpg online; convert pdf pages to jpg
This command class issues a request to load employees without even waiting for the
successful logon of the user. At the end of the 
execute()
method, this code sends the
VIEW_EMPLOYEE_LOGIN
notification, which displays the logon view.
For brevity, Example 1-23 does have most of the comments from the code of
ApplicationMediator
. It builds all view components and registers the mediators for each
of them.
Example 1-23. ApplicationMediator.as
/* PureMVC AS3 Demo - Flex CafeTownsend
Copyright (c) 2007-08 Michael Ramirez <michael.ramirez@puremvc.org>
Parts Copyright (c) 2005-07 Adobe Systems, Inc.
package org.puremvc.as3.demos.flex.cafetownsend.view {
public class ApplicationMediator extends Mediator{
public static const NAME:String = "ApplicationMediator";
public static const EMPLOYEE_LOGIN : Number =   0;
public static const EMPLOYEE_LIST : Number =   1;
public static const EMPLOYEE_DETAIL : Number =   2;
public function ApplicationMediator( viewComponent:Object )
{
// pass the viewComponent to the superclass where
// it will be stored in the inherited viewComponent property
super( NAME, viewComponent );
// Create and register Mediators for the Employee
// components that were instantiated by the mxml application
facade.registerMediator( new EmployeeDetailMediator(
app.employeeDetail ) );
facade.registerMediator( new EmployeeListMediator(
app.employeeList ) );
facade.registerMediator( new EmployeeLoginMediator(
app.employeeLogin ) );
// retrieve and cache a reference to frequently accessed proxys
employeeProxy = EmployeeProxy( facade.retrieveProxy(
EmployeeProxy.NAME ) );
}
override public function listNotificationInterests():Array
{
return [ ApplicationFacade.VIEW_EMPLOYEE_LOGIN,
ApplicationFacade.VIEW_EMPLOYEE_LIST,
ApplicationFacade.VIEW_EMPLOYEE_DETAIL,
ApplicationFacade.APP_LOGOUT,
ApplicationFacade.UPDATE_EMPLOYEE
];
}
/**
* Handle all notifications this Mediator is interested in.
40 | | Chapter 1: Comparing Selected Flex Frameworks
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
similar software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
batch pdf to jpg converter; convert pdf images to jpg
JPG to JBIG2 Converter | Convert JPEG to JBIG2, Convert JBIG2 to
Image Converter Pro - JPEG to JBIG2 Converter. Convert JPEG (JPG) Images to, from JBIG2 Images on Windows.
best convert pdf to jpg; batch pdf to jpg
*/
override public function handleNotification( note:INotification
):void{
switch ( note.getName() ){
case ApplicationFacade.VIEW_EMPLOYEE_LOGIN:
app.vwStack.selectedIndex = EMPLOYEE_LOGIN;
break;
case ApplicationFacade.VIEW_EMPLOYEE_LIST:
employeeProxy.employee = null;
app.vwStack.selectedIndex = EMPLOYEE_LIST;
break;
case ApplicationFacade.VIEW_EMPLOYEE_DETAIL:
app.vwStack.selectedIndex = EMPLOYEE_DETAIL;
break;
case ApplicationFacade.APP_LOGOUT:
app.vwStack.selectedIndex = EMPLOYEE_LOGIN;
break;
case ApplicationFacade.UPDATE_EMPLOYEE:
app.vwStack.selectedIndex = EMPLOYEE_DETAIL;
break;
}
}
/**
* Cast the viewComponent to its actual type.
* The PureMVC Mediator class defines a viewComponent
* property of type Object.
*/
protected function get app():CafeTownsend{
return viewComponent as CafeTownsend
}
// Cached references to needed proxies
private var employeeProxy:EmployeeProxy;
private var userProxy:UserProxy;
}
}
The 
ApplicationMediator
is also a central repository of all proxies that know how to
get the data (
EmployeeProxy
and 
UserProxy
in our case). So the 
ViewPrepCommand
creates
an instance of the 
ApplicationMediator
(which creates other mediators and proxies to
be cached), registers it with the facade, and asks the facade for a newly created instance
of the 
EmployeeProxy
, and calls its 
loadEmployees()
method.
If the 
EmployeeProxy
successfully retrieves the employee, it triggers the notification
LOAD_EMPLOYEES_SUCCESS
, which the 
EmployeeMediator
processes, putting the data in the
data provider of the 
EmployeeList
(see Example 1-21 earlier):
case ApplicationFacade.LOAD_EMPLOYEES_SUCCESS:
employeeList.employees_li.dataProvider = employeeProxy.employeeListDP;
The circle is closed. As you can see, the PureMVC way to bring Café Townsend’s em-
ployee list is a lot more complicated than the Cairngorm or Mate way.
Still, if you work with an application built on the PureMVC framework, consider
using a freeware product by Kap IT called PureMVC Console, available at
PureMVC | | 41
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Converter. Convert JPEG (JPG) Images to, from GIF Images on Windows. JPEG to GIF Converter can directly convert GIF files to JPG files.
convert pdf image to jpg; reader pdf to jpeg
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Image Converter Pro - JPEG to DICOM Converter. Convert JPEG (JPG) Images to, from DICOM Images on Windows.
batch convert pdf to jpg online; convert .pdf to .jpg
http://lab.kapit.fr/display/puremvcconsole/PureMVC+Console. This tool comes in
handy if you’ve joined a PureMVC project and need to hit the ground running. This
console allows you to monitor the internal flow of this framework in real time. The
creators of PureMVC Console offer a nice demo of monitoring Café Townsend—check
it out at the website.
The MultiCore version of PureMVC supports modular programming where singletons
are replaced with so-called Multiton Core actors.
We are having difficulty finding reasons for recommending an architectural framework
that requires developers to replace 20 lines of code from Example 1-1 with all the code
shown in Examples 1-15 through 1-23 to achieve the same goal: display the list of
employees from an XML file in a list control.
Report Card: PureMVC
The author of PureMVC wanted to create a framework that could have been ported to
other programming languages, and this approach inadvertently delivers a product that
underutilizes benefits offered by language-specific constructs. Because PureMVC was
not created specifically for Flex, it doesn’t take advantage of the declarative nature of
MXML, which would’ve substantially minimized the amount of handwritten code by
application developers. For the same reason, PureMVC doesn’t use standard Flex
events and data binding. As an old saying goes, “When in Rome, speak Latin.” It can
be rephrased as, “When in Flex, speak MXML and ActionScript.”
The pros are:
• It’s well documented.
• It supports working with Flex modules.
• It’s available for developers who want to use only ActionScript (e.g., Flash pro-
grammers). For Flex programmers, though, that can’t be considered a benefit.
The cons are:
• It’s not a framework written for Flex, and thus does not use features offered by
MXML.
• It has too many layers, which are tightly coupled.
• It requires staffing projects with more senior developers.
• Developers have to write lots of additional classes, which adds to the project
timeline.
• Its standard version is built on singletons, and application code becomes cluttered
by making multiple calls to them.
One of the main Flex selling points is its MXML-to-ActionScript code generator, which
spares application developers from manually writing lots of code. PureMVC doesn’t
42 | | Chapter 1: Comparing Selected Flex Frameworks
use MXML and forces developers to write more code, which makes them less
productive.
PureMVC notifications are more flexible than event maps of Mate, in that the latter
relies on the enabled event bubbling, and if the 
EventMap
object is not located in the
ancestor of the object that triggers the event, it won’t get it. As a workaround, Mate
offers a special 
Dispatcher
class to trigger events, say from a pop-up window that is not
a descendant of an 
Application
object. But in PureMVC, any object can subscribe for
any other object’s notifications regardless of their relations. Also, since the 
Notifica
tion
class already has the property 
body
to carry additional payload, application devel-
opers don’t need to create subclasses for each notification object.
PureMVC has too many layers, dependencies, and singletons, and as a result has a
steeper learning curve than Cairngorm or Mate. Managers on the projects that use
PureMVC would need to hire more experienced developers than managers on projects
using Mate or Cairngorm.
PureMVC Console is a convenient tool allowing you to monitor the
Cairngorm and PureMVC applications; see http://lab.kapit.fr. To mon-
itor the PureMVC version of Café Townsend, click on the image of the
Café at http://lab.kapit.fr/display/puremvcconsole/PureMVC+Console.
PureMVC documentation states, “The PureMVC framework has a very narrow main
goal: to help you separate your application’s coding concerns into three discrete tiers;
Model, View, and Controller.” The framework attempts to achieve this goal by forcing
application developers to write a lot of additional ActionScript code.
Unit testing of separate parts of the PureMVC application is nontrivial, because each
test case would require additional work to register notifications, mediators, and other
objects.
Clear Toolkit
So far, each framework that was reviewed in this chapter is an MVC-based architectural
framework. They try to achieve the goal of separating the data flow into different tiers
or classes based on the assumption that this would simplify the project management.
In Flex project teams, these frameworks help to ensure that the person who creates the
view doesn’t need to know where its model is. Why? Is this a real-world situation or
an artificial prerequisite that results in additional overhead in your application?
Clear Toolkit is not an architectural framework; it is a set of open source Flex compo-
nents and utilities that may be called an application framework. As opposed to archi-
tectural frameworks, application frameworks don’t just have a goal to organize
developer’s code into tiers, but rather offer a set of enhanced classes and methodologies
to make application developers more productive. Good examples of application
Clear Toolkit t | | 43
frameworks are Microsoft Foundation Classes, Ruby on Rails, Swing Application
Framework (JSR-296), and Powersoft Foundation Classes.
You can download all or some of the Clear Toolkit components at http://sourceforge
.net/projects/cleartoolkit/, and see the interface in Figure 1-10.
The main goals of Clear Toolkit are:
• To make software developers write less code by offering automatic code generation
• To give enterprise developers a set of smart data-driven components (e.g., ad-
vanced data grid and form, explained in Chapter 3) that would help developers in
achieving the first goal—to write less code
The first version of this free and open source toolkit was developed by Farata Systems
in 2006. It wasn’t branded as Clear Toolkit back then, but the authors of this book
were using these components internally in multiple consulting projects. Two years
later, we decided to document these tools so that other Flex developers could also
benefit from them.
Figure 1-10. Components of Clear Toolkit
The components library is packaged in a clear.swc file that includes a number of en-
hanced Flex components such as 
Datagrid
ComboBox
, et al. Also included are:
Clear Data Builder
An Eclipse plug-in that can generate CRUD applications for BlazeDS or LCDS
based on a SQL statement or a Java data transfer object (DTO)
DTO2Fx
A utility that automatically generates ActionScript classes based on their Java peers
Log4Fx
An advanced logger (Eclipse plug-in) that is built on top of the Flex logging API
but automates and make the logging process more flexible and user-friendly
Fx2Ant
A generator of optimized Ant build scripts for Flash Builder projects
44 | | Chapter 1: Comparing Selected Flex Frameworks
Clear Toolkit 3.2.1 includes the following additions:
• Flex UI controls to support PDF generation on the client
• A data synchronization solution for AIR/BlazeDS applications
Café Townsend with Clear Toolkit
This section demonstrates how to use CDB to generate an application working with
Café Townsend employees. In Chapter 3, you’ll learn how to enhance some of the Flex
components and work with those that are already included in clear.swc.
We haven’t included a diagram for the Café application generated by Clear Data Builder
(CDB), because it just uses a 
DataCollection
object with an encapsulated Flex
RemoteObject
—no additional singletons, proxies, commands, or delegates are needed.
Before taking a deep dive into yet another version of Café Townsend, remember that
neither Mate nor PureMVC support autosynchronization of the data offered by Data
Management Services that are included in LiveCycle Data Services.
Using Employee.xml as a data source simplifies the explanation of the framework’s
basics, but in real-world situations, more often than not, you need to persist the data
on the server. If you’ve added a new employee, adding a new value object to an 
Array
Collection
in memory is not enough. You need to persist it in a medium that survives
computer reboots and electrical blackouts.
Clear Data Builder offers automatic code generation for both retrieval and persistence
of the data, and to illustrate this, we’ll be populating Café Townsend’s employee list
not with the data from an XML file but from a MySQL Server employee table stored in
DBMS (Figure 1-11).
Installing the software for the CRUD example
At the time of this writing, the latest version of CDB is 3.2.1; it requires Eclipse JEE,
which comes with productivity plug-ins for web developers. You can download Eclipse
JEE at http://www.eclipse.org/downloads/. Installing Eclipse JEE is just a matter of un-
zipping the downloaded file to a folder on your hard disk.
Installation of the plug-in version of Flex Builder 3 is also easy. Just go to http://www
.adobe.com/products/flex/features/flex_builder/ and select the plug-in version of Flex
Builder.
Get a free CDB license at the Clear Toolkit website. The latest CDB installation in-
structions can be found in the CDB User Guide.
To ensure that you have the latest instructions for installing CDB and
running a sample application, we highly recommend that you read the
appropriate section of the CDB User Guide.
Clear Toolkit t | | 45
To generate this version of Café, you’ll also need to download and install three more
pieces of software:
• The binary edition of Adobe BlazeDS 3.0; unzip it into some folder, for example,
C:\blazeds
• Apache Tomcat 6 (select Windows Service Installer from the Core Downloads
section at http://tomcat.apache.org/download-60.cgi)
• MySQL Community Server
In addition, you must create a sample database called test using the SQL script provided
in the accompanying files for this chapter. Create a user called 
dba
with the password
sql
and grant this user full access to the test database.
Important: CDB requires JDK 1.5 or later (note: JDK, not JRE). Select
the Eclipse menu Window → Preferences → Java → Installed JREs and
point it to your JDK installation directory, as shown in Figure 1-12.
The last preparation step is installing DBMS—we use MySQL Community Server.
During the installation, we’ve entered 
dba
as a user ID and 
sql
as a password.
Figure 1-11. Employee table in MySQL Server database test
46 | | Chapter 1: Comparing Selected Flex Frameworks
Documents you may be interested
Documents you may be interested