}
}
private function fill_onClick():void {
visitDataCollection.fill(username.text);
visitCollection.fill(username.text);
}
private function googleMap_onClick():void {
if (network.googleMapsConnected) {
cursorManager.setBusyCursor();
vs.selectedIndex=3;
showAddress();
}
else {
vs.selectedIndex=4;
openMapImage();
}
}
private function onLogon():void {
initCollections();
vs.selectedIndex=1;
}
private function onReset():void {
username.text="Liz Anthony";
}
private function onMapReady(event:Event):void {
map.setZoom(20);
showAddress();
}
private function deleteMap():void {
var dto:VisitDataDTO=dg.selectedItem as VisitDataDTO;
var file:File= File.applicationStorageDirectory.resolvePath(
if (file.exists){
file.deleteFile();
}
}
private function saveMap():void {
deleteMap();
var bd:BitmapData=new BitmapData(map.width, map.height);
bd.draw(map);
var pngEncoder:PNGEncoder=new PNGEncoder();
var ba:ByteArray=pngEncoder.encode(bd);
var dto:VisitDataDTO=dg.selectedItem as VisitDataDTO;
var file:File=
File.applicationStorageDirectory.resolvePath(
var fileStream:FileStream=new FileStream();
fileStream.open(file, FileMode.WRITE);
PharmaSales Application n | 477
Convert multiple page 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
.net pdf to jpg; best way to convert pdf to jpg
Convert multiple page 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 multiple page pdf to jpg; convert multiple pdf to jpg online
fileStream.writeBytes(ba);
fileStream.close();
}
private function openMapImage():void {
if (saved_map && saved_map.initialized){
var dto:VisitDataDTO=dg.selectedItem as VisitDataDTO;
var file:File=
File.applicationStorageDirectory.resolvePath(
saved_map.source=file.nativePath;
map_image.title="Displaying '" + file.name + "'";
}
}
private function hasMapImage():Boolean
{
var dto:VisitDataDTO=dg.selectedItem as VisitDataDTO;
var file:File= File.applicationStorageDirectory.resolvePath(
return file.exists;
}
private function showAddress():void {
if (map && map.initialized){
var cg:ClientGeocoder=new ClientGeocoder();
cg.addEventListener(
var dto:VisitDataDTO=dg.selectedItem as VisitDataDTO;
cg.geocode(dto.fulladdress);
}
}
private function onGeocodeSuccess(event:GeocodingEvent):void{
cursorManager.removeBusyCursor();
var marker:Marker=new Marker(point);
map.addOverlay(marker);
map.setCenter(point);
var dto:VisitDataDTO=dg.selectedItem as VisitDataDTO;
var opt:InfoWindowOptions=new InfoWindowOptions();
opt.drawDefaultFrame=true;
opt.contentHTML=dto.fulladdress;
marker.openInfoWindow(opt);
}
]]>
</mx:Script>
</mx:WindowedApplication>
OfflineDataCollection
The Clear component library includes a descendant of 
DataCollection
(described in
Chapter 3), the 
com.farata.collections.OfflineDataCollection
class. The class
478 | | Chapter 9: Working with Adobe AIR
C# Create PDF from images Library to convert Jpeg, png images to
Batch convert PDF documents from multiple image formats, including Jpg image formats into one or multiple PDF file in able to be cropped and pasted to PDF page.
conversion pdf to jpg; c# convert pdf to jpg
VB.NET Create PDF from images Library to convert Jpeg, png images
Components to batch convert PDF documents in Visual Basic multiple image formats into one or multiple PDF file. Crop and paste specified image area to PDF page.
convert multi page pdf to jpg; changing pdf to jpg file
OfflineDataCollection
is responsible for performing data synchronization between the
local and remote databases.
If the network connection is available, the method 
fill()
gets the data from the server
and the application creates the backup copy of the existing local database and creates
a fresh one:
public override function fill(... args):AsyncToken {
var changes:Array=getChangesFromLocalDB();
syncRequired=changes.length > 0;
if (!commitRequired && !syncRequired) {
var act:AsyncToken=invoke(method, args);
act.method="fill";
return act;
}else{
fillFromLocalDB();
}
return null;
}
This function starts with getting the data from the local database. If this is the very first
invocation, the array 
changes
will be empty and no other function calls will be made.
If no modifications were made in the data grid with visit information and no un-
synchronized changes exist in the local database, this function will just retrieve the data
from the remote destination using 
DataCollection
’s 
invoke()
method.
How does 
OfflineDataCollection
know that there are local changes to be
synchronized? Each instance of 
OfflineDataCollection
persists its data in a database
table. When the application calls the function 
OfflineDataCollection.backup()
, it cop-
ies this table to a backup database.
Comparing the content of the corresponding tables in the main and backup databases
allows the application to find out whether the data is different, or in other words,
whether data synchronization is required.
If the network connection is not available, the method 
fill()
will get the visits data
from the local database.
The class 
OfflineDataCollection
uses the 
com.farata.collections.LocalDBHelper
helper class for all database operations. You can find the source code of this class in
the Clear Toolkit project com.farata.components at the SourceForge code repository.
When the connection is restored, the 
OfflineDataCollection
object can synchronize
the data in both directions: from the local storage to the server and back.
The property 
commitRequired
specifies whether the local data were modified and should
be synchronized with the server.
Example 9-13 contains the complete code of OfflineDataCollection.as. (Note that com-
ments and import statements were removed in the interest of space.)
OfflineDataCollection | 479
VB.NET PDF Image Extract Library: Select, copy, paste PDF images
able to perform image extraction from multiple page adobe PDF Extract multiple types of image from PDF file in Scan high quality image to PDF, tiff and various
convert .pdf to .jpg; convert pdf to jpeg on
C# PDF Convert to Images SDK: Convert PDF to png, gif images in C#
conversions from PDF document to multiple image forms. can use this sample code to convert PDF file to PDFDocument(inputFilePath); // Get the first page of PDF
change pdf file to jpg online; best program to convert pdf to jpg
Example 9-13. OfflineDataCollection.as
package com.farata.collections {
[Event(name="result", type="mx.rpc.events.ResultEvent")]
[Event(name="fault", type="mx.rpc.events.FaultEvent")]
[Bindable(event="propertyChange")]
public class OfflineDataCollection extends DataCollection
{
private var _dtoClass:Class;
private var _syncRequired:Boolean;
public function OfflineDataCollection(destination:String=null,
method:String=null, dtoClass:Class=null){
this.destination=destination;
this.method=method;
this.dtoClass=dtoClass;
}
public function get syncRequired():Boolean
{
return _syncRequired;
}
public function set syncRequired(value:Boolean):void{
var oldValue:Boolean=_syncRequired;
if (oldValue != value){
_syncRequired=value;
dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
"syncRequired", oldValue, value));
}
}
public function get dtoClass():Class{
return _dtoClass;
}
public function set dtoClass(dtoClass:Class):void{
_dtoClass=dtoClass;
}
public function set doFill(bFill:Boolean):void{
if (bFill){
fill();
}
}
public override function fill(... args):AsyncToken{
var changes:Array=getChangesFromLocalDB();
syncRequired=changes.length > 0;
if (!commitRequired && !syncRequired){
var act:AsyncToken=invoke(method, args);
480 | | Chapter 9: Working with Adobe AIR
C# WPF PDF Viewer SDK to convert and export PDF document to other
Image: Copy, Paste, Cut Image in Page. Link: Edit Create multiple pages Tiff file from PDF document. Convert PDF to image file formats with high quality, support
reader convert pdf to jpg; convert .pdf to .jpg online
C# PDF Image Extract Library: Select, copy, paste PDF images in C#
C#.NET extract image from multiple page adobe PDF file Extract various types of image from PDF file, like Get JPG, JPEG and other high quality image files from
convert pdf to jpg for; convert pdf to jpg
act.method="fill";
return act;
}
else {
fillFromLocalDB();
}
return null;
}
public override function sync():AsyncToken {
updateLocalDB();
commitRequired = false;
var act:AsyncToken=syncOfflineChanges();
return act;
}
public function updateLocalDB():void {
var conn:SQLConnection=LocalDBHelper.openDBConnection();
try {
for(var i:int=0; i < deletes.length; i++) {
LocalDBHelper.deleteDTO(conn, destination, method,
}
for(i=0; i < inserts.length; i++){
LocalDBHelper.insertDTO(conn, destination, method,
}
for(i=0; i < updates.length; i++) {
LocalDBHelper.updateDTO(conn, destination, method,
}
dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
}
finally {
if (conn != null) {
conn.close();
}
}
}
public function fillFromLocalDB():void {
var conn:SQLConnection=LocalDBHelper.openDBConnection();
dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
}
public function backUp():void {
LocalDBHelper.backUp(destination, method, dtoClass);
syncRequired=false;
}
public override function resetState():void {
super.resetState();
OfflineDataCollection | 481
C# Create PDF Library SDK to convert PDF from other file formats
Gratis control for creating PDF from multiple image formats such as tiff, jpg, png, gif, bmp Create and save editable PDF with a blank page, bookmarks, links
convert pdf to jpg for online; changing file from pdf to jpg
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Convert PDF documents to multiple image formats, including Jpg VB.NET programming sample code to convert PDF file to inputFilePath) ' Get the first page of PDF
convert pdf to jpg c#; convert pdf file to jpg format
commitRequired=false;
}
protected override function createRemoteObject():RemoteObject {
var ro:RemoteObject=super.createRemoteObject();
ro.addEventListener(ResultEvent.RESULT, onResult);
return ro;
}
private function onResult(evt:ResultEvent):void {
if (evt.token.method == "fill") {
var dtos:Array=evt.result.source;
if (dtos.length > 0) {
try {
LocalDBHelper.createTable(conn, destination, method,
LocalDBHelper.clearTable(conn, destination, method,
for(var i:int=0; i < dtos.length; i++) {
LocalDBHelper.insertDTO(conn, destination,
}
}
finally {
if (conn != null) {
conn.close();
backUp();
}
}
}
dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
}
}
protected override function ro_onFault(evt:FaultEvent):void {
if (evt.token.method == "fill"){
fillFromLocalDB();
}
}
private function syncOfflineChanges():AsyncToken {
var changeObjects:Array=getChangesFromLocalDB();
if (changeObjects.length > 0) {
var ro:RemoteObject=null;
if (destination == null || destination.length == 0)
throw new Error("No destination specified");
ro=new RemoteObject();
ro.destination=destination;
ro.concurrency="last";
ro.addEventListener(ResultEvent.RESULT,
syncOfflineChanges_onResult);
ro.addEventListener(FaultEvent.FAULT,
482 | | Chapter 9: Working with Adobe AIR
syncOfflineChanges_onFault);
ro.showBusyCursor=true;
operation.arguments=[changeObjects];
var co:IContextOperation=IContextOperation(operation);
co.context.headers=headers;
}
var act:AsyncToken=operation.send();
return act;
}
return null;
}
backUp();
resetState();
dispatchEvent(PropertyChangeEvent.createUpdateEvent(this,
}
var changes:Array=getChangesFromLocalDB();
syncRequired=changes.length > 0;
}
private function getChangesFromLocalDB():Array{
var changeObjects:Array=new Array();
var conn:SQLConnection=LocalDBHelper.openDBConnection();
var newDtos:Array=LocalDBHelper.readDTOs(conn, destination,
method, dtoClass);
conn.close();
conn=LocalDBHelper.openBackupDBConnection();
var oldDtos:Array=LocalDBHelper.readDTOs(conn, destination,
method, dtoClass);
conn.close();
var names:Array=null;
if (oldDtos.length > 0){
names=LocalDBHelper.getPropertyNames(oldDtos[0]);
}
else if (newDtos.length > 0){
names=LocalDBHelper.getPropertyNames(newDtos[0]);
}
else{
return changeObjects;
}
for(var i:int=0; i < oldDtos.length; i++) {
var found:Boolean=false;
for(j=0; j < newDtos.length; j++){
if (oldDtos[i].uid == newDtos[j].uid){
found=true;
var changedProperties:Array=new Array();
for(var k:int=0; k < names.length; k++){
if (!compareObject(oldDtos[i][names[k]],
OfflineDataCollection | 483
newDtos[j][names[k]])){
changedProperties.push(names[k]);
}
}
if (changedProperties.length > 0){
var changeObject:ChangeObject=new
changeObjects.push(changeObject);
}
break;
}
}
if (!found){
changeObject=new ChangeObject(ChangeObject.DELETE,
null, oldDtos[i]);
changeObject.changedPropertyNames=names;
changeObjects.push(changeObject);
}
}
for(var j:int=0; j < newDtos.length; j++) {
found=false;
for(i=0; i < oldDtos.length; i++){
if (oldDtos[i].uid == newDtos[j].uid){
found=true;
break;
}
}
if (!found){
changeObject=new ChangeObject(ChangeObject.CREATE,
newDtos[j], null);
changeObject.changedPropertyNames=names;
changeObjects.push(changeObject);
}
}
return changeObjects;
}
var buffer1:ByteArray=new ByteArray();
buffer1.writeObject(obj1);
var buffer2:ByteArray=new ByteArray();
buffer2.writeObject(obj2);
var size:uint=buffer1.length;
if (buffer1.length == buffer2.length){
buffer1.position=0;
buffer2.position=0;
while(buffer1.position < size){
var v1:int=buffer1.readByte();
if (v1 != buffer2.readByte()){
return false;
484 | | Chapter 9: Working with Adobe AIR
}
}
return true;
}
return false;
}
}
}
The function 
fillFromLocalDB()
asks the 
LocalDBHelper
to read the DTOs that were
saved in the local database:
source=LocalDBHelper.readDTOs(conn, destination, method, dtoClass);
The local database stores the DTOs’ data in tables. The names of the tables are formed
automatically by 
LocalDBHelper
. It glues together the name of the destination, the
method, and the DTO. For example, if you look at the content of the local database
using SQLite Manager, you’ll see there the following tables (one table per instance of
OfflineDataCollection
), as shown in Figure 9-15:
com_demo_pharmasales__Visit__getVisitBySalesman__VisitDTO
com_demo_pharmasales__VisitData_getVisitDataBSaleseman_VisitDatDTO
Figure 9-15. DTOs in the local cache
The function 
getChangesFromLocalDB()
connects to both main and backup databases
and reads the DTOs that store the data for this 
OfflineDataCollection
(table names
are the same in both databases). Then it finds the names of the DTOs’ properties and
compares their values. The 
uid
value of DTOs in the main and backup databases never
changes, but the values of regular properties might differ if the user were working with
OfflineDataCollection | 485
the application in the disconnected mode. If some property values are not the same,
data synchronization with the remote database is required.
The names of the local databases are hardcoded in the 
LocalDBHelper
:
local.db and local.db.bak. This doesn’t cause any conflicts, as each AIR
application has its own storage directory with a unique name, and these
two databases are stored there.
The function creates a collection of 
ChangeObject
instances, and each of them contains
the old and new values of the modified DTO. Collection of these 
ChangeObject
s will be
sent to the server, and the rest of the processing will be handled in Java code, the same
way as was done in the CDB version of Café Townsend.
If the object exists only in the backup database, this means that the user deleted this
record, and this particular instance of 
ChangeObject
will be marked as deleted and will
contain only the old DTO instance.
If the object exists only in the main database, this means that the user has inserted a
new record, and this particular instance of 
ChangeObject
will be marked as created and
will contain only the new DTO instance.
On return from 
changesFromLocalDB()
, the function 
fill()
checks the values of
commitRequired
(this property is derived from 
DataCollection
; it signals that something
has been changed on the client) and 
syncRequired
(this property is specific to AIR
applications).
If no commit or synchronization is required, the 
fill()
function will get the data from
the remote destination:
var act:AsyncToken=invoke(method, args);
act.method="fill";
return act;
When the data arrives from the server, the function 
onResult()
is invoked. If this is the
very first invocation of the application, the main and the backup databases will be
created, and the table that stores the data for this DTO is populated. Then the backup
copy of this table is created in the backup database.
If commit or synchronization is required, the function 
fillFromLocalDB()
is invoked,
and the property 
source
of 
DataCollection
will get all the data. The user will see the
data if 
source
is bound to a UI component:
source=LocalDBHelper.readDTOs(conn, destination, method, dtoClass);
The function 
sync()
in 
OfflineDataCollection
updates the local database and calls a
function to synchronize the local changes with the remote server:
updateLocalDB();
commitRequired = false;  //we already saved the data locally
var act:AsyncToken=syncOfflineChanges();
486 | | Chapter 9: Working with Adobe AIR
Documents you may be interested
Documents you may be interested