import mx.events.CollectionEvent;
import com.farata.datasource.dto.EmployeeDTO;
import com.farata.resources.*;
import mx.validators.*;
private var linkage:EmployeeDTO = null;
private function fill_onClick():void {
collection.source = Test.data;
dg.selectedIndex=0;
}
private function addItemAt(position:int):void    {
var item:EmployeeDTO = new EmployeeDTO();
collection.addItemAt(item, position);
dg.selectedIndex = position;
}
import com.farata.resources.*;
import com.farata.controls.*;
private function afterStartDate( val: Object) : Boolean {
}
]]>
</mx:Script>
</mx:ViewStack>
When you review the code in Example 3-19, you’ll find different flavors of validation
rules inside the data grid columns in this implementation of the Café Townsend ap-
plication. For example, the following rule is defined as an anonymous function for the
data grid column 
SALARY
:
<fx:DataGridColumn dataField="SALARY" headerText="Salary"
formatString="currency(2)">
<fx:validators>
<mx:Array>
<fx:ValidationRule
rule="{function(data:Object):Boolean
&amp;&amp; data.SALARY < 500000);}}"
</mx:Array>
</fx:validators>
</fx:DataGridColumn>
If the data grid is populated and the salary in a particular cell does not fall into the range
between 10,000 and 500,000, this function returns 
false
and this data value is con-
sidered invalid. Such cell(s) will immediately get the red border, and the error message
will report the problem in the red error tip right by this cell.
Some of the validation rules were repeated both in the 
DataGrid
and 
DataForm
, but this
doesn’t have to be the case. The same instances of the 
ValidationRule
class can be
reused as in the 
DataFormValidation
application.
Validation | 167
Change file from pdf to jpg on - 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
.net pdf to jpg; convert pdf pictures to jpg
Change file from pdf to jpg on - 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 multiple pdf to jpg; change pdf to jpg format
The data for this sample application is hardcoded in Test.as, which starts as follows:
public class Test{
public function Test(){
}
static public function get data() : Array {
var e : EmployeeDTO = new EmployeeDTO;
e.EMP_FNAME = "Yakov";
e.EMP_LNAME = "Fain";
e.BENE_DAY_CARE = "Y";
e.BENE_HEALTH_INS = "Y";
e.BENE_LIFE_INS = "N";
...
If you’d like to have a deeper understanding of how 
<fx:DataGridColumn>
works
with embedded validators, please examine the source code of the classes 
com.far
ata.controls.dataGridClasses.DataGridItem
and 
com.farata.controls.DataGrid
that
are included with the source code accompanying this chapter.
We had to jump through a number of hoops to allow Flex validators to communicate
with the 
DataGrid
, as the 
Validator
class expects to work only with subclasses of the
UIComponent
that are focusable controls with borders. It’s understandable—who needs
to validate, say, a 
Label
?
But we wanted to be able to display a red border around the cell that has an invalid
value and a standard error tip when the user hovers the mouse pointer over the
DataGrid
cell. Hence we had to make appropriate changes and replace the original
DataGrid.itemRenderer
with our own, which implements the 
IValidatorListener
in-
terface. An 
itemRenderer
on the 
DataGrid
level affects all its columns:
<fx:DataGrid id="dg"
itemRenderer="{new UIClassFactory(
com.farata.controls.dataGridClasses.DataGridItemRenderer)}"
We’ve included this replacement of the 
DataGridItemRenderer
in the demo application
just to show that you can substitute the base classes from the Flex framework with your
own. But as a developer of a business framework, you should hide such code in the
base components, which in this case would have been a constructor of your enhanced
DataGrid
.
Besides validation rules, it is worth noting how master/detail relationships are imple-
mented with just one line:
<fx:DataForm dataProvider="{dg.selectedItem}">
A selected row in a 
DataGrid
(master) is a 
dataProvider
for a 
DataForm
(detail). With
original Flex 
DataGrid
and 
Form
components, it would take a lot more coding to properly
rebind the object representing a selected row that changes whenever the user selects a
different one.
168 | | Chapter 3: Building an Enterprise Framework
Online Convert Jpeg to PDF file. Best free online export Jpg image
You can drag and drop your JPG file in the box, and then start immediately to sort the files, try out some settings and then create the PDF files with the
change pdf to jpg on; batch convert pdf to jpg
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Online PDF to JPEG Converter. Download Free Trial. Convert a PDF File to JPG. Drag and drop your PDF in the box above and we'll convert the files for you.
best pdf to jpg converter for; c# pdf to jpg
Once again, a well-designed framework should allow application developers to write
less code. The code of this version of Café Townsend is an example of what can be
done in only about 160 lines of code. It implements master/detail relationships, per-
forms a lot of custom validations, and uses Business Style Sheets. Adding a couple dozen
lines of code can turn this application into a CRUD built on the powerful
DataCollection
class that will be discussed in Chapter 6.
Minimizing the Number of Custom Events
Until now, you’ve concentrated on building rich components for a business framework.
We Flex architects also recommend some coding techniques that serve the same goal
as these components: enabling application developers to write less code. In this section,
you’ll see how to minimize the number of custom event classes in any application.
Flex is all about event-driven development. Create loosely coupled custom components
and let them send events to each other, as in the mediator pattern example from Chap-
ter 2. You can create new events for every occasion. If an event does not need to carry
any additional data, just give it a name, specify its type as 
flash.events.Event
, and
define the meta tag to help Flash Builder list this event in its type-ahead prompts and
dispatch it when appropriate. If your new event needs to carry some data, create an
ActionScript class extending 
flash.events.Event
, define a variable in this subclass to
store application data, and override the method 
clone()
.
Currently, for a midsize Flex application that includes about 30 views, where each view
has two components that can send/receive just one custom event, for example, you
face the need to write 60 custom event classes that look pretty much the same. We’ll
show you how to get away with just one custom event class for the entire application.
To illustrate the concept, we’ve created a simple application that defines one event class
that can serve multiple purposes. This application consists of two modules
(
GreenModule
, shown in Figure 3-9, and 
RedModule
) that are loaded in the same area of
the main application upon the click of one of the load buttons. It also has one universal
event class called 
ExEvent
.
Clicking any Send button creates an instance of this event that’s ready to carry an
application-specific payload: a DTO, a couple of 
String
variables, or any other object.
Figure 3-9’s example uses an ActionScript class called 
GirlfriendDTO
. No Cairngorm-
style mapping is required between the event being sent and the modules. For example,
if you send a 
Green
event to the 
RedModule
, nothing happens, as the latter is not listening
to the 
Green
event.
This application and its source code are deployed at http://tinyurl.com/5n5qkg.
Flash Builder’s project has a folder called modules that contains two modules:
RedModule
and 
GreenModule
. The red one is listening for the arrival of the girlfriend’s
Minimizing the Number of Custom Events s | | 169
JPG to PNG Converter | Convert JPEG to PNG, Convert PNG to JPG
image with adjusted width & height; Change image resolution JPEG image from local folders in "File" in toolbar JPEG to PNG Converter first; Load JPG images from
convert online pdf to jpg; convert pdf to jpg file
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. How to change Tiff image to Bmp image in your C# program. This demo code convert TIFF file all pages to bmp images.
.pdf to .jpg converter online; .pdf to jpg converter online
first and last name, packaged in our single event class as the two separate strings listed
in Example 3-20.
Example 3-20. RedModule.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
fontSize="28"/>
<mx:Script>
<![CDATA[
private function onCreationComplete(evt:Event):void{
this.addEventListener("RedGirlfriend", onRedGirlfriend);
}
private function onRedGirlfriend(evt:ExEvent):void{
display.text="My girlfriend is "+ evt.fName+ " " + evt.lName ;
}
]]>
</mx:Script>
</mx:Module>
The green module (Example 3-21) expects the girlfriend’s name in the form of
GirlfriendDTO
(Example 3-22).
Example 3-21. GreenModule.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
<mx:TextArea id="display" backgroundColor="#9CE29C" width="100%"
height="100%" color="#070707" fontSize="28"/>
<mx:Script>
<![CDATA[
import dto.GirlfriendDTO;
Figure 3-9. The GreenModule is loaded
170 | | Chapter 3: Building an Enterprise Framework
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. // Define input and output files path.
change pdf file to jpg; convert pdf to jpg batch
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Convert PDF to Jpg, Png, Bmp, Gif, Tiff and Bitmap in ASP.NET. Or directly change PDF to Gif image file in VB.NET program with this demo code.
convert pdf into jpg online; convert pdf to jpeg on
private function onCreationComplete(evt:Event):void{
this.addEventListener("GreenGirlfriend", onGreenGirlfriend);
}
private function onGreenGirlfriend(evt:ExEvent):void{
var myGirlfriend:GirlfriendDTO=evt["girlfriend"];
display.text="My girlfriend is "+ myGirlfriend.fName+ " " +
myGirlfriend.lName ;
}
]]>
</mx:Script>
</mx:Module>
The 
GirlfriendDTO
is pretty straightforward, too, as Example 3-22 shows.
Example 3-22. GirlfriendDTO
package dto
/**
* This is a sample data transfer object (a.k.a. value object)
*/
{
public class GirlfriendDTO {
public var fName:String; // First name
public var lName:String; // Last name
}
}
The next step is to create a single but universal event class. It will be based on the
DynamicEvent
class, which allows you to add any properties to the event object on the
fly. For the example, 
GirlfriendDTO
is the object. Here’s how a dynamic event can carry
the 
GirlfriendDTO
:
var myDTO:GirlfriendDTO=new GirlfriendDTO();
myDTO.fName="Mary";
myDTO.lName="Poppins";
var greenEvent:ExEvent=new ExEvent("GreenGirlfriend");
greenEvent.girlfriend=myDTO;
someObject.dispatchEvent(greenEvent);
Sending any arbitrary variables with this event will be straightforward:
var redEvent:ExEvent=new ExEvent("RedGirlfriend");
redEvent.fName="Mary";
redEvent.lName="Poppins";
someObject.dispatchEvent(redEvent);
The 
ExEvent
is a subclass of 
DynamicEvent
, which has a little enhancement eliminating
manual programming of the property 
Event.preventDefault
:
package{
import mx.events.DynamicEvent;
Minimizing the Number of Custom Events s | | 171
C# TIFF: How to Use C#.NET Code to Compress TIFF Image File
C:\demo3.jpg" }; // Construct List<REImage> object. List<Bitmap> images = new List<Bitmap>(); / Step1: Load image to REImage object. foreach (string file in
convert pdf to jpeg; bulk pdf to jpg converter
C# Create PDF from images Library to convert Jpeg, png images to
Add(new Bitmap(Program.RootPath + "\\" 1.jpg")); images.Add 1.png")); / Build a PDF document with PDFDocument(images.ToArray()); / Save document to a file.
changing pdf to jpg; bulk pdf to jpg converter online
public dynamic class ExEvent extends DynamicEvent{
private var m_preventDefault:Boolean;
public function ExEvent(type:String, bubbles:Boolean = false,
super(type, bubbles, cancelable);
m_preventDefault = false;
}
public override function preventDefault():void         {
super.preventDefault();
m_preventDefault = true;
}
public override function isDefaultPrevented():Boolean     {
return m_preventDefault;
}
}
}
The function 
preventDefault()
is overridden, because the class 
DynamicEvent
does not
automatically process 
preventDefault
in cloned events.
The code of the following test application loads modules, and then the user can send
any event to whatever module is loaded at the moment. Of course, if the currently
loaded module does not have a listener for the event you’re sending, tough luck. But
the good news is that it won’t break the application either, as shown in Example 3-23.
Example 3-23. An application that tests the generic event ExEvent
<?xml version="1.0" encoding="utf-8"?>
viewSourceURL="srcview/index.html">
<mx:HBox>
<mx:Button label="Load the Green Module"
click="loadMyModule('modules/GreenModule.swf')"/>
<mx:Button label="Load the Red module"
click="loadMyModule('modules/RedModule.swf')"/>
</mx:HBox>
<mx:Panel width="100%" height="100%" title="A module placeholder"
layout="absolute">
</mx:Panel>
<mx:Script>
<![CDATA[
import dto.GirlfriendDTO;
//Load the module specified in the moduleURL
private function loadMyModule(moduleURL:String):void{
theModulePlaceholder.url=moduleURL;
theModulePlaceholder.loadModule();
}
172 | | Chapter 3: Building an Enterprise Framework
// Sending generic ExEvent, adding an object that contains
// the name of the girlfriend
private function sendGreen():void{
// Strongly typed DTO - better performance and readability,
// but its structure has to be known for both parties -
// the main application and the module
var myDTO:GirlfriendDTO=new GirlfriendDTO();
myDTO.fName="Mary";
myDTO.lName="Poppins";
if (theModulePlaceholder.child !=null){
var greenEvent:ExEvent=new
ExEvent("GreenGirlfriend");
greenEvent.girlfriend=myDTO;
theModulePlaceholder.child.dispatchEvent(greenEvent);
}
}
// Sending a generic ExEvent that holds the name of the girlfriend
// as two separate variables
private function sendRed():void{
var redEvent:ExEvent=new ExEvent("RedGirlfriend");
redEvent.fName="Angelina";
redEvent.lName="YouKnowWho";
if (theModulePlaceholder.child !=null){
theModulePlaceholder.child.dispatchEvent(redEvent);
}
}
]]>
</mx:Script>
</mx:Application>
The function 
sendGreen()
sends an instance of 
ExEvent
, carrying the DTO inside. The
sendRed()
function just adds two properties, 
fName
and 
lName
, to the instance of 
ExEvent
.
Instead of using a DTO, you could’ve used a weakly typed data transfer object:
var myDTO:Object={fname:"Mary",lname:"Poppins"};
But this approach might result in a slightly slower performance and the code would be
less readable. On the plus side, there would be no need to explicitly define and share
the class structure of the DTO between the application (the mediator) and the module.
You can use this technique for creating quick-and-dirty prototypes.
To summarize, using a single dynamic event spares you from the tedious coding of
dozens of similar event classes. On the negative side, because this solution does not use
the meta tag 
Event
declaring the names of the events, Flash Builder won’t be able to
help you with the name of the event in its type-ahead help.
Minimizing the Number of Custom Events s | | 173
In the vast majority of RIAs, you can afford to lose a couple of milliseconds caused by
using a dynamic event. Using a single dynamic event is one more step toward mini-
mizing the code to be written for your project.
Summary
In this chapter, you learned by example how to start enhancing the Flex framework
with customized components and classes, such as 
CheckBox
ComboBox
DataGrid
,
DataForm
DataFormItem
, and 
ValidationRule
. You also saw how to use these compo-
nents in your applications. The source code for this chapter comes as two Flash Builder
projects—the Business Framework, which includes the sample applications discussed
in this chapter, and the Business Framework Library, which includes a number of en-
hanced Flex components (some of them were shown here in simplified form) that can
be used in your projects as well.
The clear.swc component library is offered for free under the MIT license as a part of
the open source framework Clear Toolkit—just keep the comments in the source code
giving credit to Farata Systems as the original creator of this code. You can find the up-
to-date information about all components included in Clear Toolkit by visiting the
popular open source repository SourceForge, or, to be more specific, the following
URL: https://sourceforge.net/projects/cleartoolkit. Make sure that you’ve tested these
components thoroughly before using them in production systems.
In this chapter, we reviewed and explained why and how we extended several Flex
components. We started with simpler 
CheckBox
and 
ComboBox
components, just because
it was easier to illustrate the process of extending components. But then we did some
heavy lifting and extended such important components as 
Form
and 
Validator
. You’ve
seen a working example application that would integrate validators into 
DataForm
and
DataGrid
components.
Besides extending components, we’ve shown you some best practices (using resources
and writing applications) that use only one 
event
class and thus greatly minimize the
amount of code that Flex developers have to write.
You’ll see more of extended components in Chapters 6, 9, and 11. Next we’ll discuss
convenient third-party tools that can be handy for any Flex team working on an en-
terprise project.
174 | | Chapter 3: Building an Enterprise Framework
CHAPTER 4
Equipping Enterprise Flex Projects
“Excuse me, where can I find For Sale signs?”
“Probably they are in the Hardware section.”
“Why there?”
“If we don’t know where to shelve an item, we put it in
Hardware.”
—A conversation in a home remodeling store
For a successful project, you need the right mix of team members, tools, and techniques.
This chapter covers a variety of topics that are important for development managers
and enterprise and application architects who take care of the ecosystem in which Flex
teams operate. The fact that Flex exists in a variety of platforms and that BlazeDS and
LCDS can be deployed under any Java servlet container sounds great. But when you
consider that today’s enterprise development team often consists of people located all
around the globe, such flexibility can make your project difficult to manage.
This chapter is not as technical as the others. It’s rather a grab bag of little things that
may seem unrelated, but when combined will make your development process
smoother and the results of your development cycle more predictable.
Specifically, you’ll learn about:
• Staffing enterprise Flex projects
• Working with the version control repository
• Stress testing
• Creating build and deployment scripts
• Continuous integration
• Logging and tracing
• Open source Flex component libraries
• Integration with Spring and Hibernate
175
The chapter’s goal is to give you a taste of your options and help make your Flex team
more productive. Without further ado, let’s start building a Flex team.
Staffing Considerations
Any project has to be staffed first. Developers of a typical enterprise RIA project can
be easily separated into two groups: those who work on the client tier and those who
work on the server-side components. You can further divide this latter group into those
who develop the middle tier with business logic and those who take care of the data.
In all cases, however, how does a project manager find the right people?
The number of formally trained Flex programmers is increasing daily, but the pool of
Flex developers is still relatively small compared to the multimillion legions of Java
and .NET professionals.
The main concern of any project manager is whether enough people with Flex skills
can be found to staff, but what does the title of “Flex developer” mean? In some projects,
you need to develop a small number of Flex views, but they have very serious require-
ments for the communication layer. In other projects, you need to develop lots of UI
views (a.k.a. screens) supported by standard LCDS or BlazeDS features. Any of these
projects, however, require the following Flex personnel:
• UI developers
• Component developers
• Architects
For the sake of simplicity, this discussion assumes that the project’s user
interface design is done by a professional user experience designer.
The better you understand these roles, the better you can staff your project.
GUI and Component Developers
GUI developers create the view portion of an RIA. This is the easiest skill to acquire if
you already have some programming language under your belt. The hard work of the
Adobe marketing force and technical evangelists did a good job in creating the impres-
sion that working with Flex is easy: just drag and drop UI components on the what-
you-see-is-what-you-get (WYSIWYG) area in Flash Builder, align them nicely, and
write the functions to process button clicks or row selections in the data grid—sort of
a Visual Basic for the Web.
The GUI development skillset is low-hanging fruit that many people can master pretty
quickly. Savvy project managers either outsource this job to third-party vendors or send
176 | | Chapter 4: Equipping Enterprise Flex Projects
Documents you may be interested
Documents you may be interested