flex-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From aha...@apache.org
Subject [32/51] [partial] BlazeDS Donation from Adobe Systems Inc
Date Fri, 25 Apr 2014 05:34:30 GMT
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/src/spring-samples/src/org/springframework/flex/samples/util/DatabaseInitializer.java
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/src/spring-samples/src/org/springframework/flex/samples/util/DatabaseInitializer.java b/apps/samples-spring/WEB-INF/src/spring-samples/src/org/springframework/flex/samples/util/DatabaseInitializer.java
new file mode 100755
index 0000000..2d3dc82
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/src/spring-samples/src/org/springframework/flex/samples/util/DatabaseInitializer.java
@@ -0,0 +1,304 @@
+/*
+ * Copyright 2002-2009 the original author or authors.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+ /*
+  * This file has been modified by Adobe (Adobe Systems Incorporated).
+  * Date: Apr 10, 2010
+  * Reason: Migrated the DB used for samples-spring web app to HSQL
+  * 
+  * Date: Oct 7, 2010
+  * Reason(s): Fixed the following issues:
+  * BLZ-573: Cannot create a new company in Company Manager Sample in Spring BlazeDS Integration Test Drive
+  * BLZ-574: Error in creating new contact in insync05 sample in Spring BlazeDS Integration test drive
+  */
+ 
+package org.springframework.flex.samples.util;
+
+import javax.sql.DataSource;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+
+/**
+ * @author Christophe Coenraets
+ * @author Jeremy Grelle
+ */
+public class DatabaseInitializer {
+
+    private final JdbcTemplate template;
+
+    public DatabaseInitializer(DataSource ds) {
+        this.template = new JdbcTemplate(ds);
+        createTableProduct();
+        insertProducts();
+        createTableContact();
+        insertContacts();
+        createTableIndustry();
+        insertIndustries();
+        createTableCompany();
+        insertCompanies();
+        createTableAccount();
+        insertAccounts();
+    }
+
+    public void createTableContact() {
+        String sql = "CREATE TABLE CONTACT (" + "ID INT IDENTITY PRIMARY KEY, " + "FIRST_NAME VARCHAR(50), "
+            + "LAST_NAME VARCHAR(50), " + "ADDRESS VARCHAR(50), " + "CITY VARCHAR(50), " + "STATE VARCHAR(20), " + "ZIP VARCHAR(20), "
+            + "PHONE VARCHAR(50), " + "EMAIL VARCHAR(50), " + "DOB DATE)";
+        this.template.execute(sql);
+    }
+
+    public void createTableCompany() {
+        String sql = "CREATE TABLE COMPANY (" + "ID INT IDENTITY PRIMARY KEY, " + "NAME VARCHAR(50), " + "ADDRESS VARCHAR(50), "
+            + "CITY VARCHAR(50), " + "STATE VARCHAR(20), " + "ZIP VARCHAR(20), " + "PHONE VARCHAR(50), " + "INDUSTRY_ID INT)";
+        this.template.execute(sql);
+    }
+
+    public void createTableIndustry() {
+        String sql = "CREATE TABLE INDUSTRY (" + "ID INT IDENTITY PRIMARY KEY, " + "NAME VARCHAR(50))";
+        this.template.execute(sql);
+    }
+
+    public void createTableProduct() {
+        String sql = "CREATE TABLE PRODUCT (" + "ID INT IDENTITY PRIMARY KEY, " + "NAME VARCHAR(50), " + "CATEGORY VARCHAR(50), "
+            + "DESCRIPTION LONGVARCHAR, " + "IMAGE VARCHAR(255), " + "PRICE DOUBLE, " + "QTY INT)";
+        this.template.execute(sql);
+    }
+
+    public void createTableAccount() {
+        String sql = "CREATE TABLE ACCOUNT (" + "ID INT IDENTITY PRIMARY KEY, " + "NAME VARCHAR(50)," + "TYPE INT,"
+            + "INDUSTRY INT," + "OWNER INT," + "PHONE VARCHAR(30)," + "FAX VARCHAR(30)," + "TICKER VARCHAR(10)," + "OWNERSHIP VARCHAR(20),"
+            + "NUMBER_EMPLOYEES INT," + "ANNUAL_REVENUE DOUBLE," + "PRIORITY INT," + "RATING INT," + "ADDRESS1 VARCHAR(50),"
+            + "ADDRESS2 VARCHAR(50)," + "CITY VARCHAR(50)," + "STATE VARCHAR(50)," + "ZIP VARCHAR(20)," + "URL VARCHAR(50)," + "NOTES LONGVARCHAR,"
+            + "CURRENT_YEAR_RESULTS DOUBLE," + "LAST_YEAR_RESULTS DOUBLE)";
+        this.template.execute(sql);
+    }
+
+    public void insertContacts() {
+        int rowCount = this.template.queryForInt("SELECT COUNT(*) FROM CONTACT");
+        if (rowCount > 0) {
+            return;
+        }
+        String sql = "INSERT INTO CONTACT (FIRST_NAME, LAST_NAME, ADDRESS, CITY, STATE, ZIP, PHONE, EMAIL) VALUES (?,?,?,?,?,?,?,?)";
+        this.template.update(sql, new Object[] { "Christophe", "Coenraets", "275 Grove St", "Newton", "MA", "02476", "617-219-2000",
+            "ccoenrae@adobe.com" });
+        this.template.update(sql, new Object[] { "John", "Smith", "1 Main st", "Boston", "MA", "01744", "617-219-2001", "jsmith@mail.com" });
+        this.template.update(sql, new Object[] { "Lisa", "Taylor", "501 Townsend st", "San Francisco", "CA", "", "415-534-7865", "ltaylor@mail.com" });
+        this.template.update(sql, new Object[] { "Noah", "Jones", "1200 5th Avenue ", "New York", "NY", "", "212-764-2345", "njones@mail.com" });
+        this.template.update(sql, new Object[] { "Bill", "Johnson", "1345 6th street", "Chicago", "IL", "", "", "bjohnson@mail.com" });
+        this.template.update(sql, new Object[] { "Chloe", "Rodriguez", "34 Elm street", "Dallas", "TX", "", "415-534-7865", "crodriguez@mail.com" });
+        this.template.update(sql, new Object[] { "Jorge", "Espinosa", "23 Putnam Avenue", "Seattle", "WA", "", "", "jespinosa@mail.com" });
+        this.template.update(sql, new Object[] { "Amy", "King", "11 Summer st", "Miami", "FL", "", "", "aking@mail.com" });
+        this.template.update(sql, new Object[] { "Boris", "Jefferson", "222 Spring st", "Denver", "CO", "", "415-534-7865", "bjefferson@mail.com" });
+        this.template.update(sql, new Object[] { "Linda", "Madison", "564 Winter st", "Washington", "DC", "", "", "lmadison@mail.com" });
+    }
+
+    public void insertCompanies() {
+        int rowCount = this.template.queryForInt("SELECT COUNT(*) FROM COMPANY");
+        if (rowCount > 0) {
+            return;
+        }
+        String sql = "INSERT INTO COMPANY (NAME, ADDRESS, CITY, STATE, ZIP, PHONE, INDUSTRY_ID) VALUES (?,?,?,?,?,?,?)";
+        this.template.update(sql, new Object[] { "Adobe", "", "San Jose", "CA", "", "408", 1 });
+        this.template.update(sql, new Object[] { "SpringSource", "", "New York", "NY", "", "212", 2 });
+        this.template.update(sql, new Object[] { "Allaire", "", "Cambridge", "MA", "", "212", 3 });
+        this.template.update(sql, new Object[] { "Acme", "", "Denver", "CO", "", "212", 4 });
+        this.template.update(sql, new Object[] { "Macromedia", "", "San Francisco", "CA", "", "212", 1 });
+        this.template.update(sql, new Object[] { "Alpha Corp", "", "Chicago", "IL", "", "", 1 });
+    }
+
+    public void insertIndustries() {
+        int rowCount = this.template.queryForInt("SELECT COUNT(*) FROM INDUSTRY");
+        if (rowCount > 0) {
+            return;
+        }
+        String sql = "INSERT INTO INDUSTRY (NAME) VALUES (?)";
+        this.template.update(sql, new Object[] { "Telecommunication" });
+        this.template.update(sql, new Object[] { "Government" });
+        this.template.update(sql, new Object[] { "Financial Services" });
+        this.template.update(sql, new Object[] { "Life Sciences" });
+        this.template.update(sql, new Object[] { "Manufacturing" });
+        this.template.update(sql, new Object[] { "Education" });
+    }
+
+    public void insertProducts() {
+        int rowCount = this.template.queryForInt("SELECT COUNT(*) FROM PRODUCT");
+        if (rowCount > 0) {
+            return;
+        }
+        String sql = "INSERT INTO PRODUCT (NAME, CATEGORY, IMAGE, PRICE, DESCRIPTION, QTY) VALUES (?,?,?,?,?,?)";
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 6010",
+                "6000",
+                "Nokia_6010.gif",
+                99.0E0,
+                "Easy to use without sacrificing style, the Nokia 6010 phone offers functional voice communication supported by text messaging, multimedia messaging, mobile internet, games and more.",
+                21 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 3100 Blue",
+                "9000",
+                "Nokia_3100_blue.gif",
+                109.0E0,
+                "Light up the night with a glow-in-the-dark cover - when it is charged with light you can easily find your phone in the dark. When you get a call, the Nokia 3100 phone flashes in tune with your ringing tone. And when you snap on a Nokia Xpress-on gaming cover, you will get luminescent light effects in time to the gaming action.",
+                99 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 3100 Pink",
+                "3000",
+                "Nokia_3100_pink.gif",
+                139.0E0,
+                "Light up the night with a glow-in-the-dark cover - when it is charged with light you can easily find your phone in the dark. When you get a call, the Nokia 3100 phone flashes in tune with your ringing tone. And when you snap on a Nokia Xpress-on gaming cover, you will get luminescent light effects in time to the gaming action.",
+                30 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 3120",
+                "3000",
+                "Nokia_3120.gif",
+                159.99E0,
+                "Designed for both business and pleasure, the elegant Nokia 3120 phone offers a pleasing mix of features. Enclosed within its chic, compact body, you will discover the benefits of tri-band compatibility, a color screen, MMS, XHTML browsing, cheerful screensavers, and much more.",
+                10 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 3220",
+                "3000",
+                "Nokia_3220.gif",
+                199.0E0,
+                "The Nokia 3220 phone is a fresh new cut on some familiar ideas - animate your MMS messages with cute characters, see the music with lights that flash in time with your ringing tone, download wallpapers and screensavers with matching color schemes for the interface.",
+                20 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 3650",
+                "3000",
+                "Nokia_3650.gif",
+                200.0E0,
+                "Messaging is more personal, versatile and fun with the Nokia 3650 camera phone.  Capture experiences as soon as you see them and send the photos you take to you friends and family.",
+                11 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 6820",
+                "6000",
+                "Nokia_6820.gif",
+                299.99E0,
+                "Messaging just got a whole lot smarter. The Nokia 6820 messaging device puts the tools you need for rich communication - full messaging keyboard, digital camera, mobile email, MMS, SMS, and Instant Messaging - right at your fingertips, in a small, sleek device.",
+                8 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 6670",
+                "6000",
+                "Nokia_6670.gif",
+                319.99E0,
+                "Classic business tools meet your creative streak in the Nokia 6670 imaging smartphone. It has a Netfront Web browser with PDF support, document viewer applications for email attachments, a direct printing application, and a megapixel still camera that also shoots up to 10 minutes of video.",
+                2 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 6620",
+                "6000",
+                "Nokia_6620.gif",
+                329.99E0,
+                "Shoot a basket. Shoot a movie. Video phones from Nokia... the perfect way to save and share life\u2019s playful moments. Feel connected.",
+                10 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 3230 Silver",
+                "3000",
+                "Nokia_3230_black.gif",
+                500.0E0,
+                "Get creative with the Nokia 3230 smartphone. Create your own ringing tones, print your mobile images, play multiplayer games over a wireless Bluetooth connection, and browse HTML and xHTML Web pages. ",
+                10 });
+        this.template.update(sql,
+            new Object[] { "Nokia 6680", "6000", "Nokia_6680.gif", 222.0E0, "The Nokia 6680 is an imaging smartphone that", 36 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 6630",
+                "6000",
+                "Nokia_6630.gif",
+                379.0E0,
+                "The Nokia 6630 imaging smartphone is a 1.3 megapixel digital imaging device (1.3 megapixel camera sensor, effective resolution 1.23 megapixels for image capture, image size 1280 x 960 pixels});.",
+                8 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 7610 Black",
+                "7000",
+                "Nokia_7610_black.gif",
+                450.0E0,
+                "The Nokia 7610 imaging phone with its sleek, compact design stands out in any crowd. Cut a cleaner profile with a megapixel camera and 4x digital zoom. Quality prints are all the proof you need of your cutting edge savvy.",
+                20 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 7610 White",
+                "7000",
+                "Nokia_7610_white.gif",
+                399.99E0,
+                "The Nokia 7610 imaging phone with its sleek, compact design stands out in any crowd. Cut a cleaner profile with a megapixel camera and 4x digital zoom. Quality prints are all the proof you need of your cutting edge savvy.",
+                7 });
+        this.template.update(sql, new Object[] { "Nokia 6680", "6000", "Nokia_6680.gif", 219.0E0, "The Nokia 6680 is an imaging smartphone.", 15 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 9300",
+                "9000",
+                "Nokia_9300_close.gif",
+                599.0E0,
+                "The Nokia 9300 combines popular voice communication features with important productivity applications in one well-appointed device. Now the tools you need to stay in touch and on top of schedules, email, news, and messages are conveniently at your fingertips.",
+                26 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia 9500",
+                "9000",
+                "Nokia_9500_close.gif",
+                799.99E0,
+                "Fast data connectivity with Wireless LAN. Browse the Internet in full color, on a wide, easy-to-view screen. Work with office documents not just email with attachments and memos, but presentations and databases too.",
+                54 });
+        this.template.update(
+            sql,
+            new Object[] {
+                "Nokia N90",
+                "9000",
+                "Nokia_N90.gif",
+                499.0E0,
+                "Twist and shoot. It is a pro-photo taker. A personal video-maker. Complete with Carl Zeiss Optics for crisp, bright images you can view, edit, print and share. Meet the Nokia N90.",
+                12 });
+    }
+
+    public void insertAccounts() {
+        int rowCount = this.template.queryForInt("SELECT COUNT(*) FROM ACCOUNT");
+        if (rowCount > 0) {
+            return;
+        }
+        String sql = "INSERT INTO ACCOUNT (NAME, ADDRESS1, CITY, STATE, ZIP, PHONE) VALUES (?,?,?,?,?,?)";
+        this.template.update(sql, new Object[] { "Adobe", "", "San Jose", "CA", "", "408" });
+        this.template.update(sql, new Object[] { "SpringSource", "", "New York", "NY", "", "212" });
+        this.template.update(sql, new Object[] { "Allaire", "", "Cambridge", "MA", "", "212" });
+        this.template.update(sql, new Object[] { "Acme", "", "Denver", "CO", "", "212" });
+        this.template.update(sql, new Object[] { "Macromedia", "", "San Francisco", "CA", "", "212" });
+        this.template.update(sql, new Object[] { "Alpha Corp", "", "Chicago", "IL", "", "" });
+    }
+}

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/WEB-INF/web.xml
----------------------------------------------------------------------
diff --git a/apps/samples-spring/WEB-INF/web.xml b/apps/samples-spring/WEB-INF/web.xml
new file mode 100755
index 0000000..5d32f39
--- /dev/null
+++ b/apps/samples-spring/WEB-INF/web.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4">
+
+    <display-name>Spring BlazeDS Integration Samples</display-name>
+
+    <context-param>
+        <param-name>contextConfigLocation</param-name>
+        <param-value>
+                /WEB-INF/spring/*-config.xml
+        </param-value>
+    </context-param>
+	
+    <filter>
+        <filter-name>springSecurityFilterChain</filter-name>
+        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
+    </filter>
+
+    <filter-mapping>
+        <filter-name>springSecurityFilterChain</filter-name>
+        <url-pattern>/*</url-pattern>
+    </filter-mapping>
+
+    <listener>
+        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+    </listener>
+	
+    <listener>
+        <listener-class>flex.messaging.HttpFlexSession</listener-class>
+    </listener>
+
+    <servlet>
+        <servlet-name>flex</servlet-name>
+        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+    </servlet>
+
+    <!-- Add RDS servlets
+    <servlet>
+        <servlet-name>RDSDispatchServlet</servlet-name>
+        <display-name>RDSDispatchServlet</display-name>
+        <servlet-class>flex.rds.server.servlet.FrontEndServlet</servlet-class>
+        <init-param>
+            <param-name>useAppserverSecurity</param-name>
+            <param-value>true</param-value>
+        </init-param>
+        <init-param>
+            <param-name>messageBrokerId</param-name>
+            <param-value>_messageBroker</param-value>
+        </init-param>
+        <load-on-startup>10</load-on-startup>
+    </servlet>
+
+    <servlet-mapping id="RDS_DISPATCH_MAPPING">
+        <servlet-name>RDSDispatchServlet</servlet-name>
+        <url-pattern>/CFIDE/main/ide.cfm</url-pattern>
+    </servlet-mapping> 
+    End Add RDS servlets -->
+
+    <servlet-mapping>
+        <servlet-name>flex</servlet-name>
+        <url-pattern>/messagebroker/*</url-pattern>
+    </servlet-mapping>
+
+    <welcome-file-list>
+        <welcome-file>index.html</welcome-file>
+    </welcome-file-list>
+</web-app>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/build.xml
----------------------------------------------------------------------
diff --git a/apps/samples-spring/build.xml b/apps/samples-spring/build.xml
new file mode 100755
index 0000000..926dfb8
--- /dev/null
+++ b/apps/samples-spring/build.xml
@@ -0,0 +1,168 @@
+<?xml version="1.0"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+
+
+<project name="samples-spring.war/build.xml" default="main" basedir="../..">
+    <property file="${basedir}/build.properties"/>
+    <property name="samples-spring.war" value="${basedir}/apps/samples-spring"/>
+    <property name="dist.dir" value="${basedir}/dist"/>
+    <property name="src.dir" value="${samples-spring.war}/WEB-INF/src"/>
+    <property name="classes.dir" value="${samples-spring.war}/WEB-INF/classes"/>
+    <property name="context.root" value="samples-spring" />
+    
+    <path id="classpath">
+        <fileset dir="${samples-spring.war}/WEB-INF/lib" includes="**/*.jar"/>        
+        <pathelement location="${servlet.jar}"/>
+    </path>
+
+    <target name="main" depends="clean,samples"/>
+    <target name="samples" depends="prepare,copy-resources,compile"/>
+
+    <target name="prepare">
+        <mkdir dir="${samples-spring.war}/WEB-INF/lib"/>
+        <mkdir dir="${samples-spring.war}/WEB-INF/classes"/>
+    </target>
+
+    <target name="copy-resources">
+        <fail unless="local.sdk.lib.dir" message="must specify local.sdk.lib.dir in server/build.properties"/>
+        <fail unless="local.sdk.frameworks.dir" message="must specify local.sdk.frameworks.dir in build.properties"/>
+
+        <!-- copy to the lib directory -->
+        <copy todir="${samples-spring.war}/WEB-INF/lib">
+            <fileset dir="${basedir}/lib" includes="${webapp.lib}" />
+            <fileset dir="${basedir}/lib/spring" includes="**/*" />
+            <fileset dir="${basedir}/lib/aspectj" includes="**/*" />
+            <fileset file="${hsqldb.jar}" />
+        </copy>
+
+        <!-- copy to sampledb directory -->
+        <copy todir="${basedir}/sampledb">
+            <fileset file="${hsqldb.jar}" />
+        </copy>
+
+        <!-- copy to the classes directory -->
+        <copy todir="${samples-spring.war}/WEB-INF/classes">
+            <fileset dir="${samples-spring.war}/WEB-INF/src">
+                <include name="**/*.xml"/>
+            </fileset>
+            <fileset dir="${basedir}/lib" includes="${webapp.classes}"/>
+        </copy>
+        
+        <!-- create version.properties -->
+        <propertyfile file="${samples-spring.war}/WEB-INF/flex/version.properties">
+            <entry key="build" value="${manifest.Implementation-Version}.${build.number}"/>
+            <entry key="minimumSDKVersion" value="${min.sdk.version}"/>
+        </propertyfile>
+
+    </target>
+
+    <target name="run-depend" if="src.depend">
+        <echo message="Removing class files that changed and dependent class files."/>
+        <depend cache="${classes.dir}" srcdir="${src.dir}" destdir="${classes.dir}"/>
+    </target>
+
+    <target name="compile" depends="prepare,run-depend,copy-resources" description="compile">
+        <javac source="1.5" debug="${src.debug}" destdir="${classes.dir}" srcdir="${src.dir}" classpathref="classpath"/>
+    </target>
+
+    <target name="compile-swfs">
+        <property name="samples.src.dir" value="${samples-spring.war}/WEB-INF/flex-src" />
+        <ant antfile="${samples.src.dir}/chat/build.xml" />
+        <ant antfile="${samples.src.dir}/collaboration/build.xml" />
+        <ant antfile="${samples.src.dir}/companymgr/build.xml" />
+        <ant antfile="${samples.src.dir}/feedstarter/build.xml" />
+        <ant antfile="${samples.src.dir}/insync01/build.xml" />
+        <ant antfile="${samples.src.dir}/insync02/build.xml" />
+        <ant antfile="${samples.src.dir}/insync03/build.xml" />
+        <ant antfile="${samples.src.dir}/insync04/build.xml" />
+        <ant antfile="${samples.src.dir}/insync05/build.xml" />
+        <ant antfile="${samples.src.dir}/insync06/build.xml" />
+        <ant antfile="${samples.src.dir}/simplepush/build.xml" />
+        <ant antfile="${samples.src.dir}/spring-blazeds-101/build.xml" />
+        <ant antfile="${samples.src.dir}/spring-blazeds-security-101/build.xml" />
+        <ant antfile="${samples.src.dir}/traderdesktop/build.xml" />
+    </target>
+
+    <target name="package" depends="compile-swfs" description=" Creates distribution war file">
+
+        <mkdir dir="${dist.dir}"/>
+
+        <!-- 
+        we don't want flex source naked in WEB-INF as that would lead to overlapping eclipse projects
+        instead, zip it up and then put it in the war
+         -->
+        <zip destfile="${samples-spring.war}/WEB-INF/flex-src/flex-src.zip"  
+            comment="${manifest.Implementation-Title} ${manifest.Implementation-Version}.${label} Spring Integration Samples Flex Source Code">
+            <fileset dir="${samples-spring.war}/WEB-INF/flex-src" 
+                excludes="**/build*.xml,flex-src.zip"/>
+        </zip>
+
+        <war file="${dist.dir}/samples-spring.war"
+            webxml="${samples-spring.war}/WEB-INF/web.xml">
+            <manifest>
+                <attribute name="Sealed" value="${manifest.sealed}"/>
+                <attribute name="Implementation-Title" value="${manifest.Implementation-Title} - Spring Integration Samples Application"/>
+                <attribute name="Implementation-Version" value="${manifest.Implementation-Version}.${build.number}"/>
+                <attribute name="Implementation-Vendor" value="${manifest.Implementation-Vendor}"/>
+            </manifest> 
+            <fileset dir="${samples-spring.war}" >
+                <exclude name="**/**/build*.xml" />
+                <exclude name="**/generated/**/*"/>
+                <exclude name="WEB-INF/jsp/**/*" />
+                <exclude name="WEB-INF/sessions/**/*" />
+                <exclude name="WEB-INF/flex-src/**/*" />
+                <!-- This is included in the war task already -->
+                <exclude name="WEB-INF/web.xml" />
+             </fileset>
+             <fileset dir="${samples-spring.war}" includes="WEB-INF/flex-src/flex-src.zip" />
+        </war>
+
+        <copy todir="${dist.dir}/sampledb">
+            <fileset dir="${basedir}/sampledb" />
+            <fileset file="${hsqldb.jar}" />
+        </copy>
+
+    </target>
+
+    <target name="clean" description="--> Removes jars and classes">
+        <delete quiet="true" includeEmptyDirs="true">
+            <fileset dir="${samples-spring.war}/WEB-INF/lib" includes="**/*"/>
+            <fileset dir="${samples-spring.war}/WEB-INF/flex/jars" includes="**/*"/>
+            <fileset dir="${samples-spring.war}/WEB-INF/flex/locale" includes="**/*"/>
+            <fileset dir="${samples-spring.war}/WEB-INF/flex/libs" includes="**/*"/>
+            <fileset dir="${classes.dir}" includes="**/*.class"/>
+            <fileset dir="${basedir}/sampledb" includes="${hsqldb.jar}"/>
+            <fileset file="${dist.dir}/samples-spring.war"/>
+            <fileset file="${samples-spring.war}/WEB-INF/flex-src/flex-src.zip"/>
+            <fileset dir="${samples-spring.war}/sqladmin"/>            
+            <fileset dir="${samples-spring.war}/jmschat"/>
+        </delete>
+    </target>
+
+    <target name="generated-clean">
+        <delete includeEmptyDirs="true" quiet="true">
+            <fileset dir="${samples-spring.war}" includes="**/generated/*" />
+        </delete>
+        <delete includeEmptyDirs="true" quiet="true">
+            <fileset dir="${samples-spring.war}" includes="**/generated" />
+        </delete>
+    </target>
+
+</project>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/index.html
----------------------------------------------------------------------
diff --git a/apps/samples-spring/index.html b/apps/samples-spring/index.html
new file mode 100755
index 0000000..a86cafc
--- /dev/null
+++ b/apps/samples-spring/index.html
@@ -0,0 +1,330 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<title>Spring BlazeDS Integration Test Drive</title>
+<link href="main.css" rel="stylesheet" type="text/css" />
+</head>
+<body>
+
+<h1>Spring  BlazeDS Integration Test Drive</h1>
+<p>The Spring BlazeDS Integration Test Drive  is a set of samples  that gets you   up and running  Flex with BlazeDS and Spring in minutes.</p>
+<div class="highlight">
+  
+  <h2>Samples Index</h2>
+<h4>Remoting</h4>
+<ul>
+<li><a href="#inventory">Spring BlazeDS Integration 101</a>: Demonstrates the basics.</li>
+<li><a href="#insync">inSync Contact Management Application</a>: A simple CRUD application built in eight steps.</li>
+<li><a href="#company">Company Manager</a>: Similar to the inSync application, but uses <strong>annotation-based configuration</strong>. Also demonstrates object associations.</li>
+</ul>
+<h4>Messaging</h4>
+<ul>
+<li><a href="#chat">Chat</a>: Messaging basics</li>
+<li><a href="#simplepush">Simple Data Push</a>: A simple data push example</li>
+<li><a href="#traderdesktop">Traderdesktop</a>: A more sophisticated data push example showing how to use subtopics</li>
+<li><a href="#collaboration">Collaboration</a>: A simple example showing how to use messaging to remotely drive another client's application</li>
+</ul>
+<h4>Security</h4>
+<ul>
+<li><a href="#security">Security integration 101</a></li>
+</ul>
+
+
+
+<h2>Importing the Projects in Flash  Builder 4</h2>
+<p>This step is optional: All the samples in this Test Drive run out-of-the-box. However, if you want to look at/experiment with the source code in the Flash Builder IDE while running the samples, do the following:</p>
+<ol>
+  <li>Unzip the WEB-INF/flex-src/flex-src.zip to a folder, say {FlexSrc}</li>
+  <li>In Flash Builder 4, click <strong>File &gt; Import &gt; General &gt; Existing  Projects into Workspace. </strong></li>
+  <li>Specify the above folder <strong>{FlexSrc}</strong>,  as the root directory and click  finish.<strong></strong></li>
+  </ol>
+<h2>Configuration Walkthrough</h2>
+<p><strong>web.xml</strong></p>
+  <p>In web.xml, the DispatcherServlet is configured to bootstrap  the Spring WebApplicationContext as usual. In this simple configuration, all  the <strong>/messagebroker</strong> requests are mapped to the DispatcherServlet.<br />
+  <p><strong>flex-servlet.xml</strong></p>
+  <p>In flex-servlet.xml, the BlazeDS message broker is  configured as a Spring-managed bean using the simple message-broker tag. This   bootstraps the BlazeDS message broker. <br />
+  With the message-broker in place, the Spring beans are  configured as usual, and exposed for remote access using the remoting-destination  tag. <br />
+  In this Test Drive, we split the configuration into multiple  XML files:</p>
+<ol>
+  <li>The application-specific beans are configured in <strong>spring/app-config.xml</strong> and exposed as  remoting destinations in <strong>flex-servlet.xml.</strong></li>
+  <li>The beans that provide the basic infrastructure  for the application (Database access) are configured in <strong>spring/infrastructure-config.xml</strong>. </li>
+  <li>Security is configured in <strong>spring/security-config.xml</strong>. For the purpose of this introduction, we use a basic  authentication provider. </li>
+</ol>
+<p>In your own web application, you can use a different  configuration arrangement, including single-file configuration.</p>
+</div>
+
+<h2>Remoting Samples</h2>
+
+<a name="inventory"></a>
+<div class="item">
+  <h3>Spring BlazeDS Integration 101</h3>
+  <h4>Run the sample:</h4>
+<ol>
+
+  <li>Click <a href="spring-blazeds-101/index.html">here</a> to run the application.</li>
+  <li>Click &quot;Get Data&quot;:  The DataGrid is populated with  data returned by the findAll() method of the ProductDAO Java class. </li>
+  </ol>
+<h4>Code walkthrough:</h4>
+<p>Open Main.mxml in the spring-blazeds-101 project to look at the source code of the application.</p>
+<p>Open the following files in a text editor to look at the source code for the server side  of the application: </p>
+<ul>
+  <li>{context-root}/WEB-INF/flex-servlet.xml</li>
+  <li>{context-root}/WEB-INF/spring/app-config.xml</li>
+  <li>org/springframework/flex/samples/product/ProducDAO.java</li>
+</ul>
+<p>Note that this  application uses a simplistic DAO implementation with low level JDBC code and no real abstraction. This was done intentionally to provide a bare-bones example that focuses exclusively on the Spring/BlazeDS Integration plumbing. All the other examples of this Test Drive,  use the JdbcTemplate abstraction of the Spring framework to build the data access objects.</p>
+<p>Using RemoteObject, you can directly invoke methods of Java objects  deployed in your application server, and consume the return value. The return value can be a value of a primitive data type, an object, a  collection of objects, an object graph, etc.</p>
+<p>Using the Spring BlazeDS integration, Spring beans are exposed using the remoting-destination tag. The productService bean is defined in app-config.xml and is exposed as a remoting destination in flex-servlet.xml.</p>
+<p>Java objects returned by server-side methods are deserialized into  either dynamic or typed ActionScript objects. This application doesn't have an explicit ActionScript version of the Product Java class. Product objects are therefore deserialized into dynamic objects. In InSync03 below, we start working with strongly typed model objects. </p>
+</div>
+
+<br />
+
+<a name="insync"></a>
+<div class="item">
+  <h3>InSync01: Searching Contacts</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="insync01/index.html">here</a> to run the application.</li>
+  <li>Click the Search button to retrieve all the contacts in the database.</li>
+  <li>Enter a few characters in the Search input field before clicking the Search button in order to search by name.</li>
+  </ol>
+<h4>Code walkthrough:</h4>
+<p>Open insync01.mxml in the insync01 project  to look at the source code of the application.</p>
+<p>Open the following files to look at the source code for the server side  of the application: </p>
+<ul>
+  <li>flex-servlet.xml</li>
+  <li>app-config.xml</li>
+  <li>org/springframework/flex/samples/contact/ContactDAO.java</li>
+</ul>
+</div>
+<br />
+
+<div class="item">
+  <h3>InSync02: Using the RemoteObject Events</h3>
+  <h4>Run the sample:</h4>
+  <p>Click <a href="insync02/index.html">here</a> to run the application.</p>
+<h4>Code walkthrough:</h4>
+<p>Open insync02.mxml in the insync02 project  to look at the source code of the application.</p>
+<p>This version is similar to insync01, but demonstrates how to use the ResultEvent and FaultEvent to have a finer control over RemoteObject calls.<br />
+</p>
+</div>
+<br />
+
+<div class="item">
+  <h3>InSync03: Strong Typing</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="insync03/index.html">here</a> to run the application.</li>
+  <li>Click the Search button to retrieve all the contacts in the database.</li>
+  <li>Enter a few characters in the Search input field before clicking the Search button to search by name.</li>
+  <li>Select a contact in the DataGrid.</li>
+  <li>Edit the contact in the Contact form and click &quot;Save&quot; to persist your changes.</li>
+  </ol>
+<h4>Code walkthrough:</h4>
+<p>Open insync03.mxml, Contact.as, and ContactForm.mxml in the insync03 project to look at the source code of the application.</p>
+<p>In this version, we work with strongly typed contact objects. The Contact.as class is the ActionScript representation of org.springframework.flex.samples.contact.Contact.java. The [RemoteClass(alias=&quot;org.springframework.flex.spring.samples.contact.Contact&quot;)] annotation in Contact.as is used to indicate that instances of Contact.as sent to the server should be deserialized as instances of org.springframework.flex.spring.samples.contact.Contact at the server side, and that similarly, instances of org.springframework.flex.spring.samples.contact.Contact retrieved from the server should be deserialized as instances of Contact.as.<br />
+</p>
+</div>
+<br />
+
+<div class="item">
+  <h3>InSync04: Opening Multiple Contacts</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="insync04/index.html">here</a> to run the application.</li>
+  <li>Click the Search button to retrieve all the contacts in the database.</li>
+  <li>Enter a few characters in the Search input field before clicking the Search button to search by name.</li>
+  <li>Double-click a contact in the DataGrid to open it in a separate Tab.</li>
+  <li>Edit the contact in the Contact form and click &quot;Save&quot; to persist your changes.</li>
+  </ol>
+<h4>Code walkthrough:</h4>
+<p>Open insync04.mxml in the insync04 project  to look at the source code of the application.<br />
+</p>
+</div>
+<br />
+
+<div class="item">
+  <h3>InSync05: Adding New Contacts</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="insync05/index.html">here</a> to run the application.</li>
+  <li>Click the Search button to retrieve all the contacts in the database.</li>
+  <li>Click the New Contact button.</li>
+  <li>Edit the new contact in the Contact form and click &quot;Save&quot; to create the contact.</li>
+  </ol>
+<h4>Code walkthrough:</h4>
+<p>Open insync05.mxml and ContactForm.mxml in the insync05 project to look at the source code of the application.</p>
+<p>This version enables the user of the application to add contacts. In ContactForm, we remotely invoke the create() method of ContactDAO when dealing with a new contact, and the update() method when updating an existing contact.<br />
+</p>
+</div>
+<br />
+
+<div class="item">
+  <h3>InSync06: Adding Event Notification for &quot;Loosely Coupled&quot; UI Synchronization</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="insync06/index.html">here</a> to run the application.</li>
+  <li>Click the Search button to retrieve all the contacts in the database.</li>
+  <li>Enter a few characters in the Search input field before clicking the Search button to search by name.</li>
+  <li>Double-click a contact in the DataGrid to open it in a separate Tab.</li>
+  <li>Modify the first name or last name of the contact and click &quot;Save&quot;. Notice that the DataGrid is updated to reflect your changes.</li>
+  <li>Add a new contact and click &quot;Save&quot; to create the contact. Notice that the contact appears in the DataGrid.</li>
+  <li>Delete a contact and notice that the contact is removed from the DataGrid.</li>
+  </ol>
+<h4>Code walkthrough:</h4>
+<p>Open insync06.mxml, ContactForm.mxml, and ContactEvent.as in the insync06 project  to look at the source code of the application.</p>
+<p>In this version, ContactForm dispatches events when a contact has been created, updated, or deleted. Other components of the application can register as listeners to these events to perform a specific task when a contact is created, updated or deleted. In this case, the main application registers as a listener to these events and refreshes the contact DataGrid to make sure it reflects the changes made in ContactForm.<br />
+</p>
+</div>
+<br />
+
+<a name="company"></a>
+<div class="item">
+  <h3>Company Manager</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="companymgr/index.html">here</a> to run the application.</li>
+  <li>Click the Search button to retrieve all the contacts in the database.</li>
+  <li>Enter a few characters in the Search input field before clicking the Search button to search by name.</li>
+  </ol>
+<h4>Code walkthrough:</h4>
+<p>Open companymgr.mxml, Company.as, Industry.as, and CompanyForm.mxml in the companymgr project to look at the source code of the application.</p>
+<p>Open the following files to look at the source code for the server side  of the application: </p>
+<ul>
+  <li>org/springframework/flex/spring/samples/company/CompanyDAO.java</li>
+  <li>org/springframework/flex/spring/samples/company/IndustryDAO.java</li>
+</ul>
+<p>The CompanyDAO and IndustryDAO beans are not defined in app-config.xml nor exposed in flex-servlet.xml. They are configured using annotations (<code>@Service</code>, 
+  <code>@RemotingDestination</code>, <code>@Autowired</code>, <code>@RemotingInclude</code>, and <code>@RemotingExclude</code>) in the class definition. This application is similar to inSync, but demonstrates object associations: the Company class has a property of type Industry.<br />
+</p>
+</div>
+<br />
+
+<h2>Messaging Samples</h2>
+
+<a name="chat"></a>
+<div class="item">
+  <h3>Chat</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="chat/index.html">here</a> to run the application.</li>
+  <li>Access the same URL in another browser window to open a second instance of the chat application.</li>
+  <li>Type a message in one of the chat clients and click &quot;Send&quot;: the message appears in the two chat clients.</li>
+</ol>
+
+<h4>Code walkthrough:</h4>
+<p>Open chat.mxml in the chat project to look at the source code of the application. The Message Service manages a set of destinations that Flex clients can publish and subscribe to. Flex provides two components, Producer and Consumer, that you use to  publish and subscribe to a destination. To subscribe to a destination, you use the <code>subscribe()</code> method of the Consumer class. When a message is published to a destination that you subscribed to, the <code>message</code> event is triggered on the Consumer.</p>
+
+<p>Open flex-servlet.xml to look at the message service configuration. The message service is configured using  <code>&lt;flex:message-service /&gt;</code> inside <code>&lt;flex:message-broker /&gt;</code>. The &quot;chat&quot; destination is configured using <code>&lt;flex:message-destination id=&quot;chat&quot; /&gt;</code></p>
+</div>
+<br />
+
+<a name="simplepush"></a>
+<div class="item">
+  <h3>Simple Data Push</h3>
+  <h4>Run the sample</h4>
+  <p>This example demonstrates how to use the message service to push data from the server to the client. At the server-side, a Java component publishes simulated real time values to a message destination. The Flex client subscribes to that destination and displays the values in real time. </p>
+  <ol>
+
+  <li>To start the feed at the server-side, run the <a href="feedstarter/index.html">Feed Starter application</a> and start the "Simple Feed".</li>
+  <li>Click <a href="simplepush/index.html">here</a> to run the client application</a>.</li>
+  <li>Click the Subscribe button. Pushed values appear in the text field. You can click the Unsubscribe button to unsubscribe from the destination. </li>
+  <li>To stop the feed when you are done experimenting with the application, access the <a href="feedstarter/index.html">Feed Starter application</a> and stop the "Simple Feed".</li>
+  </ol>
+  <h4>Code walk through</h4>
+  <p>Open simplepush.mxml in the simplepush project to look at the source code of the application.</p>
+  <p>Open the following files to look at the source code for the server side  of the application: </p>
+  <ul>
+    <li>org/springframework/flex/spring/samples/simplefeed/SimpleFeed.Java</li>
+    <li>flex-servlet.xml</li>
+  </ul>
+  <p>In SimpleFeed.java, the MessageTemplate class is used to publish messages to the "simple-feed" destination.</p>
+In flex-servlet.xml, the &quot;simple-feed&quot; destination is configured using <code>&lt;flex:message-destination id=&quot;simple-feed&quot; /&gt;</code></div>
+<br />
+
+<a name="traderdesktop"></a>
+<div class="item">
+  <h3>Traderdesktop</h3>
+  <h4>Run the sample</h4>
+  <p>Traderdesktop is a more sophisticated data push example showing how to  use subtopics to selectively subscribe to specific messages. In this case, the user can subscribe to updates for specific stocks only. At the server side, a Java component publishes simulated market data to a messaging destination.</p>
+  <ol>
+
+  <li>To start the feed  at the server-side, run the <a href="feedstarter/index.html">Feed Starter application</a> and start the "Market Feed".</li>
+  <li>Click <a href="traderdesktop/index.html">here</a> to run the client application</a>.</li>
+  <li>To stop the feed when you are done experimenting with the application, access the <a href="feedstarter/index.html">Feed Starter application</a> and stop the "Market Feed".</li>
+  </ol>
+  <h4>Code walk through</h4>
+  <p>Open traderdesktop.mxml in the traderdesktop project to look at the source code of the application.</p>
+  <p>Open the following files to look at the source code for the server side  of the application: </p>
+  <ul>
+    <li>org/springframework/flex/spring/samples/marketfeed/MarketFeed.Java</li>
+    <li>flex-servlet.xml. The market-feed destination is configured using <code>&lt;flex:message-destination id=&quot;market-feed&quot; allow-subtopics=&quot;true&quot; subtopic-separator=&quot;.&quot; /&gt;</code></li>
+  </ul>
+</div>
+<br />
+
+<a name="collaboration"></a>
+<div class="item">
+  <h3>Collaboration</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="collaboration/index.html">here</a> to run the application.</li>
+  <li>Access the same URL in another browser window to open a second instance of the chat application.</li>
+  <li>Enter some data in one browser and notice that the data appears in the other browser as well.</li>
+  <li>Select another tab in the accordion in one broswer, and notice that the other client's user interface is synchronized accordingly.</li>
+</ol>
+
+<h4>Code walkthrough:</h4>
+<p>Open collaboration.mxml in the collaboration project to look at the source code of the application.</p>
+</div>
+<br />
+
+
+<h2>Security Samples</h2>
+
+<a name="security"></a>
+<div class="item">
+  <h3>Security Integration 101</h3>
+  <h4>Run the sample:</h4>
+<ol>
+  <li>Click <a href="spring-blazeds-security-101/index.html">here</a> to run the application.</li>
+  <li>Click &quot;Get Data&quot; without logging in first: you  get an &quot;Access Denied&quot; exception.</li>
+  <li>Log in (use UserId: john / Password: john), and click &quot;Get Data&quot; again: you should now get the data.</li>
+  <li>Click &quot;Logout&quot; and &quot;Get Data&quot; again: you get the &quot;Access Denied&quot; exception again.</li>
+  <li>If you are already authenticated, you don't have to use the ChannelSet login. For example, access <a href="login.jsp">login.jsp</a>, and logon using john / john. <a href="spring-blazeds-security-101/index.html">Come back to the application</a> and click Get Data without logging in inside the application: you should get the data.</li>
+</ol>
+
+<h4>Code walkthrough:</h4>
+<p>Open Main.mxml in the spring-blazeds-security-101 project to look at the source code of the application.</p>
+<p>Open the following files in a text editor to look at the the server side configuration: </p>
+<ul>
+  <li>app-config.xml</li>
+  <li>security-config.xml</li>  
+</ul>
+
+<p>In app-config.xml, note that the &quot;find*&quot; methods of securedProductService are protected: they can only be accessed by members of ROLE_USER. A basic authentication provider is defined in security-config.xml.<br />
+</p>
+</div>
+
+<br />
+
+</body>
+</html>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/login.jsp
----------------------------------------------------------------------
diff --git a/apps/samples-spring/login.jsp b/apps/samples-spring/login.jsp
new file mode 100755
index 0000000..82f9fa8
--- /dev/null
+++ b/apps/samples-spring/login.jsp
@@ -0,0 +1,64 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<%@ taglib prefix='c' uri='http://java.sun.com/jstl/core_rt' %>
+<%@ page import="org.springframework.security.web.authentication.AbstractProcessingFilter" %>
+<%@ page import="org.springframework.security.web.authentication.AuthenticationProcessingFilter" %>
+<%@ page import="org.springframework.security.core.AuthenticationException" %>
+
+
+
+
+<!-- Not used unless you declare a <form-login login-page="/login.jsp"/> element -->
+
+<html>
+  <head>
+    <title>CUSTOM SPRING SECURITY LOGIN</title>
+  </head>
+
+  <body onload="document.f.j_username.focus();">
+    <h1>CUSTOM SPRING SECURITY LOGIN</h1>
+
+	<P>Valid users:
+	<P>
+	<P>username <b>john</b>, password <b>john</b>
+	<br>username <b>guest</b>, password <b>guest</b>
+	<p>
+
+    <%-- this form-login-page form is also used as the
+         form-error-page to ask for a login again.
+         --%>
+    <c:if test="${not empty param.login_error}">
+      <font color="red">
+        Your login attempt was not successful, try again.<br/><br/>
+        Reason: <c:out value="${SPRING_SECURITY_LAST_EXCEPTION.message}"/>.
+      </font>
+    </c:if>
+
+    <form name="f" action="<c:url value='j_spring_security_check'/>" method="POST">
+      <table>
+        <tr><td>User:</td><td><input type='text' name='j_username' value='<c:if test="${not empty param.login_error}"><c:out value="${SPRING_SECURITY_LAST_USERNAME}"/></c:if>'/></td></tr>
+        <tr><td>Password:</td><td><input type='password' name='j_password'></td></tr>
+        <tr><td><input type="checkbox" name="_spring_security_remember_me"></td><td>Don't ask for my password for two weeks</td></tr>
+
+        <tr><td colspan='2'><input name="submit" type="submit"></td></tr>
+        <tr><td colspan='2'><input name="reset" type="reset"></td></tr>
+      </table>
+
+    </form>
+
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/main.css
----------------------------------------------------------------------
diff --git a/apps/samples-spring/main.css b/apps/samples-spring/main.css
new file mode 100755
index 0000000..7a5406f
--- /dev/null
+++ b/apps/samples-spring/main.css
@@ -0,0 +1,138 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+body {
+	font-family: Verdana, Arial, Helvetica, sans-serif;
+	margin-top: 30px;
+	margin-top: 30px;
+	margin-left: 8%;
+	margin-right: 8%;
+	font-size: 0.8em;
+	color:#444;
+	background-color:#FFFFFF;
+}
+
+h1, h2, h3 {
+	font-family: 'Trebuchet MS', 'Lucida Grande', Verdana, Arial, Sans-Serif;
+	font-weight: bold;
+}
+
+h1 {
+	font-weight: bold;
+	margin-top: 4px;
+	margin-bottom: 12px;
+	font-size: 2em;
+}
+
+h2 {
+	padding-top: 4px;
+	margin-bottom: 0px;
+	font-size: 1.4em;
+	color: #333333;
+	text-transform:uppercase;
+}
+
+h3 {
+	margin-top: 0px;
+	font-size: 1.3em;
+	color: #004477;
+}
+
+h4 {
+	margin-top: 20px;
+	margin-bottom: 8px;
+	font-size: 12px;
+	color: #333333;
+}
+
+.item {
+	border-bottom: 1px solid #CCCCCC;
+	padding-top: 12px;
+	padding-bottom: 12px;
+}
+
+.highlight {
+	border: 1px solid #CCCCCC;
+	padding-top:0px;
+	padding-left:10px;
+	padding-right:10px;
+	padding-bottom:20px;
+	margin-top:0px;
+	margin-bottom:20px;
+}
+
+.footer {
+	color: #666666;
+	margin-top: 20px;
+	font-size: 0.75em;
+}
+
+ul {
+	margin-top:8px;
+	margin-bottom:8px;
+}
+
+li {
+	padding-bottom:8px;
+}
+
+code {
+	color: #000099;
+	font-family: "Courier New", Courier, monospace;
+	font-size:1.1em;
+}
+
+img {
+	border: 0;
+}
+
+#col1{
+  	float:left;
+	width: 20%;
+	padding-right: 24px;
+}
+
+#col2{
+  float: left;
+  width: 55%;
+}
+
+#col3{
+	float: right;
+	width: 20%;
+	margin: 0px;
+	padding: 0px;
+}
+
+a:link {
+	color: #006699;
+	text-decoration: none;
+}
+
+a:visited {
+	text-decoration: none;
+	color: #006699;
+}
+
+a:hover {
+	text-decoration: underline;
+	color: #006699;
+}
+
+a:active {
+	text-decoration: none;
+	color: #006699;
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples-spring/stocklist.xml
----------------------------------------------------------------------
diff --git a/apps/samples-spring/stocklist.xml b/apps/samples-spring/stocklist.xml
new file mode 100755
index 0000000..b464290
--- /dev/null
+++ b/apps/samples-spring/stocklist.xml
@@ -0,0 +1,141 @@
+<!--
+
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+-->
+<portfolio>
+
+	<stock>
+		<symbol>XOM</symbol>
+		<company>Exxon Mobile Corp</company>
+		<last>61.56</last>
+	</stock>
+
+	<stock>
+		<symbol>WMT</symbol>
+		<company>Wal-Mart Stores</company>
+		<last>45.62</last>
+	</stock>
+
+	<stock>
+		<symbol>GM</symbol>
+		<company>General Motors Corporation</company>
+		<last>19.8</last>
+	</stock>
+
+	<stock>
+		<symbol>CVX</symbol>
+		<company>Chevron Corp New</company>
+		<last>58.95</last>
+	</stock>
+
+	<stock>
+		<symbol>COP</symbol>
+		<company>Conocophillips</company>
+		<last>67.14</last>
+	</stock>
+
+	<stock>
+		<symbol>GE</symbol>
+		<company>General Electric Company</company>
+		<last>33.61</last>
+	</stock>
+
+	<stock>
+		<symbol>C</symbol>
+		<company>Citigroup Inc</company>
+		<last>48.18</last>
+	</stock>
+
+	<stock>
+		<symbol>AIG</symbol>
+		<company>American International Group Inc</company>
+		<last>62.92</last>
+	</stock>
+
+	<stock>
+		<symbol>GOOG</symbol>
+		<company>Google Inc</company>
+		<last>417.93</last>
+	</stock>
+
+	<stock>
+		<symbol>ADBE</symbol>
+		<company>Adobe Systems Incorporated</company>
+		<last>39.20</last>
+	</stock>
+
+	<stock>
+		<symbol>JBLU</symbol>
+		<company>JetBlue Airways Corporation</company>
+		<last>10.57</last>
+	</stock>
+
+	<stock>
+		<symbol>COKE</symbol>
+		<company>Coca-Cola Bottling Co. Consolidated</company>
+		<last>48.20</last>
+	</stock>
+
+	<stock>
+		<symbol>GENZ</symbol>
+		<company>Genzyme Corporation</company>
+		<last>61.16</last>
+	</stock>
+
+	<stock>
+		<symbol>YHOO</symbol>
+		<company>Yahoo Inc.</company>
+		<last>32.78</last>
+	</stock>
+
+	<stock>
+		<symbol>IBM</symbol>
+		<company>International Business Machines Corp.</company>
+		<last>82.34</last>
+	</stock>
+
+	<stock>
+		<symbol>BA</symbol>
+		<company>Boeing Company</company>
+		<last>83.45</last>
+	</stock>
+
+	<stock>
+		<symbol>SAP</symbol>
+		<company>SAP AG</company>
+		<last>54.63</last>
+	</stock>
+
+	<stock>
+		<symbol>MOT</symbol>
+		<company>Motorola, Inc.</company>
+		<last>21.35</last>
+	</stock>
+
+	<stock>
+		<symbol>VZ</symbol>
+		<company>Verizon Communications</company>
+		<last>33.03</last>
+	</stock>
+
+	<stock>
+		<symbol>MCD</symbol>
+		<company>McDonald's Corporation</company>
+		<last>34.57</last>
+	</stock>
+
+</portfolio>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples/README.txt
----------------------------------------------------------------------
diff --git a/apps/samples/README.txt b/apps/samples/README.txt
new file mode 100755
index 0000000..16c2166
--- /dev/null
+++ b/apps/samples/README.txt
@@ -0,0 +1,5 @@
+All of the files contained in this directory and any subdirectories are 
+considered "Sample Code" under the terms of the end user license agreement 
+that accompanies this product. Please consult such end user license agreement 
+for details about your rights with respect to such files.
+

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples/WEB-INF/flex-src/dashboard/build.xml
----------------------------------------------------------------------
diff --git a/apps/samples/WEB-INF/flex-src/dashboard/build.xml b/apps/samples/WEB-INF/flex-src/dashboard/build.xml
new file mode 100755
index 0000000..bdeff8c
--- /dev/null
+++ b/apps/samples/WEB-INF/flex-src/dashboard/build.xml
@@ -0,0 +1,85 @@
+<?xml version="1.0"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<project name="samples.war/build.xml" default="main" basedir="../../../../../">
+    
+    <property environment="env" />
+    <property file="${basedir}/build.properties"/>
+    <property name="samples.war" value="${basedir}/apps/samples"/>
+    <property name="context.root" value="samples" />
+    <property name="application.name" value="Collaborative Dashboard" />
+    <property name="application.file" value="dashboard" />
+    <property name="application.bin.dir" value="${samples.war}/${application.file}" />
+    <property name="application.src.dir" value="${samples.war}/WEB-INF/flex-src/${application.file}/src" />
+
+    <target name="main" depends="clean,compile-swf" />
+    
+    <target name="compile-swf">
+
+        <taskdef resource="flexTasks.tasks" classpath="${basedir}/ant/lib/flexTasks.jar" />
+        
+        <property name="FLEX_HOME" value="${basedir}"/>
+
+        <mxmlc file="${application.src.dir}/${application.file}.mxml" 
+            output="${application.bin.dir}/${application.file}.swf"
+            actionscript-file-encoding="UTF-8"
+            keep-generated-actionscript="false"
+            incremental="false"
+            services="${samples.war}/WEB-INF/flex/services-config.xml"
+            context-root="${context.root}"
+            locale="en_US">
+            <load-config filename="${basedir}/frameworks/flex-config.xml"/>
+            <license product="flexbuilder3" serial-number="${env.fb3_license}"/>
+            <source-path path-element="${basedir}/frameworks"/>
+            <external-library-path/>
+            <metadata>
+                <publisher name="${manifest.Implementation-Vendor}" />
+                <creator name="${manifest.Implementation-Vendor}" />
+            </metadata>
+        </mxmlc>
+
+        <html-wrapper title="${application.name}"
+            height="100%"
+            width="100%"
+            application="app"
+            swf="${application.file}"
+            version-major="10"
+            version-minor="0"
+            version-revision="0"
+            express-install="true"
+            output="${application.bin.dir}"/>
+
+        <copy todir="${application.bin.dir}">
+            <fileset dir="${application.src.dir}" includes="results.xml"/>
+        </copy>
+        <copy todir="${application.src.dir}">
+            <fileset dir="${basedir}/frameworks/libs" includes="datavisualization.swc" />
+            <fileset dir="${basedir}/frameworks/locale/en_US" includes="datavisualization_rb.swc" />
+        </copy>
+    </target>
+
+    <target name="clean" description="--> Removes jars and classes">
+        <delete quiet="true" includeemptydirs="true">
+            <fileset dir="${application.bin.dir}" includes="*.swf,index.html"/>
+            <fileset dir="${application.bin.dir}/history/" />
+            <fileset dir="${application.src.dir}" includes="datavisualization*.swc"/>
+        </delete>
+    </target>
+
+</project>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples/WEB-INF/flex-src/dashboard/src/RegionBreakdown.mxml
----------------------------------------------------------------------
diff --git a/apps/samples/WEB-INF/flex-src/dashboard/src/RegionBreakdown.mxml b/apps/samples/WEB-INF/flex-src/dashboard/src/RegionBreakdown.mxml
new file mode 100755
index 0000000..b2f25a8
--- /dev/null
+++ b/apps/samples/WEB-INF/flex-src/dashboard/src/RegionBreakdown.mxml
@@ -0,0 +1,176 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<mx:Panel xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns="*">
+    <fx:Metadata>
+        [Event("regionChange")]
+    </fx:Metadata>
+    
+    <fx:Script>
+        <![CDATA[
+        import mx.charts.HitData;
+
+        public function set month(m:Object):void
+        {
+        	_month = m;
+        	this.title = "Regional Breakdown [" + _month.name + "]";
+    	}
+
+		[Bindable]
+		private var _month:Object;
+
+        private function getSliceLabel(item:Object, arg2:String, arg3:Number, arg4:Number):String
+        {
+            return item==null?"":item.name;
+        }
+
+		private var _selectedRegion:Object;
+		
+        public function get selectedRegion():Object
+        {
+            return _selectedRegion;
+        }
+        
+        public function set selectedRegion(item:Object):void
+        {
+            _selectedRegion = item;
+
+            var index:int = -1;
+            for (var i:int=0; i < _month.region.length && index == -1; i++)
+            {
+                if (_month.region[i].name == item.name)
+                    index = i;
+            }
+            //we only want to explode the selected region
+            var explodeData:Array = [];
+            explodeData[index] = 0.15;
+            pcRegion.series[0].perWedgeExplodeRadius = explodeData;
+        }
+        
+        private function regionChange(item:Object):void
+        {
+            selectedRegion = item;
+            dispatchEvent(new Event("regionChange"));
+        }
+
+        private function dataGridCurrencyFormat(item:Object, column:Object):String
+        {
+            return cf.format(item[column.dataField]);
+        }
+
+        private function formatDataTip(hitData:HitData):String
+        {
+            var name:String = hitData.item.name;
+            var revenue:Number = hitData.item.revenue;
+            return "<b>Region: "+name+"</b><br>Revenue: "+cf.format(revenue);
+        }
+
+        ]]>
+
+    </fx:Script>
+
+    <fx:Declarations>
+    	<mx:CurrencyFormatter id="cf"/>
+
+    	<mx:SeriesInterpolate id="interpolate" elementOffset="10"/>
+    </fx:Declarations>
+
+    <mx:ViewStack id="vs" width="100%" height="100%">
+    
+        <mx:VBox width="100%" height="100%"  icon="@Embed('icon_chart.png')" toolTip="View in Chart" 
+            hideEffect="Fade" showEffect="Fade">
+            <mx:PieChart id="pcRegion" dataProvider="{_month.region}" showDataTips="true" width="100%" height="100%"
+                itemClick="regionChange(event.hitData.item)"
+                dataTipFunction="formatDataTip">
+
+                <mx:series>
+                    <fx:Array>
+                        <mx:PieSeries field="revenue" nameField="name" labelPosition="callout"
+                                      labelFunction="getSliceLabel" showDataEffect="{interpolate}">
+                         <mx:fills>
+	                        <fx:Array>
+	                            <mx:RadialGradient>
+	                                <mx:entries>
+	                                    <fx:Array>
+	                                        <mx:GradientEntry color="#EF7651" ratio="0"/>
+	                                        <mx:GradientEntry color="#994C34" ratio="1"/>
+	                                    </fx:Array>
+	                                </mx:entries>
+	                            </mx:RadialGradient>
+	                            <mx:RadialGradient>
+	                                <mx:entries>
+	                                    <fx:Array>
+	                                        <mx:GradientEntry color="#E9C836" ratio="0"/>
+	                                        <mx:GradientEntry color="#AA9127" ratio="1"/>
+	                                    </fx:Array>
+	                                </mx:entries>
+	                            </mx:RadialGradient>
+	                            <mx:RadialGradient>
+	                                <mx:entries>
+	                                    <fx:Array>
+	                                        <mx:GradientEntry color="#6FB35F" ratio="0"/>
+	                                        <mx:GradientEntry color="#497B54" ratio="1"/>
+	                                    </fx:Array>
+	                                </mx:entries>
+	                            </mx:RadialGradient>
+	                            <mx:RadialGradient>
+	                                <mx:entries>
+	                                    <fx:Array>
+	                                        <mx:GradientEntry color="#A1AECF" ratio="0"/>
+	                                        <mx:GradientEntry color="#47447A" ratio="1"/>
+	                                    </fx:Array>
+	                                </mx:entries>
+	                            </mx:RadialGradient>
+	                            <mx:RadialGradient>
+	                                <mx:entries>
+	                                    <fx:Array>
+	                                        <mx:GradientEntry color="#BA9886" ratio="0"/>
+	                                        <mx:GradientEntry color="#AE775B" ratio="1"/>
+	                                    </fx:Array>
+	                                </mx:entries>
+	                            </mx:RadialGradient>
+	                        </fx:Array>
+	                    </mx:fills>
+	                    </mx:PieSeries>
+                    </fx:Array>
+                </mx:series>
+
+            </mx:PieChart>
+        </mx:VBox>
+
+        <mx:VBox width="100%" height="100%" icon="@Embed('icon_grid.png')" toolTip="View in Grid"
+            hideEffect="Fade" showEffect="Fade">
+            <mx:DataGrid dataProvider="{_month.region}" width="100%" height="100%"
+            	change="regionChange(DataGrid(event.target).selectedItem)">
+                <mx:columns>
+                    <fx:Array>
+                        <mx:DataGridColumn dataField="name" headerText="Region"/>
+                        <mx:DataGridColumn dataField="revenue" headerText="Revenue" labelFunction="dataGridCurrencyFormat" />
+                    </fx:Array>
+                </mx:columns>
+            </mx:DataGrid>
+        </mx:VBox>
+
+    </mx:ViewStack>
+
+    <mx:ControlBar>
+        <mx:ToggleButtonBar dataProvider="{vs}"/>
+    </mx:ControlBar>
+
+</mx:Panel>

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples/WEB-INF/flex-src/dashboard/src/RegionDetail.mxml
----------------------------------------------------------------------
diff --git a/apps/samples/WEB-INF/flex-src/dashboard/src/RegionDetail.mxml b/apps/samples/WEB-INF/flex-src/dashboard/src/RegionDetail.mxml
new file mode 100755
index 0000000..2c01180
--- /dev/null
+++ b/apps/samples/WEB-INF/flex-src/dashboard/src/RegionDetail.mxml
@@ -0,0 +1,175 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<mx:Panel xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns="*"
+	title="Region Details">
+
+    <fx:Script>
+
+        <![CDATA[
+        import mx.charts.HitData;
+        import mx.controls.Alert;
+        import mx.charts.chartClasses.ChartBase;
+        
+        private var _region:String;
+
+        [Bindable]
+        public var revenueData:Array;
+
+        [Bindable]
+        public var selectedMonth:Object;
+
+        protected function monthChange(month:Object):void
+        {
+            selectedMonth = month;
+            dispatchEvent(new Event("monthChange"));
+        }
+
+        protected function currencyFormat(value:Object, arg2:Object, arg3:Object):String
+        {
+            return cf.format(value);
+        }
+
+        private function dataGridCurrencyFormat(item:Object, column:Object):String
+        {
+            return cf.format(item[column.dataField]);
+        }
+
+        private function sortByDates(obj1:Object, obj2:Object):Number
+		{
+			var n:Number = SortUtils.sortByDates(obj1, obj2, "name");
+			return n;
+		}
+
+		public function set region(r:String):void
+		{
+		    _region = r;
+			this.title = "Region Details [" + r + "]";
+		}
+		
+        private function formatDataTip(hitData:HitData):String
+        {
+            var month:String = hitData.item.name;
+            var revenue:Number = hitData.item.revenue;
+            var average:Number = hitData.item.average;
+            return "<b>Month: " + month + "</b><br>" + _region + ": " +
+              cf.format(revenue) + "<br>Average: " + cf.format(average);
+        }
+
+        ]]>
+
+    </fx:Script>
+    
+    <fx:Declarations>
+	<mx:SeriesInterpolate id="interpolate" elementOffset="10"/>
+
+    	<mx:CurrencyFormatter id="cf"/>
+    </fx:Declarations>
+
+    <mx:ViewStack id="vs" width="100%" height="100%">
+
+        <mx:VBox id="chartVBox" width="100%" height="100%" icon="@Embed('icon_chart.png')" toolTip="Chart View"
+            paddingLeft="4" paddingTop="4" paddingBottom="4" paddingRight="4">
+
+			<mx:ColumnChart dataProvider="{revenueData}" width="100%" height="100%" showDataTips="true" dataTipFunction="formatDataTip">
+	
+				<mx:horizontalAxis>
+					<mx:CategoryAxis dataProvider="{revenueData}" categoryField="name"/>
+				</mx:horizontalAxis>
+	
+				<mx:verticalAxis>
+					<mx:LinearAxis maximum="160000" labelFunction="currencyFormat"/>
+				</mx:verticalAxis>
+	
+				<mx:series>
+					<fx:Array>
+						<mx:ColumnSeries yField="revenue" showDataEffect="{interpolate}">
+							<mx:fill>
+								<mx:LinearGradient>
+									<mx:entries>
+										<fx:Array>
+											<mx:GradientEntry color="#C6D5DD" ratio="0" alpha="100"/>
+											<mx:GradientEntry color="#336699" ratio="0.1" alpha="100"/>
+											<mx:GradientEntry color="#24496D" ratio="0.9" alpha="100"/>
+											<mx:GradientEntry color="#000000" ratio="1" alpha="100"/>
+										</fx:Array>
+									</mx:entries>
+								</mx:LinearGradient>
+							</mx:fill>
+						</mx:ColumnSeries>
+	
+	
+						<mx:LineSeries yField="average" form="curve" showDataEffect="{interpolate}">
+							<mx:stroke>
+<!-- SDK4 -->
+							<mx:SolidColorStroke color="#708EA4" weight="1"/>
+<!-- SDK3							
+							<mx:Stroke color="#708EA4" weight="1"/>
+-->
+							</mx:stroke>
+
+						</mx:LineSeries>
+						
+					</fx:Array>
+				</mx:series>
+	
+				<mx:backgroundElements>
+					<fx:Array>
+<!-- SDK4 -->			
+                    <mx:GridLines gridDirection="both"> 
+<!-- SDK3 
+			        <mx:GridLines direction="both"> -->
+							<mx:verticalStroke>
+<!-- SDK4 -->
+								<mx:SolidColorStroke weight="1" color="#CCCCCC"/>
+<!-- SDK3
+								<mx:Stroke weight="1" color="#CCCCCC"/>
+-->
+							</mx:verticalStroke>
+						</mx:GridLines>
+					</fx:Array>
+				</mx:backgroundElements>
+	
+			</mx:ColumnChart>
+		</mx:VBox>
+
+        <mx:VBox width="100%" height="100%" icon="@Embed('icon_grid.png')" toolTip="Grid View" 
+            hideEffect="Fade" showEffect="Fade">
+            <mx:DataGrid dataProvider="{revenueData}" width="100%" height="100%"
+            	change="monthChange(DataGrid(event.target).selectedItem)">
+                <mx:columns>
+                    <fx:Array>
+                        <mx:DataGridColumn dataField="name" headerText="Month"
+                            sortCompareFunction="sortByDates" />
+                        <mx:DataGridColumn dataField="revenue" headerText="Total Revenue"
+                            labelFunction="dataGridCurrencyFormat" />
+                        <mx:DataGridColumn dataField="average" headerText="Average Across Regions"
+                            labelFunction="dataGridCurrencyFormat" />
+                    </fx:Array>
+                </mx:columns>
+            </mx:DataGrid>
+        </mx:VBox>
+
+	</mx:ViewStack>
+
+    <mx:ControlBar>
+        <mx:ToggleButtonBar dataProvider="{vs}"/>
+    </mx:ControlBar>
+
+</mx:Panel>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples/WEB-INF/flex-src/dashboard/src/RevenueTimeline.mxml
----------------------------------------------------------------------
diff --git a/apps/samples/WEB-INF/flex-src/dashboard/src/RevenueTimeline.mxml b/apps/samples/WEB-INF/flex-src/dashboard/src/RevenueTimeline.mxml
new file mode 100755
index 0000000..41e4619
--- /dev/null
+++ b/apps/samples/WEB-INF/flex-src/dashboard/src/RevenueTimeline.mxml
@@ -0,0 +1,134 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<mx:ViewStack xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns="*" width="100%" height="100%">
+
+    <fx:Script>
+
+        <![CDATA[
+        import mx.charts.HitData;
+        
+        [Bindable]
+        public var revenueData:Array;
+
+        [Bindable]
+        public var selectedMonth:Object;
+
+		private var colors:Array = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0x00FFFF];
+
+        protected function monthChange(month:Object):void
+        {
+            selectedMonth = month;
+            dispatchEvent(new Event("monthChange"));
+        }
+
+        protected function currencyFormat(value:Object, arg2:Object, arg3:Object):String
+        {
+            return cf.format(value);
+        }
+
+        private function dataGridCurrencyFormat(item:Object, column:Object):String
+        {
+            return cf.format(item[column.dataField]);
+        }
+
+        private function sortByDates(obj1:Object, obj2:Object):Number
+		{
+			var n:Number = SortUtils.sortByDates(obj1, obj2, "name");
+			return n;
+		}
+
+        private function formatDataTip(hitData:HitData):String
+        {
+            var name:String = hitData.item.name;
+            var revenue:Number = hitData.item.revenue;
+            return "<b>Month: "+name+"</b><br>Revenue: "+cf.format(revenue);
+        }
+        
+        ]]>
+
+    </fx:Script>
+
+    <fx:Metadata>
+        [Event("monthChange")]
+    </fx:Metadata>
+
+    <fx:Declarations>
+	<mx:SeriesInterpolate id="interpolate" elementOffset="10"/>
+
+    	<mx:CurrencyFormatter id="cf"/>
+    </fx:Declarations>
+
+    <mx:VBox id="chartVBox" width="100%" height="100%" icon="@Embed('icon_chart.png')" toolTip="Chart View" 
+    	paddingLeft="4" paddingTop="4" paddingBottom="4" paddingRight="4">
+		<mx:LineChart id="lc" dataProvider="{revenueData}" showDataTips="true" width="100%" height="100%" dataTipFunction="formatDataTip"
+			itemClick="monthChange(event.hitData.item)">
+
+			<mx:horizontalAxis>
+				<mx:CategoryAxis dataProvider="{revenueData}" categoryField="name"/>
+			</mx:horizontalAxis>
+
+			<mx:verticalAxis>
+				<mx:LinearAxis labelFunction="currencyFormat"/>
+			</mx:verticalAxis>
+
+			<mx:series>
+				<mx:LineSeries yField="revenue"  showDataEffect="{interpolate}">
+					<mx:lineStroke>
+						<mx:SolidColorStroke color="#708EA4" weight="1"/>
+					</mx:lineStroke>
+				</mx:LineSeries>
+				<mx:LineSeries yField="license"  showDataEffect="{interpolate}">
+					<mx:lineStroke>
+						<mx:SolidColorStroke weight="1"/>
+					</mx:lineStroke>
+				</mx:LineSeries>
+			</mx:series>
+
+			<mx:backgroundElements>
+				<fx:Array>
+<!-- SDK4 -->		
+                    <mx:GridLines gridDirection="both"> 
+<!-- SDK3 
+			        <mx:GridLines direction="both"> -->
+						<mx:verticalStroke>
+							<mx:SolidColorStroke weight="1" color="#CCCCCC"/>
+						</mx:verticalStroke>
+					</mx:GridLines>
+				</fx:Array>
+			</mx:backgroundElements>
+
+		</mx:LineChart>
+	</mx:VBox>
+
+    <mx:VBox width="100%" height="100%" icon="@Embed('icon_grid.png')" toolTip="Grid View">
+        <mx:DataGrid dataProvider="{revenueData}" width="100%" height="100%"
+        	change="monthChange(DataGrid(event.target).selectedItem)">
+            <mx:columns>
+                <mx:DataGridColumn dataField="name" headerText="Month"
+                    sortCompareFunction="sortByDates" />
+                <mx:DataGridColumn dataField="revenue" headerText="Total Revenue"
+                    labelFunction="dataGridCurrencyFormat" />
+                <mx:DataGridColumn dataField="average" headerText="Region Average"
+                    labelFunction="dataGridCurrencyFormat" />
+            </mx:columns>
+        </mx:DataGrid>
+    </mx:VBox>
+
+</mx:ViewStack>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/7a58369c/apps/samples/WEB-INF/flex-src/dashboard/src/SortUtils.as
----------------------------------------------------------------------
diff --git a/apps/samples/WEB-INF/flex-src/dashboard/src/SortUtils.as b/apps/samples/WEB-INF/flex-src/dashboard/src/SortUtils.as
new file mode 100755
index 0000000..a461df1
--- /dev/null
+++ b/apps/samples/WEB-INF/flex-src/dashboard/src/SortUtils.as
@@ -0,0 +1,62 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package {
+
+import mx.utils.ObjectUtil;
+
+public class SortUtils
+{
+    //lookup the index based on month abbreviation
+    static public var monthMap:Object = {
+      Jan: 0,
+      Feb: 1,
+      Mar: 2,
+      Apr: 3,
+      May: 4,
+      Jun: 5,
+      Jul: 6,
+      Aug: 7,
+      Sep: 8,
+      Oct: 9,
+      Nov: 10,
+      Dec: 11
+    };
+
+    public function SortUtils()
+    {
+        super();
+    }
+
+     static public function sortByDates(obj1:Object, obj2:Object, prop:String):Number
+     {
+         var month:String = obj1[prop].substr(0,3);
+         var month1:Number = monthMap[month];
+         var year1:String = "20" + obj1[prop].substr(4,2);
+         month = obj2[prop].substr(0,3);
+         var month2:Number = monthMap[month];
+         var year2:String = "20" + obj2[prop].substr(4,2);
+         var date1:Date = new Date(Number(year1), month1, 01);
+         var date2:Date = new Date(Number(year2), month2, 01);
+
+         return ObjectUtil.dateCompare(date1, date2);
+    }
+
+}
+
+}


Mime
View raw message