initial checkin from dm Server sample-greenpages repository commit 2216c74dd71e11f7cb59cde5c83987bc39e6724b
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1de5659
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+target
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..1f9ea18
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "virgo-build"]
+ path = virgo-build
+ url = git://git.eclipse.org/gitroot/virgo/org.eclipse.virgo.virgo-build.git
diff --git a/build-greenpages/build.xml b/build-greenpages/build.xml
new file mode 100644
index 0000000..a43aa76
--- /dev/null
+++ b/build-greenpages/build.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="build-greenpages" default="package">
+
+ <path id="bundles"/>
+
+ <property name="integration.repo.dir" value="${basedir}/../integration-repo"/>
+ <property name="ivy.cache.dir" value="${basedir}/../ivy-cache"/>
+ <property file="${basedir}/../build.properties"/>
+ <property file="${basedir}/../build.versions"/>
+ <import file="${basedir}/package-top-level.xml"/>
+ <import file="${basedir}/publish-top-level.xml"/>
+ <import file="${basedir}/../virgo-build/multi-bundle/default.xml"/>
+
+</project>
diff --git a/build-greenpages/package-top-level.xml b/build-greenpages/package-top-level.xml
new file mode 100644
index 0000000..1c18083
--- /dev/null
+++ b/build-greenpages/package-top-level.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="package-top-level">
+
+ <target name="package" description="Creates the release package for this project">
+ <delete dir="${package.output.dir}" quiet="true"/>
+ <mkdir dir="${package.output.dir}"/>
+ <delete file="${package.output.file}" quiet="true"/>
+ <mkdir dir="${artifacts.dir}"/>
+
+ <copy todir="${package.output.dir}">
+ <fileset dir="${basedir}/resources"/>
+ </copy>
+
+ <copy todir="${package.output.dir}">
+ <fileset dir="${basedir}/..">
+ <include name="db/**"/>
+ <include name="start/**"/>
+ <include name="solution/**"/>
+ <exclude name="**/target/**"/>
+ </fileset>
+ </copy>
+
+ <chmod perm="755">
+ <fileset dir="${package.output.dir}">
+ <include name="**/*.sh"/>
+ </fileset>
+ </chmod>
+
+ <zip destfile="${package.output.file}">
+ <zipfileset dir="${package.dir}" includes="${package.basename}/**/*.sh" filemode="755"/>
+ <zipfileset dir="${package.dir}" excludes="${package.basename}/**/*.sh"/>
+ </zip>
+ </target>
+
+</project>
diff --git a/build-greenpages/publish-top-level.xml b/build-greenpages/publish-top-level.xml
new file mode 100644
index 0000000..321c87c
--- /dev/null
+++ b/build-greenpages/publish-top-level.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project name="publish-top-level">
+
+ <target name="publish" depends="publish-package"
+ description="Publishes the package artifact"/>
+
+</project>
\ No newline at end of file
diff --git a/build-greenpages/resources/About.html b/build-greenpages/resources/About.html
new file mode 100644
index 0000000..9e8bc96
--- /dev/null
+++ b/build-greenpages/resources/About.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- saved from url=(0047)http://www.eclipse.org/legal/epl/longabout.html -->
+<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+
+<TITLE>About</TITLE>
+</HEAD><BODY lang="EN-US">
+<H2>About This Content</H2>
+
+<P><<EM>insert current release date here, e.g., June 5, 2007</EM>></P>
+<H3>License</H3>
+
+<P>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <A href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</A>.
+For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <A href="http://www.eclipse.org/">http://www.eclipse.org</A>.</P>
+
+
+ <H3>Third Party Content</H3>
+ <P>The Content includes items that have been sourced from third parties as set out below. If you
+ did not receive this Content directly from the Eclipse Foundation, the following is provided
+ for informational purposes only, and you should look to the Redistributor's license for
+ terms and conditions of use.</P>
+ <P><EM>
+ <STRONG>Replace these sections with the relevant content, as described below. One section
+ will be required for each third-party component contained within the plug-in</STRONG><BR><BR>
+ <STRONG>Name of first package including version number</STRONG> <BR><BR>
+ Please include in this section information about the package including
+ where it was obtained from, outbound licensing
+ terms and notices that may apply, and anything else necessary to meet the obligations of
+ redistribution (and possibly modification, etc.) under the inbound license. If the source
+ code for the package is not available at eclipse.org, please include instructions on how to
+ get it regardless of whether you are obligated to do so by the license.
+ <BR><BR>
+ <STRONG>Name of second package including version number</STRONG><BR><BR>
+ Please include in this section information about the package including
+ where it was obtained from, outbound licensing
+ terms and notices that may apply, and anything else necessary to meet the obligations of
+ redistribution (and possibly modification, etc.) under the inbound license. If the source
+ code for the package is not available at eclipse.org, please include instructions on how to
+ get it regardless of whether you are obligated to do so by the license.
+ </EM></P>
+
+ <h4>
+ <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache License 2.0</a>
+ </h4>
+ <ul>
+ <li>Apache Commons IO
+ </li>
+ <li>Apache Commons Logging
+ </li>
+ <li>Apache Felix Configuration Admin
+ </li>
+ <li>Apache Felix Event Admin
+ </li>
+ <li>Apache Felix Log Service
+ </li>
+ <li>Apache Standard Taglibs
+ </li>
+ <li>Apache Tomcat
+ </li>
+ <li>Spring Dynamic Modules
+ </li>
+ <li>Spring Framework
+ </li>
+ </ul>
+ <h4>
+ <a href="http://www.sun.com/cddl/cddl.html">Common Development and Distribution License 1.0</a>
+ </h4>
+ <ul>
+ <li>javax.activation
+ </li>
+ <li>javax.annotation
+ </li>
+ <li>javax.ejb
+ </li>
+ <li>javax.el
+ </li>
+ <li>javax.jms
+ </li>
+ <li>javax.mail
+ </li>
+ <li>javax.persistence
+ </li>
+ <li>javax.servlet
+ </li>
+ <li>javax.servlet.jsp
+ </li>
+ <li>javax.servlet.jsp.jstl
+ </li>
+ <li>javax.transaction
+ </li>
+ <li>javax.xml.bind
+ </li>
+ <li>javax.xml.rpc
+ </li>
+ <li>javax.xml.soap
+ </li>
+ <li>javax.xml.stream
+ </li>
+ <li>javax.xml.ws
+ </li>
+ </ul>
+ <h4>
+ <a href="http://asm.objectweb.org/license.html">ASM License</a>
+ </h4>
+ <ul>
+ <li>ASM
+ </li>
+ </ul>
+ <h4>
+ <a href="http://www.slf4j.org/license.html">SLF4J License</a>
+ </h4>
+ <ul>
+ <li>SLF4J
+ </li>
+ </ul>
+
+
+
+</BODY></HTML>
\ No newline at end of file
diff --git a/build-greenpages/resources/about_files/LICENSE-AspectJ.html b/build-greenpages/resources/about_files/LICENSE-AspectJ.html
new file mode 100644
index 0000000..8f7d0a4
--- /dev/null
+++ b/build-greenpages/resources/about_files/LICENSE-AspectJ.html
@@ -0,0 +1,91 @@
+<html>
+
+<head>
+<title>AspectJ License</title>
+
+
+</head>
+
+<BODY BGCOLOR="white">
+
+<h2 align="center"><b>AspectJ<sup><small>TM</small></sup>
+ Compiler and Core Tools License</b></h2>
+
+<p>This is a binary-only release. Source code
+is available from
+<a href="http://eclipse.org/aspectj">http://eclipse.org/aspectj</a></p>
+
+<p>The Eclipse Foundation makes available all content in this distribution ("Content").
+ Unless otherwise indicated below, the Content is provided to you under the terms and conditions of the
+ Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+ at <a href="../../org/documents/epl-v10.php">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+ <p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+ being redistributed by another party ("Redistributor") and different terms and conditions may
+ apply to your use of any object code in the Content. Check the Redistributor's license
+ that was provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+ indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+ and such source code may be obtained at <a href="/">http://www.eclipse.org</a>.</p>
+
+
+ <h3>Third Party Content</h3>
+ <p>The Content includes items that have been sourced from third parties as set out below. If you
+ did not receive this Content directly from the Eclipse Foundation, the following is provided
+ for informational purposes only, and you should look to the Redistributor?s license for
+ terms and conditions of use.</p>
+ <em>
+
+ <h4>BCEL v5.1</h4>
+ <p>This product contains software developed by the
+ Apache Software Foundation (<a href="http://www.apache.org/">http://www.apache.org</a>).</p>
+
+ <p>AspectJ includes a modified version of the Apache Jakarta Byte Code Engineering Library (BCEL) v5.1.
+ BCEL is available at <a href="http://jakarta.apache.org/bcel/">http://jakarta.apache.org/bcel/</a>. Source
+ code for the modified version of BCEL is available at Eclipse.org in the AspectJ source tree. This code
+ is made available under the Apache Software License v1.1</p>
+
+ <h4>ASM v2.2.1</h4>
+ <p>AspectJ includes a binary version of ASM v2.2.1 (<a href="http://asm.objectweb.org/index.html">http://asm.objectweb.org/</a>)
+ The source code for ASM is available from the ObjectWeb download site at
+ <a href="http://asm.objectweb.org/download/">http://asm.objectweb.org/download/</a>.
+ <p>The ASM license is available at <a href="http://asm.objectweb.org/license.html">http://asm.objectweb.org/license.html</a>.
+ The license is also reproduced here:
+ </p>
+
+<pre>Copyright (c) 2000-2005 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
+</pre>
+
+</em>
+
+</body>
+
+</html>
diff --git a/build-greenpages/resources/about_files/apache-v20.txt b/build-greenpages/resources/about_files/apache-v20.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/build-greenpages/resources/about_files/apache-v20.txt
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ 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.
diff --git a/build-greenpages/resources/about_files/asm.txt b/build-greenpages/resources/about_files/asm.txt
new file mode 100644
index 0000000..75ad085
--- /dev/null
+++ b/build-greenpages/resources/about_files/asm.txt
@@ -0,0 +1,29 @@
+Copyright (c) 2000-2005 INRIA, France Telecom
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holders nor the names of its
+ contributors may be used to endorse or promote products derived from
+ this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/build-greenpages/resources/about_files/cddl-10.txt b/build-greenpages/resources/about_files/cddl-10.txt
new file mode 100644
index 0000000..3bc759f
--- /dev/null
+++ b/build-greenpages/resources/about_files/cddl-10.txt
@@ -0,0 +1,382 @@
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+Thu, 2007-06-07 16:10 — nelson
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+1.1. "Contributor" means each individual or entity that
+creates or contributes to the creation of Modifications.
+
+1.2. "Contributor Version" means the combination of the
+Original Software, prior Modifications used by a
+Contributor (if any), and the Modifications made by that
+particular Contributor.
+
+1.3. "Covered Software" means (a) the Original Software, or
+(b) Modifications, or (c) the combination of files
+containing Original Software with files containing
+Modifications, in each case including portions thereof.
+
+1.4. "Executable" means the Covered Software in any form
+other than Source Code.
+
+1.5. "Initial Developer" means the individual or entity
+that first makes Original Software available under this
+License.
+
+1.6. "Larger Work" means a work which combines Covered
+Software or portions thereof with code not governed by the
+terms of this License.
+
+1.7. "License" means this document.
+
+1.8. "Licensable" means having the right to grant, to the
+maximum extent possible, whether at the time of the initial
+grant or subsequently acquired, any and all of the rights
+conveyed herein.
+
+1.9. "Modifications" means the Source Code and Executable
+form of any of the following:
+
+A. Any file that results from an addition to,
+deletion from or modification of the contents of a
+file containing Original Software or previous
+Modifications;
+
+B. Any new file that contains any part of the
+Original Software or previous Modification; or
+
+C. Any new file that is contributed or otherwise made
+available under the terms of this License.
+
+1.10. "Original Software" means the Source Code and
+Executable form of computer software code that is
+originally released under this License.
+
+1.11. "Patent Claims" means any patent claim(s), now owned
+or hereafter acquired, including without limitation,
+method, process, and apparatus claims, in any patent
+Licensable by grantor.
+
+1.12. "Source Code" means (a) the common form of computer
+software code in which modifications are made and (b)
+associated documentation included in or with such code.
+
+1.13. "You" (or "Your") means an individual or a legal
+entity exercising rights under, and complying with all of
+the terms of, this License. For legal entities, "You"
+includes any entity which controls, is controlled by, or is
+under common control with You. For purposes of this
+definition, "control" means (a) the power, direct or
+indirect, to cause the direction or management of such
+entity, whether by contract or otherwise, or (b) ownership
+of more than fifty percent (50%) of the outstanding shares
+or beneficial ownership of such entity.
+
+2. License Grants.
+
+2.1. The Initial Developer Grant.
+
+Conditioned upon Your compliance with Section 3.1 below and
+subject to third party intellectual property claims, the
+Initial Developer hereby grants You a world-wide,
+royalty-free, non-exclusive license:
+
+(a) under intellectual property rights (other than
+patent or trademark) Licensable by Initial Developer,
+to use, reproduce, modify, display, perform,
+sublicense and distribute the Original Software (or
+portions thereof), with or without Modifications,
+and/or as part of a Larger Work; and
+
+(b) under Patent Claims infringed by the making,
+using or selling of Original Software, to make, have
+made, use, practice, sell, and offer for sale, and/or
+otherwise dispose of the Original Software (or
+portions thereof).
+
+(c) The licenses granted in Sections 2.1(a) and (b)
+are effective on the date Initial Developer first
+distributes or otherwise makes the Original Software
+available to a third party under the terms of this
+License.
+
+(d) Notwithstanding Section 2.1(b) above, no patent
+license is granted: (1) for code that You delete from
+the Original Software, or (2) for infringements
+caused by: (i) the modification of the Original
+Software, or (ii) the combination of the Original
+Software with other software or devices.
+
+2.2. Contributor Grant.
+
+Conditioned upon Your compliance with Section 3.1 below and
+subject to third party intellectual property claims, each
+Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than
+patent or trademark) Licensable by Contributor to
+use, reproduce, modify, display, perform, sublicense
+and distribute the Modifications created by such
+Contributor (or portions thereof), either on an
+unmodified basis, with other Modifications, as
+Covered Software and/or as part of a Larger Work; and
+
+(b) under Patent Claims infringed by the making,
+using, or selling of Modifications made by that
+Contributor either alone and/or in combination with
+its Contributor Version (or portions of such
+combination), to make, use, sell, offer for sale,
+have made, and/or otherwise dispose of: (1)
+Modifications made by that Contributor (or portions
+thereof); and (2) the combination of Modifications
+made by that Contributor with its Contributor Version
+(or portions of such combination).
+
+(c) The licenses granted in Sections 2.2(a) and
+2.2(b) are effective on the date Contributor first
+distributes or otherwise makes the Modifications
+available to a third party.
+
+(d) Notwithstanding Section 2.2(b) above, no patent
+license is granted: (1) for any code that Contributor
+has deleted from the Contributor Version; (2) for
+infringements caused by: (i) third party
+modifications of Contributor Version, or (ii) the
+combination of Modifications made by that Contributor
+with other software (except as part of the
+Contributor Version) or other devices; or (3) under
+Patent Claims infringed by Covered Software in the
+absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+3.1. Availability of Source Code.
+
+Any Covered Software that You distribute or otherwise make
+available in Executable form must also be made available in
+Source Code form and that Source Code form must be
+distributed only under the terms of this License. You must
+include a copy of this License with every copy of the
+Source Code form of the Covered Software You distribute or
+otherwise make available. You must inform recipients of any
+such Covered Software in Executable form as to how they can
+obtain such Covered Software in Source Code form in a
+reasonable manner on or through a medium customarily used
+for software exchange.
+
+3.2. Modifications.
+
+The Modifications that You create or to which You
+contribute are governed by the terms of this License. You
+represent that You believe Your Modifications are Your
+original creation(s) and/or You have sufficient rights to
+grant the rights conveyed by this License.
+
+3.3. Required Notices.
+
+You must include a notice in each of Your Modifications
+that identifies You as the Contributor of the Modification.
+You may not remove or alter any copyright, patent or
+trademark notices contained within the Covered Software, or
+any notices of licensing or any descriptive text giving
+attribution to any Contributor or the Initial Developer.
+
+3.4. Application of Additional Terms.
+
+You may not offer or impose any terms on any Covered
+Software in Source Code form that alters or restricts the
+applicable version of this License or the recipients'
+rights hereunder. You may choose to offer, and to charge a
+fee for, warranty, support, indemnity or liability
+obligations to one or more recipients of Covered Software.
+However, you may do so only on Your own behalf, and not on
+behalf of the Initial Developer or any Contributor. You
+must make it absolutely clear that any such warranty,
+support, indemnity or liability obligation is offered by
+You alone, and You hereby agree to indemnify the Initial
+Developer and every Contributor for any liability incurred
+by the Initial Developer or such Contributor as a result of
+warranty, support, indemnity or liability terms You offer.
+
+3.5. Distribution of Executable Versions.
+
+You may distribute the Executable form of the Covered
+Software under the terms of this License or under the terms
+of a license of Your choice, which may contain terms
+different from this License, provided that You are in
+compliance with the terms of this License and that the
+license for the Executable form does not attempt to limit
+or alter the recipient's rights in the Source Code form
+from the rights set forth in this License. If You
+distribute the Covered Software in Executable form under a
+different license, You must make it absolutely clear that
+any terms which differ from this License are offered by You
+alone, not by the Initial Developer or Contributor. You
+hereby agree to indemnify the Initial Developer and every
+Contributor for any liability incurred by the Initial
+Developer or such Contributor as a result of any such terms
+You offer.
+
+3.6. Larger Works.
+
+You may create a Larger Work by combining Covered Software
+with other code not governed by the terms of this License
+and distribute the Larger Work as a single product. In such
+a case, You must make sure the requirements of this License
+are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+4.1. New Versions.
+
+Sun Microsystems, Inc. is the initial license steward and
+may publish revised and/or new versions of this License
+from time to time. Each version will be given a
+distinguishing version number. Except as provided in
+Section 4.3, no one other than the license steward has the
+right to modify this License.
+
+4.2. Effect of New Versions.
+
+You may always continue to use, distribute or otherwise
+make the Covered Software available under the terms of the
+version of the License under which You originally received
+the Covered Software. If the Initial Developer includes a
+notice in the Original Software prohibiting it from being
+distributed or otherwise made available under any
+subsequent version of the License, You must distribute and
+make the Covered Software available under the terms of the
+version of the License under which You originally received
+the Covered Software. Otherwise, You may also choose to
+use, distribute or otherwise make the Covered Software
+available under the terms of any subsequent version of the
+License published by the license steward.
+
+4.3. Modified Versions.
+
+When You are an Initial Developer and You want to create a
+new license for Your Original Software, You may create and
+use a modified version of this License if You: (a) rename
+the license and remove any references to the name of the
+license steward (except to note that the license differs
+from this License); and (b) otherwise make it clear that
+the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS"
+BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED
+SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR
+PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND
+PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY
+COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
+INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF
+ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF
+WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS
+DISCLAIMER.
+
+6. TERMINATION.
+
+6.1. This License and the rights granted hereunder will
+terminate automatically if You fail to comply with terms
+herein and fail to cure such breach within 30 days of
+becoming aware of the breach. Provisions which, by their
+nature, must remain in effect beyond the termination of
+this License shall survive.
+
+6.2. If You assert a patent infringement claim (excluding
+declaratory judgment actions) against Initial Developer or
+a Contributor (the Initial Developer or Contributor against
+whom You assert such claim is referred to as "Participant")
+alleging that the Participant Software (meaning the
+Contributor Version where the Participant is a Contributor
+or the Original Software where the Participant is the
+Initial Developer) directly or indirectly infringes any
+patent, then any and all rights granted directly or
+indirectly to You by such Participant, the Initial
+Developer (if the Initial Developer is not the Participant)
+and all Contributors under Sections 2.1 and/or 2.2 of this
+License shall, upon 60 days notice from Participant
+terminate prospectively and automatically at the expiration
+of such 60 day notice period, unless if within such 60 day
+period You withdraw Your claim with respect to the
+Participant Software against such Participant either
+unilaterally or pursuant to a written agreement with
+Participant.
+
+6.3. In the event of termination under Sections 6.1 or 6.2
+above, all end user licenses that have been validly granted
+by You or any distributor hereunder prior to termination
+(excluding licenses granted to You by any distributor)
+shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+(INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE
+INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF
+COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE
+LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR
+CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT
+LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK
+STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL
+INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT
+APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
+NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR
+CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT
+APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+The Covered Software is a "commercial item," as that term is
+defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial
+computer software" (as that term is defined at 48 C.F.R. ¤
+252.227-7014(a)(1)) and "commercial computer software
+documentation" as such terms are used in 48 C.F.R. 12.212 (Sept.
+1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1
+through 227.7202-4 (June 1995), all U.S. Government End Users
+acquire Covered Software with only those rights set forth herein.
+This U.S. Government Rights clause is in lieu of, and supersedes,
+any other FAR, DFAR, or other clause or provision that addresses
+Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+This License represents the complete agreement concerning subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the
+extent necessary to make it enforceable. This License shall be
+governed by the law of the jurisdiction specified in a notice
+contained within the Original Software (except to the extent
+applicable law, if any, provides otherwise), excluding such
+jurisdiction's conflict-of-law provisions. Any litigation
+relating to this License shall be subject to the jurisdiction of
+the courts located in the jurisdiction and venue specified in a
+notice contained within the Original Software, with the losing
+party responsible for costs, including, without limitation, court
+costs and reasonable attorneys' fees and expenses. The
+application of the United Nations Convention on Contracts for the
+International Sale of Goods is expressly excluded. Any law or
+regulation which provides that the language of a contract shall
+be construed against the drafter shall not apply to this License.
+You agree that You alone are responsible for compliance with the
+United States export administration regulations (and the export
+control laws and regulation of any other countries) when You use,
+distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+As between Initial Developer and the Contributors, each party is
+responsible for claims and damages arising, directly or
+indirectly, out of its utilization of rights under this License
+and You agree to work with Initial Developer and Contributors to
+distribute such responsibility on an equitable basis. Nothing
+herein is intended or shall be deemed to constitute any admission
+of liability.
diff --git a/build-greenpages/resources/about_files/slf4j.txt b/build-greenpages/resources/about_files/slf4j.txt
new file mode 100644
index 0000000..371607c
--- /dev/null
+++ b/build-greenpages/resources/about_files/slf4j.txt
@@ -0,0 +1,20 @@
+Copyright (c) 2004-2008 QOS.ch
+All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/build-greenpages/resources/epl-v10.html b/build-greenpages/resources/epl-v10.html
new file mode 100644
index 0000000..4da2302
--- /dev/null
+++ b/build-greenpages/resources/epl-v10.html
@@ -0,0 +1,258 @@
+<!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>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+ body {
+ size: 8.5in 11.0in;
+ margin: 0.25in 0.5in 0.25in 0.5in;
+ tab-interval: 0.5in;
+ }
+ p {
+ margin-left: auto;
+ margin-top: 0.5em;
+ margin-bottom: 0.5em;
+ }
+ p.list {
+ margin-left: 0.5in;
+ margin-top: 0.05em;
+ margin-bottom: 0.05em;
+ }
+ </style>
+
+</head><body lang="EN-US">
+
+<p align="center"><b>Eclipse Public License - v 1.0</b></p>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+</body></html>
\ No newline at end of file
diff --git a/build-greenpages/resources/notice.html b/build-greenpages/resources/notice.html
new file mode 100644
index 0000000..0ee73f4
--- /dev/null
+++ b/build-greenpages/resources/notice.html
@@ -0,0 +1,104 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<!-- saved from url=(0044)http://www.eclipse.org/legal/epl/notice.html -->
+<HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+
+<TITLE>Eclipse Foundation Software User Agreement</TITLE>
+</HEAD><BODY lang="EN-US">
+<H2>Eclipse Foundation Software User Agreement</H2>
+<P>April 14, 2010</P>
+
+<H3>Usage Of Content</H3>
+
+<P>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</P>
+
+<H3>Applicable Licenses</H3>
+
+<P>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at <A href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</A>.
+ For purposes of the EPL, "Program" will mean the Content.</P>
+
+<P>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse Foundation source code
+ repository ("Repository") in software modules ("Modules") and made available as downloadable archives ("Downloads").</P>
+
+<UL>
+ <LI>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</LI>
+ <LI>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java™ ARchive) in a directory named "plugins".</LI>
+ <LI>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</LI>
+ <LI>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</LI>
+</UL>
+
+<P>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</P>
+
+<UL>
+ <LI>The top-level (root) directory</LI>
+ <LI>Plug-in and Fragment directories</LI>
+ <LI>Inside Plug-ins and Fragments packaged as JARs</LI>
+ <LI>Sub-directories of the directory named "src" of certain Plug-ins</LI>
+ <LI>Feature directories</LI>
+</UL>
+
+<P>Note: if a Feature made available by the Eclipse Foundation is installed using the Provisioning Technology (as defined below), you must agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</P>
+
+<P>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</P>
+
+<UL>
+ <LI>Common Public License Version 1.0 (available at <A href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</A>)</LI>
+ <LI>Apache Software License 1.1 (available at <A href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</A>)</LI>
+ <LI>Apache Software License 2.0 (available at <A href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</A>)</LI>
+ <LI>Metro Link Public License 1.00 (available at <A href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</A>)</LI>
+ <LI>Mozilla Public License Version 1.1 (available at <A href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</A>)</LI>
+</UL>
+
+<P>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</P>
+
+
+<H3>Use of Provisioning Technology</H3>
+
+<P>The Eclipse Foundation makes available provisioning software, examples of which include, but are not limited to, p2 and the Eclipse
+ Update Manager ("Provisioning Technology") for the purpose of allowing users to install software, documentation, information and/or
+ other materials (collectively "Installable Software"). This capability is provided with the intent of allowing such users to
+ install, extend and update Eclipse-based products. Information about packaging Installable Software is available at <A href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</A>
+ ("Specification").</P>
+
+<P>You may use Provisioning Technology to allow other parties to install Installable Software. You shall be responsible for enabling the
+ applicable license agreements relating to the Installable Software to be presented to, and accepted by, the users of the Provisioning Technology
+ in accordance with the Specification. By using Provisioning Technology in such a manner and making it available in accordance with the
+ Specification, you further acknowledge your agreement to, and the acquisition of all necessary rights to permit the following:</P>
+
+<OL>
+ <LI>A series of actions may occur ("Provisioning Process") in which a user may execute the Provisioning Technology
+ on a machine ("Target Machine") with the intent of installing, extending or updating the functionality of an Eclipse-based
+ product.</LI>
+ <LI>During the Provisioning Process, the Provisioning Technology may cause third party Installable Software or a portion thereof to be
+ accessed and copied to the Target Machine.</LI>
+ <LI>Pursuant to the Specification, you will provide to the user the terms and conditions that govern the use of the Installable
+ Software ("Installable Software Agreement") and such Installable Software Agreement shall be accessed from the Target
+ Machine in accordance with the Specification. Such Installable Software Agreement must inform the user of the terms and conditions that govern
+ the Installable Software and must solicit acceptance by the end user in the manner prescribed in such Installable Software Agreement. Upon such
+ indication of agreement by the user, the provisioning Technology will complete installation of the Installable Software.</LI>
+</OL>
+
+<H3>Cryptography</H3>
+
+<P>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</P>
+
+<P><SMALL>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</SMALL></P>
+
+
+</BODY></HTML>
\ No newline at end of file
diff --git a/build.properties b/build.properties
new file mode 100644
index 0000000..2cffe0c
--- /dev/null
+++ b/build.properties
@@ -0,0 +1,7 @@
+version=2.2.0
+release.type=integration
+natural.name=greenpages
+project.name=Virgo Web Server Samples
+project.key=VWSS
+ivy.cache.dir=${basedir}/../ivy-cache
+integration.repo.dir=${basedir}/../integration-repo
diff --git a/db/data.bat b/db/data.bat
new file mode 100755
index 0000000..69b814f
--- /dev/null
+++ b/db/data.bat
@@ -0,0 +1,5 @@
+@echo off
+setlocal
+
+call h2
+java -cp "%H2CP%" org.h2.tools.RunScript -url jdbc:h2:tcp://localhost/~/greenpages-db/greenpages -user greenpages -password pass -script db.sql
\ No newline at end of file
diff --git a/db/data.sh b/db/data.sh
new file mode 100755
index 0000000..7744e9d
--- /dev/null
+++ b/db/data.sh
@@ -0,0 +1,4 @@
+#!/usr/bin/env bash
+. ./h2.sh
+
+java -cp $CLASSPATH org.h2.tools.RunScript -url jdbc:h2:tcp://localhost/~/greenpages-db/greenpages -user greenpages -password pass -script ./db.sql
diff --git a/db/db.sql b/db/db.sql
new file mode 100644
index 0000000..394c60c
--- /dev/null
+++ b/db/db.sql
@@ -0,0 +1,17 @@
+DROP TABLE IF EXISTS LISTING;
+
+CREATE TABLE LISTING (
+ LISTING_NUMBER INT PRIMARY KEY,
+ FIRST_NAME VARCHAR(255),
+ LAST_NAME VARCHAR(255),
+ EMAIL_ADDRESS VARCHAR(255)
+);
+
+INSERT INTO LISTING VALUES(1, 'Rod', 'Johnson', 'rod.johnson@springsource.com');
+INSERT INTO LISTING VALUES(2, 'Rob', 'Harrop', 'rob.harrop@springsource.com');
+INSERT INTO LISTING VALUES(3, 'Glyn', 'Normington', 'glyn.normington@springsource.com');
+INSERT INTO LISTING VALUES(4, 'Andy', 'Wilkinson', 'andy.wilkinson@springsource.com');
+INSERT INTO LISTING VALUES(5, 'Ben', 'Hale', 'ben.hale@springsource.com');
+INSERT INTO LISTING VALUES(6, 'Chris', 'Frost', 'chris.frost@springsource.com');
+INSERT INTO LISTING VALUES(7, 'Steve', 'Powell', 'steve.powell@springsource.com');
+INSERT INTO LISTING VALUES(8, 'Christian', 'Dupuis', 'christian.dupuis@springsource.com');
diff --git a/db/h2.bat b/db/h2.bat
new file mode 100755
index 0000000..e79da93
--- /dev/null
+++ b/db/h2.bat
@@ -0,0 +1,9 @@
+for /r "%HOMEPATH%\.m2" %%X in (*h2*.jar) do (set H2CP=%H2CP%;%%X)
+
+if "%H2CP%" == "" (goto h2NotFound) else goto end
+
+:h2NotFound
+echo Cannot find H2 jars in .m2 Maven repository
+exit /b -1s
+
+:end
diff --git a/db/h2.sh b/db/h2.sh
new file mode 100755
index 0000000..e83c106
--- /dev/null
+++ b/db/h2.sh
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+JARS=`find $HOME/.m2 -iname "com.springsource.org.h2*"`
+
+for JAR in $JARS
+do
+ CLASSPATH=$CLASSPATH:$JAR
+done
+
+if [ -z $CLASSPATH ]
+then
+ echo "Cannot find H2 jars in .m2 Maven repository"
+ exit -1
+fi
\ No newline at end of file
diff --git a/db/run.bat b/db/run.bat
new file mode 100755
index 0000000..57a0394
--- /dev/null
+++ b/db/run.bat
@@ -0,0 +1,5 @@
+@echo off
+setlocal
+
+call h2
+start java -cp "%H2CP%" org.h2.tools.Server
\ No newline at end of file
diff --git a/db/run.sh b/db/run.sh
new file mode 100755
index 0000000..c3403e4
--- /dev/null
+++ b/db/run.sh
@@ -0,0 +1,5 @@
+#!/usr/bin/env bash
+. ./h2.sh
+
+java -cp $CLASSPATH org.h2.tools.Server
+
diff --git a/solution/greenpages.app/.classpath b/solution/greenpages.app/.classpath
new file mode 100644
index 0000000..0c8581d
--- /dev/null
+++ b/solution/greenpages.app/.classpath
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.springsource.server.ide.server.core.runtime.classpath/SpringSource dm Server (Runtime) v2.0">
+ <attributes>
+ <attribute name="owner.project.facets" value="jst.utility"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/solution/greenpages.app/.project b/solution/greenpages.app/.project
new file mode 100644
index 0000000..736d5b3
--- /dev/null
+++ b/solution/greenpages.app/.project
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.app-solution</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.springsource.server.ide.bundlor.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>com.springsource.server.ide.facet.core.bundlenature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
diff --git a/solution/greenpages.app/.settings/org.eclipse.wst.common.component b/solution/greenpages.app/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..0c40711
--- /dev/null
+++ b/solution/greenpages.app/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+ <wb-module deploy-name="greenpages.app-solution">
+ <wb-resource deploy-path="/" source-path="/src/main/java"/>
+ <wb-resource deploy-path="/" source-path="/src/main/resources"/>
+ </wb-module>
+</project-modules>
diff --git a/solution/greenpages.app/.settings/org.eclipse.wst.common.project.facet.core.xml b/solution/greenpages.app/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..339a5e5
--- /dev/null
+++ b/solution/greenpages.app/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <runtime name="SpringSource dm Server (Runtime) v2.0"/>
+ <installed facet="jst.java" version="6.0"/>
+ <installed facet="com.springsource.server.bundle" version="1.0"/>
+ <installed facet="jst.utility" version="1.0"/>
+</faceted-project>
diff --git a/solution/greenpages.app/.settings/org.maven.ide.eclipse.prefs b/solution/greenpages.app/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..36f8d7b
--- /dev/null
+++ b/solution/greenpages.app/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Apr 21 16:53:30 BST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/solution/greenpages.app/.springBeans b/solution/greenpages.app/.springBeans
new file mode 100644
index 0000000..4cdca85
--- /dev/null
+++ b/solution/greenpages.app/.springBeans
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.2.v200901262210]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ <config>src/main/resources/META-INF/spring/module-context.xml</config>
+ <config>src/main/resources/META-INF/spring/osgi-context.xml</config>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/solution/greenpages.app/pom.xml b/solution/greenpages.app/pom.xml
new file mode 100644
index 0000000..354124d
--- /dev/null
+++ b/solution/greenpages.app/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent-solution</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.app-solution</artifactId>
+ <name>greenpages.app</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/solution/greenpages.app/src/main/java/greenpages/Directory.java b/solution/greenpages.app/src/main/java/greenpages/Directory.java
new file mode 100644
index 0000000..08ddb9e
--- /dev/null
+++ b/solution/greenpages.app/src/main/java/greenpages/Directory.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages;
+
+import java.util.List;
+
+/**
+ * Main business interface for the GreenPages application.
+ *
+ * <p>
+ * Using this interface you can {@link #search(String) search} the directory for a {@link Listing} and you can access a
+ * <code>Listing</code> {@link #findListing(int) by ID}.
+ *
+ * @see Listing
+ */
+public interface Directory {
+
+ /**
+ * Searches the directory for all {@link Listing Listings} that match the supplied term. Matching is done against
+ * the {@link Listing#getLastName() last name} of all known <code>Listings</code>.
+ *
+ * @param term the search criteria.
+ * @return the search results or an empty {@link List} if no matches are found.
+ */
+ List<Listing> search(String term);
+
+ /**
+ * Finds the {@link Listing} with the supplied ID.
+ *
+ * @param id the ID of the <code>Listing</code>
+ * @return the <code>Listing</code> or <code>null</code> if no match is found.
+ */
+ Listing findListing(int id);
+}
diff --git a/solution/greenpages.app/src/main/java/greenpages/Listing.java b/solution/greenpages.app/src/main/java/greenpages/Listing.java
new file mode 100644
index 0000000..65e1c0e
--- /dev/null
+++ b/solution/greenpages.app/src/main/java/greenpages/Listing.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages;
+
+/**
+ * Represents a listing in the GreenPages {@link Directory}.
+ *
+ * @see Directory
+ */
+public interface Listing {
+
+ Integer getListingNumber();
+
+ String getFirstName();
+
+ String getLastName();
+
+ String getEmailAddress();
+}
diff --git a/solution/greenpages.app/src/main/java/greenpages/internal/DirectoryImpl.java b/solution/greenpages.app/src/main/java/greenpages/internal/DirectoryImpl.java
new file mode 100644
index 0000000..8d8be60
--- /dev/null
+++ b/solution/greenpages.app/src/main/java/greenpages/internal/DirectoryImpl.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.internal;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.springframework.stereotype.Component;
+
+import greenpages.Directory;
+import greenpages.Listing;
+
+/**
+ * Stub implementation of {@link Directory} that allows for simple testing without a database.
+ *
+ * Uses Spring 2.* component scanning to find this class and create a bean. The name for this bean
+ * is extracted from the {@link Component} annotation.
+ */
+@Component("directory")
+public class DirectoryImpl implements Directory {
+
+ private static final Listing ROD_JOHNSON = new ImmutableListing(1, "Rod", "Johnson", "rod.johnson@springsource.com");
+
+ /**
+ * {@inheritDoc}
+ *
+ * Stub implementation will match only for term '<code>johnson</code>'.
+ */
+ public List<Listing> search(String term) {
+ if (ROD_JOHNSON.getLastName().equalsIgnoreCase(term)) {
+ Listing l = ROD_JOHNSON;
+
+ return Collections.singletonList(l);
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Stub implementation will return a {@link Listing} for ID 1.
+ */
+ public Listing findListing(int id) {
+ if (id == ROD_JOHNSON.getListingNumber()) {
+ return ROD_JOHNSON;
+ } else {
+ return null;
+ }
+ }
+
+}
diff --git a/solution/greenpages.app/src/main/java/greenpages/internal/ImmutableListing.java b/solution/greenpages.app/src/main/java/greenpages/internal/ImmutableListing.java
new file mode 100644
index 0000000..b15494c
--- /dev/null
+++ b/solution/greenpages.app/src/main/java/greenpages/internal/ImmutableListing.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.internal;
+
+import greenpages.Listing;
+
+final class ImmutableListing implements Listing {
+
+ private final Integer listingNumber;
+
+ private final String firstName;
+
+ private final String lastName;
+
+ private final String emailAddress;
+
+ public ImmutableListing(int listingNumber, String firstName,String lastName, String emailAddress) {
+
+ this.listingNumber = listingNumber;
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.emailAddress = emailAddress;
+ }
+
+ public Integer getListingNumber() {
+ return listingNumber;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+}
diff --git a/solution/greenpages.app/src/main/resources/META-INF/MANIFEST.MF b/solution/greenpages.app/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..fc4d7c9
--- /dev/null
+++ b/solution/greenpages.app/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Name: GreenPages Service
+Bundle-Classpath: .
+Import-Package: org.springframework.stereotype;version="[3.0, 3.1)"
+Bundle-ManifestVersion: 2
+Bundle-Vendor: SpringSource Inc.
+Bundle-SymbolicName: greenpages
+Tool: Bundlor 1.0.0.M6
+Export-Package: greenpages;version="2.0"
+Bundle-Version: 2.0
+
diff --git a/solution/greenpages.app/src/main/resources/META-INF/spring/module-context.xml b/solution/greenpages.app/src/main/resources/META-INF/spring/module-context.xml
new file mode 100644
index 0000000..bb39866
--- /dev/null
+++ b/solution/greenpages.app/src/main/resources/META-INF/spring/module-context.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
+ xmlns:context="http://www.springframework.org/schema/context">
+
+ <!-- enables classpath component scanning for this module -->
+ <context:component-scan base-package="greenpages.internal" />
+
+</beans>
diff --git a/solution/greenpages.app/src/main/resources/META-INF/spring/osgi-context.xml b/solution/greenpages.app/src/main/resources/META-INF/spring/osgi-context.xml
new file mode 100644
index 0000000..0dab573
--- /dev/null
+++ b/solution/greenpages.app/src/main/resources/META-INF/spring/osgi-context.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"
+ xmlns:osgi="http://www.springframework.org/schema/osgi">
+
+ <!-- uncomment the line below to publish the mock Directory into the OSGi service registry -->
+
+ <!-- <osgi:service interface="greenpages.Directory" ref="directory"/> -->
+
+</beans>
diff --git a/solution/greenpages.app/template.mf b/solution/greenpages.app/template.mf
new file mode 100644
index 0000000..e138d7e
--- /dev/null
+++ b/solution/greenpages.app/template.mf
@@ -0,0 +1,10 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages Service
+Bundle-SymbolicName: greenpages
+Bundle-Vendor: SpringSource Inc.
+Bundle-Version: 2.0
+Import-Template:
+ org.springframework.*;version="[3.0, 3.1)"
+Excluded-Exports:
+ greenpages.internal
diff --git a/solution/greenpages.db/.classpath b/solution/greenpages.db/.classpath
new file mode 100644
index 0000000..c89be4a
--- /dev/null
+++ b/solution/greenpages.db/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/solution/greenpages.db/.project b/solution/greenpages.db/.project
new file mode 100644
index 0000000..f2ef02a
--- /dev/null
+++ b/solution/greenpages.db/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.db-solution</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.springsource.server.ide.bundlor.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.springsource.server.ide.facet.core.bundlenature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
diff --git a/solution/greenpages.db/.settings/org.eclipse.wst.common.project.facet.core.xml b/solution/greenpages.db/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..78a155d
--- /dev/null
+++ b/solution/greenpages.db/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <runtime name="SpringSource dm Server (Runtime) v2.0"/>
+ <installed facet="jst.java" version="6.0"/>
+ <installed facet="com.springsource.server.bundle" version="1.0"/>
+</faceted-project>
diff --git a/solution/greenpages.db/.springBeans b/solution/greenpages.db/.springBeans
new file mode 100644
index 0000000..4cdca85
--- /dev/null
+++ b/solution/greenpages.db/.springBeans
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.2.v200901262210]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ <config>src/main/resources/META-INF/spring/module-context.xml</config>
+ <config>src/main/resources/META-INF/spring/osgi-context.xml</config>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/solution/greenpages.db/pom.xml b/solution/greenpages.db/pom.xml
new file mode 100644
index 0000000..26458b1
--- /dev/null
+++ b/solution/greenpages.db/pom.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent-solution</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.db-solution</artifactId>
+ <name>greenpages.db</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>com.springsource.javax.persistence</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence.jpa</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>com.springsource.org.h2</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>org.aspectj-library</artifactId>
+ <type>libd</type>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/solution/greenpages.db/src/main/resources/META-INF/MANIFEST.MF b/solution/greenpages.db/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f6d6de8
--- /dev/null
+++ b/solution/greenpages.db/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-Name: GreenPages DataSource
+Bundle-Classpath: .
+Import-Package: javax.sql;version="0",org.apache.commons.dbcp;version=
+ "[1.2.2.osgi, 1.2.2.osgi]",org.h2;version="[1.0.71, 1.0.71]"
+Bundle-ManifestVersion: 2
+Bundle-Vendor: SpringSource Inc.
+Bundle-SymbolicName: greenpages.db
+Tool: Bundlor 1.0.0.M6
+Bundle-Version: 2.0
+
diff --git a/solution/greenpages.db/src/main/resources/META-INF/spring/module-context.xml b/solution/greenpages.db/src/main/resources/META-INF/spring/module-context.xml
new file mode 100644
index 0000000..5337e8a
--- /dev/null
+++ b/solution/greenpages.db/src/main/resources/META-INF/spring/module-context.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"
+ xmlns:p="http://www.springframework.org/schema/p">
+
+ <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
+ p:driverClassName="org.h2.Driver" p:url="jdbc:h2:~/greenpages-db/greenpages"
+ p:username="greenpages" p:password="pass"
+ init-method="createDataSource" destroy-method="close"/>
+
+</beans>
diff --git a/solution/greenpages.db/src/main/resources/META-INF/spring/osgi-context.xml b/solution/greenpages.db/src/main/resources/META-INF/spring/osgi-context.xml
new file mode 100644
index 0000000..92962cd
--- /dev/null
+++ b/solution/greenpages.db/src/main/resources/META-INF/spring/osgi-context.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"
+ xmlns:osgi="http://www.springframework.org/schema/osgi">
+
+ <osgi:service ref="dataSource" interface="javax.sql.DataSource"/>
+
+</beans>
diff --git a/solution/greenpages.db/template.mf b/solution/greenpages.db/template.mf
new file mode 100644
index 0000000..a7cdb91
--- /dev/null
+++ b/solution/greenpages.db/template.mf
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages DataSource
+Bundle-SymbolicName: greenpages.db
+Bundle-Vendor: SpringSource Inc.
+Bundle-Version: 2.0
+Import-Package:
+ org.h2;version="[1.0.71, 1.0.71]"
+Import-Template:
+ org.apache.commons.dbcp.*;version="[1.2.2.osgi, 1.2.2.osgi]",
+ javax.sql;version="0"
diff --git a/solution/greenpages.jpa/.classpath b/solution/greenpages.jpa/.classpath
new file mode 100644
index 0000000..edcdd6b
--- /dev/null
+++ b/solution/greenpages.jpa/.classpath
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/solution/greenpages.jpa/.project b/solution/greenpages.jpa/.project
new file mode 100644
index 0000000..c3ed622
--- /dev/null
+++ b/solution/greenpages.jpa/.project
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.jpa-solution</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.springsource.server.ide.bundlor.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>com.springsource.server.ide.facet.core.bundlenature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
diff --git a/solution/greenpages.jpa/.settings/JpaDirectorySpringContextTests-solution.launch b/solution/greenpages.jpa/.settings/JpaDirectorySpringContextTests-solution.launch
new file mode 100644
index 0000000..2bc8cde
--- /dev/null
+++ b/solution/greenpages.jpa/.settings/JpaDirectorySpringContextTests-solution.launch
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/greenpages.jpa-solution/.setting"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/greenpages.jpa-solution/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="greenpages.jpa.JpaDirectorySpringContextTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="greenpages.jpa-solution"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/springframework/org.springframework.instrument/3.0.0.M3/org.springframework.instrument-3.0.0.M3.jar"/>
+</launchConfiguration>
diff --git a/solution/greenpages.jpa/.settings/org.eclipse.jst.common.project.facet.core.prefs b/solution/greenpages.jpa/.settings/org.eclipse.jst.common.project.facet.core.prefs
new file mode 100644
index 0000000..0a93787
--- /dev/null
+++ b/solution/greenpages.jpa/.settings/org.eclipse.jst.common.project.facet.core.prefs
@@ -0,0 +1,3 @@
+#Wed Jun 24 12:42:34 BST 2009
+classpath.helper/org.eclipse.jdt.launching.JRE_CONTAINER\:\:org.eclipse.jdt.internal.launching.macosx.MacOSXType\:\:JVM\ 1.6.0/owners=jst.java\:6.0
+eclipse.preferences.version=1
diff --git a/solution/greenpages.jpa/.settings/org.eclipse.wst.common.project.facet.core.xml b/solution/greenpages.jpa/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..78a155d
--- /dev/null
+++ b/solution/greenpages.jpa/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <runtime name="SpringSource dm Server (Runtime) v2.0"/>
+ <installed facet="jst.java" version="6.0"/>
+ <installed facet="com.springsource.server.bundle" version="1.0"/>
+</faceted-project>
diff --git a/solution/greenpages.jpa/.settings/org.maven.ide.eclipse.prefs b/solution/greenpages.jpa/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..8f47b36
--- /dev/null
+++ b/solution/greenpages.jpa/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Apr 21 16:53:36 BST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/solution/greenpages.jpa/.springBeans b/solution/greenpages.jpa/.springBeans
new file mode 100644
index 0000000..974ce77
--- /dev/null
+++ b/solution/greenpages.jpa/.springBeans
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.2.RC]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ <config>src/main/resources/META-INF/spring/osgi-context.xml</config>
+ <config>src/main/resources/META-INF/spring/module-context.xml</config>
+ <config>src/test/resources/META-INF/spring/test-context.xml</config>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/solution/greenpages.jpa/.~/greenpages-db/greenpages.10.log.db b/solution/greenpages.jpa/.~/greenpages-db/greenpages.10.log.db
new file mode 100644
index 0000000..de9e2a0
--- /dev/null
+++ b/solution/greenpages.jpa/.~/greenpages-db/greenpages.10.log.db
Binary files differ
diff --git a/solution/greenpages.jpa/.~/greenpages-db/greenpages.data.db b/solution/greenpages.jpa/.~/greenpages-db/greenpages.data.db
new file mode 100644
index 0000000..be5e9a5
--- /dev/null
+++ b/solution/greenpages.jpa/.~/greenpages-db/greenpages.data.db
Binary files differ
diff --git a/solution/greenpages.jpa/.~/greenpages-db/greenpages.index.db b/solution/greenpages.jpa/.~/greenpages-db/greenpages.index.db
new file mode 100644
index 0000000..b2427f4
--- /dev/null
+++ b/solution/greenpages.jpa/.~/greenpages-db/greenpages.index.db
Binary files differ
diff --git a/solution/greenpages.jpa/pom.xml b/solution/greenpages.jpa/pom.xml
new file mode 100644
index 0000000..5e0df37
--- /dev/null
+++ b/solution/greenpages.jpa/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent-solution</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.jpa-solution</artifactId>
+ <name>greenpages.jpa</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.app-solution</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ </dependency>
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>com.springsource.javax.persistence</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence.jpa</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.instrument</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.aspects</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>com.springsource.org.h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>org.aspectj-library</artifactId>
+ <type>libd</type>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/solution/greenpages.jpa/src/main/java/greenpages/jpa/JpaDirectory.java b/solution/greenpages.jpa/src/main/java/greenpages/jpa/JpaDirectory.java
new file mode 100644
index 0000000..c51200d
--- /dev/null
+++ b/solution/greenpages.jpa/src/main/java/greenpages/jpa/JpaDirectory.java
@@ -0,0 +1,52 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import greenpages.Directory;
+import greenpages.Listing;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * Implementation of {@link Directory} that uses JPA for persistence.<p />
+ *
+ * This class is marked as {@link Transactional}. The Spring configuration for this module, enables AspectJ weaving for
+ * adding transaction demarcation to classes annotated with <code>@Transactional</code>.
+ */
+@Transactional
+@Repository
+final class JpaDirectory implements Directory {
+
+ private static final String SEARCH_QUERY = "select l from Listing l where upper(l.lastName) like :term";
+
+ /**
+ * Spring will inject a managed JPA {@link EntityManager} into this field.
+ */
+ @PersistenceContext
+ private EntityManager em;
+
+ public Listing findListing(int id) {
+ return em.find(JpaListing.class, id);
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<Listing> search(String term) {
+ return em.createQuery(SEARCH_QUERY).setParameter("term", "%" + term.toUpperCase() + "%").getResultList();
+ }
+
+}
diff --git a/solution/greenpages.jpa/src/main/java/greenpages/jpa/JpaListing.java b/solution/greenpages.jpa/src/main/java/greenpages/jpa/JpaListing.java
new file mode 100644
index 0000000..1965495
--- /dev/null
+++ b/solution/greenpages.jpa/src/main/java/greenpages/jpa/JpaListing.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import greenpages.Listing;
+
+/**
+ * Basic implementation of {@link Listing} that is configured as a persistent type in JPA.
+ */
+public class JpaListing implements Listing {
+
+ private Integer listingNumber;
+
+ private String firstName;
+
+ private String lastName;
+
+ private String emailAddress;
+
+ public Integer getListingNumber() {
+ return listingNumber;
+ }
+
+ public void setListingNumber(Integer listingNumber) {
+ this.listingNumber = listingNumber;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+ public void setEmailAddress(String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+
+}
diff --git a/solution/greenpages.jpa/src/main/resources/META-INF/MANIFEST.MF b/solution/greenpages.jpa/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..bf77d36
--- /dev/null
+++ b/solution/greenpages.jpa/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-Name: GreenPages JPA
+Import-Bundle: com.springsource.org.eclipse.persistence;version="[1.0.
+ 0, 1.0.0]",com.springsource.org.eclipse.persistence.jpa;version="[1.0
+ .0, 1.0.0]"
+Import-Package: greenpages;version="[2.0, 2.1)",javax.persistence;vers
+ ion="[1.0.0, 1.0.0]",javax.sql;version="0",org.apache.commons.dbcp;ve
+ rsion="[1.2.2.osgi, 1.2.2.osgi]",org.springframework.beans.factory.an
+ notation;version="[3.0, 3.1)",org.springframework.context.weaving;ver
+ sion="[3.0, 3.1)",org.springframework.core.io;version="[3.0, 3.1)",or
+ g.springframework.dao.annotation;version="[3.0, 3.1)",org.springframe
+ work.orm.jpa;version="[3.0, 3.1)",org.springframework.orm.jpa.vendor;
+ version="[3.0, 3.1)",org.springframework.stereotype;version="[3.0, 3.
+ 1)",org.springframework.transaction.annotation;version="[3.0, 3.1)",o
+ rg.springframework.transaction.aspectj;version="[3.0, 3.1)"
+Bundle-ManifestVersion: 2
+Bundle-Vendor: SpringSource Inc.
+Bundle-SymbolicName: greenpages.jpa
+Tool: Bundlor 1.0.0.M6
+Bundle-Version: 2.0
+
diff --git a/solution/greenpages.jpa/src/main/resources/META-INF/orm.xml b/solution/greenpages.jpa/src/main/resources/META-INF/orm.xml
new file mode 100644
index 0000000..66352f0
--- /dev/null
+++ b/solution/greenpages.jpa/src/main/resources/META-INF/orm.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
+ version="1.0">
+ <package>greenpages.jpa</package>
+ <entity class="greenpages.jpa.JpaListing" name="Listing">
+ <table name="LISTING"/>
+ <attributes>
+ <id name="listingNumber">
+ <column name="LISTING_NUMBER"/>
+ <generated-value strategy="TABLE"/>
+ </id>
+ <basic name="firstName">
+ <column name="FIRST_NAME"/>
+ </basic>
+ <basic name="lastName">
+ <column name="LAST_NAME"/>
+ </basic>
+ <basic name="emailAddress">
+ <column name="EMAIL_ADDRESS"/>
+ </basic>
+ </attributes>
+ </entity>
+</entity-mappings>
\ No newline at end of file
diff --git a/solution/greenpages.jpa/src/main/resources/META-INF/persistence.xml b/solution/greenpages.jpa/src/main/resources/META-INF/persistence.xml
new file mode 100644
index 0000000..df42af5
--- /dev/null
+++ b/solution/greenpages.jpa/src/main/resources/META-INF/persistence.xml
@@ -0,0 +1,10 @@
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
+ version="1.0">
+
+ <persistence-unit name="GreenPages" transaction-type="RESOURCE_LOCAL">
+ <class>greenpages.jpa.JpaListing</class>
+ </persistence-unit>
+
+</persistence>
diff --git a/solution/greenpages.jpa/src/main/resources/META-INF/spring/module-context.xml b/solution/greenpages.jpa/src/main/resources/META-INF/spring/module-context.xml
new file mode 100644
index 0000000..3fc3b2a
--- /dev/null
+++ b/solution/greenpages.jpa/src/main/resources/META-INF/spring/module-context.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Application context definition for GreenPages JPA.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:tx="http://www.springframework.org/schema/tx"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
+ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
+
+ <!-- ========================= RESOURCE DEFINITIONS ========================= -->
+
+ <!--
+ Activates a load-time weaver for the context. Any bean within the context that
+ implements LoadTimeWeaverAware (such as LocalContainerEntityManagerFactoryBean)
+ will receive a reference to the autodetected load-time weaver.
+ -->
+ <context:load-time-weaver aspectj-weaving="on"/>
+
+ <!-- JPA EntityManagerFactory -->
+ <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource">
+ <property name="jpaVendorAdapter">
+ <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"
+ p:databasePlatform="org.eclipse.persistence.platform.database.HSQLPlatform" p:showSql="true"/>
+ </property>
+ </bean>
+
+ <!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
+ <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
+ p:entityManagerFactory-ref="entityManagerFactory"/>
+
+
+ <!-- ========================= BUSINESS OBJECT DEFINITIONS ========================= -->
+
+ <!--
+ Activates various annotations to be detected in bean classes: Spring's
+ @Required and @Autowired, as well as JSR 250's @PostConstruct,
+ @PreDestroy and @Resource (if available) and JPA's @PersistenceContext
+ and @PersistenceUnit (if available).
+ -->
+ <context:annotation-config/>
+
+ <!--
+ Instruct Spring to perform declarative transaction management
+ automatically on annotated classes.
+ -->
+ <tx:annotation-driven mode="aspectj"/>
+
+ <!--
+ Post-processor to perform exception translation on @Repository classes (from native
+ exceptions such as JPA PersistenceExceptions to Spring's DataAccessException hierarchy).
+ -->
+ <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
+
+ <!--
+ Will automatically be transactional due to @Transactional.
+ EntityManager will be auto-injected due to @PersistenceContext.
+ PersistenceExceptions will be auto-translated due to @Repository.
+ -->
+ <bean id="directory" class="greenpages.jpa.JpaDirectory"/>
+
+</beans>
diff --git a/solution/greenpages.jpa/src/main/resources/META-INF/spring/osgi-context.xml b/solution/greenpages.jpa/src/main/resources/META-INF/spring/osgi-context.xml
new file mode 100644
index 0000000..c527d76
--- /dev/null
+++ b/solution/greenpages.jpa/src/main/resources/META-INF/spring/osgi-context.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"
+ xmlns:osgi="http://www.springframework.org/schema/osgi">
+
+ <!-- import the DataSource from OSGi -->
+ <osgi:reference id="dataSource" interface="javax.sql.DataSource"/>
+
+
+ <!-- export the directory bean to OSGi under the Directory interface -->
+ <osgi:service ref="directory" interface="greenpages.Directory"/>
+
+
+</beans>
diff --git a/solution/greenpages.jpa/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java b/solution/greenpages.jpa/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java
new file mode 100644
index 0000000..7ecd706
--- /dev/null
+++ b/solution/greenpages.jpa/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import greenpages.Directory;
+import greenpages.Listing;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { "classpath:/META-INF/spring/module-context.xml", "classpath:/META-INF/spring/test-context.xml" })
+@TestExecutionListeners(value = DependencyInjectionTestExecutionListener.class)
+public class JpaDirectorySpringContextTests {
+
+ @Autowired
+ private Directory directory;
+
+ @Test
+ public void search() {
+ List<Listing> results = this.directory.search("johnson");
+ assertNotNull(results);
+ assertEquals(1, results.size());
+
+ Listing listing = results.get(0);
+ assertNotNull(listing);
+ assertEquals("Johnson", listing.getLastName());
+ }
+}
diff --git a/solution/greenpages.jpa/src/test/java/greenpages/jpa/TestDataPopulator.java b/solution/greenpages.jpa/src/test/java/greenpages/jpa/TestDataPopulator.java
new file mode 100644
index 0000000..24f779b
--- /dev/null
+++ b/solution/greenpages.jpa/src/test/java/greenpages/jpa/TestDataPopulator.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.sql.DataSource;
+
+import org.springframework.core.io.Resource;
+
+/**
+ * A class that populates a datasource with test data
+ */
+public class TestDataPopulator {
+
+ private final DataSource dataSource;
+
+ private final Resource testDataLocation;
+
+ public TestDataPopulator(DataSource dataSource, Resource testDataLocation) {
+ this.dataSource = dataSource;
+ this.testDataLocation = testDataLocation;
+ }
+
+ public void populate() {
+ Connection connection = null;
+ try {
+ connection = dataSource.getConnection();
+ insertTestData(connection);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred acquiring connection", e);
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ }
+ }
+ }
+ }
+
+ private void insertTestData(Connection connection) {
+ try {
+ String sql = parseSqlIn(testDataLocation);
+ executeSql(sql, connection);
+ } catch (IOException e) {
+ throw new RuntimeException("I/O exception occurred accessing the test data file", e);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred loading test data", e);
+ }
+ }
+
+ private String parseSqlIn(Resource resource) throws IOException {
+ InputStream is = null;
+ try {
+ is = resource.getInputStream();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+
+ StringWriter sw = new StringWriter();
+ BufferedWriter writer = new BufferedWriter(sw);
+
+ for (int c = reader.read(); c != -1; c = reader.read()) {
+ writer.write(c);
+ }
+ writer.flush();
+ return sw.toString();
+
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+
+ private void executeSql(String sql, Connection connection) throws SQLException {
+ Statement statement = connection.createStatement();
+ statement.execute(sql);
+ }
+}
diff --git a/solution/greenpages.jpa/src/test/resources/META-INF/spring/test-context.xml b/solution/greenpages.jpa/src/test/resources/META-INF/spring/test-context.xml
new file mode 100644
index 0000000..beb679a
--- /dev/null
+++ b/solution/greenpages.jpa/src/test/resources/META-INF/spring/test-context.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
+ p:driverClassName="org.h2.Driver" p:url="jdbc:h2:.~/greenpages-db/greenpages"
+ p:username="greenpages" p:password="pass"
+ init-method="createDataSource" destroy-method="close"/>
+
+ <bean class="greenpages.jpa.TestDataPopulator" init-method="populate">
+ <constructor-arg ref="dataSource"/>
+ <constructor-arg value="file:../../db/db.sql"/>
+ </bean>
+
+</beans>
diff --git a/solution/greenpages.jpa/template.mf b/solution/greenpages.jpa/template.mf
new file mode 100644
index 0000000..2db1397
--- /dev/null
+++ b/solution/greenpages.jpa/template.mf
@@ -0,0 +1,23 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages JPA
+Bundle-SymbolicName: greenpages.jpa
+Bundle-Vendor: SpringSource Inc.
+Bundle-Version: 2.0
+Import-Template:
+ org.springframework.*;version="[3.0, 3.1)",
+ greenpages;version="[2.0, 2.1)",
+ javax.persistence;version="[1.0.0, 1.0.0]",
+ org.apache.commons.dbcp.*;version="[1.2.2.osgi, 1.2.2.osgi]",
+ javax.sql;version="0"
+Import-Bundle:
+ com.springsource.org.eclipse.persistence;version="[1.0.0, 1.0.0]",
+ com.springsource.org.eclipse.persistence.jpa;version="[1.0.0, 1.0.0]"
+Import-Package:
+ org.springframework.context.weaving;version="[3.0, 3.1)",
+ org.springframework.transaction.aspectj;version="[3.0, 3.1)"
+Excluded-Exports:
+ greenpages.jpa
+Excluded-Imports:
+ org.springframework.test.*,
+ org.junit.*
\ No newline at end of file
diff --git a/solution/greenpages.web/.classpath b/solution/greenpages.web/.classpath
new file mode 100644
index 0000000..679c7f5
--- /dev/null
+++ b/solution/greenpages.web/.classpath
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.web.container"/>
+ <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/solution/greenpages.web/.project b/solution/greenpages.web/.project
new file mode 100644
index 0000000..a686b48
--- /dev/null
+++ b/solution/greenpages.web/.project
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.web-solution</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>com.springsource.server.ide.bundlor.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>com.springsource.server.ide.facet.core.bundlenature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ </natures>
+</projectDescription>
diff --git a/solution/greenpages.web/.settings/.jsdtscope b/solution/greenpages.web/.settings/.jsdtscope
new file mode 100644
index 0000000..99cc012
--- /dev/null
+++ b/solution/greenpages.web/.settings/.jsdtscope
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+ <attributes>
+ <attribute name="hide" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+ <attributes>
+ <attribute name="hide" value="false"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="output" path=""/>
+</classpath>
diff --git a/solution/greenpages.web/.settings/GreenPagesSpringContextTests-solution.launch b/solution/greenpages.web/.settings/GreenPagesSpringContextTests-solution.launch
new file mode 100644
index 0000000..237e9ce
--- /dev/null
+++ b/solution/greenpages.web/.settings/GreenPagesSpringContextTests-solution.launch
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/greenpages.web-solution/src/test/java/greenpages/web/GreenPagesSpringContextTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="greenpages.web.GreenPagesSpringContextTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="greenpages.web-solution"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/springframework/org.springframework.instrument/3.0.0.M3/org.springframework.instrument-3.0.0.M3.jar"/>
+</launchConfiguration>
diff --git a/solution/greenpages.web/.settings/org.eclipse.wst.common.component b/solution/greenpages.web/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..3bf0ff1
--- /dev/null
+++ b/solution/greenpages.web/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+<wb-module deploy-name="greenpages.web-solution">
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
+<wb-resource deploy-path="/" source-path="/src/main/webapp"/>
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/resources"/>
+<dependent-module deploy-path="/WEB-INF/lib" handle="module:/resource/greenpages.app-solution/greenpages.app-solution">
+<dependency-type>uses</dependency-type>
+</dependent-module>
+<property name="context-root" value="greenpages"/>
+<property name="java-output-path"/>
+</wb-module>
+</project-modules>
diff --git a/solution/greenpages.web/.settings/org.eclipse.wst.common.project.facet.core.xml b/solution/greenpages.web/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..96e2d7e
--- /dev/null
+++ b/solution/greenpages.web/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="com.springsource.server.bundle" version="1.0"/>
+ <installed facet="jst.web" version="2.5"/>
+ <installed facet="jst.java" version="6.0"/>
+</faceted-project>
diff --git a/solution/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.container b/solution/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/solution/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/solution/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.name b/solution/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/solution/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/solution/greenpages.web/.settings/org.maven.ide.eclipse.prefs b/solution/greenpages.web/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..a79cc8e
--- /dev/null
+++ b/solution/greenpages.web/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Dec 15 14:27:45 GMT 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/solution/greenpages.web/.settings/org.springframework.ide.eclipse.beans.core.prefs b/solution/greenpages.web/.settings/org.springframework.ide.eclipse.beans.core.prefs
new file mode 100644
index 0000000..af8ab8b
--- /dev/null
+++ b/solution/greenpages.web/.settings/org.springframework.ide.eclipse.beans.core.prefs
@@ -0,0 +1,3 @@
+#Mon Mar 09 17:11:56 GMT 2009
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false
diff --git a/solution/greenpages.web/.springBeans b/solution/greenpages.web/.springBeans
new file mode 100644
index 0000000..618a258
--- /dev/null
+++ b/solution/greenpages.web/.springBeans
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.8.200911091054-RELEASE]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/solution/greenpages.web/.~/greenpages-db/greenpages.10.log.db b/solution/greenpages.web/.~/greenpages-db/greenpages.10.log.db
new file mode 100644
index 0000000..de9e2a0
--- /dev/null
+++ b/solution/greenpages.web/.~/greenpages-db/greenpages.10.log.db
Binary files differ
diff --git a/solution/greenpages.web/.~/greenpages-db/greenpages.data.db b/solution/greenpages.web/.~/greenpages-db/greenpages.data.db
new file mode 100644
index 0000000..d9bf4ba
--- /dev/null
+++ b/solution/greenpages.web/.~/greenpages-db/greenpages.data.db
Binary files differ
diff --git a/solution/greenpages.web/.~/greenpages-db/greenpages.index.db b/solution/greenpages.web/.~/greenpages-db/greenpages.index.db
new file mode 100644
index 0000000..b2427f4
--- /dev/null
+++ b/solution/greenpages.web/.~/greenpages-db/greenpages.index.db
Binary files differ
diff --git a/solution/greenpages.web/pom.xml b/solution/greenpages.web/pom.xml
new file mode 100644
index 0000000..aea771d
--- /dev/null
+++ b/solution/greenpages.web/pom.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent-solution</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.web-solution</artifactId>
+ <name>greenpages.web</name>
+ <packaging>war</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.app-solution</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>com.springsource.freemarker</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>com.springsource.javax.servlet</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.jpa-solution</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.aspects</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.instrument</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>com.springsource.org.h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>org.aspectj-library</artifactId>
+ <type>libd</type>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.1-beta-1</version>
+ <configuration>
+ <packagingExcludes>WEB-INF/lib/**</packagingExcludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/solution/greenpages.web/src/main/java/greenpages/web/GreenPagesController.java b/solution/greenpages.web/src/main/java/greenpages/web/GreenPagesController.java
new file mode 100644
index 0000000..56463fc
--- /dev/null
+++ b/solution/greenpages.web/src/main/java/greenpages/web/GreenPagesController.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.web;
+
+import greenpages.Directory;
+import greenpages.Listing;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * Controller class for GreenPages web application.<p/>
+ *
+ * This class is configured using Spring 2.5-style MVC annotations. Documentation for this feature can be found <a
+ * href="http://static.springframework.org/spring/docs/2.5.x/reference/mvc.html#mvc-annotation">here</a>.<p/>
+ *
+ * The use of {@link Controller} makes this class eligible for autodetection by <context:component-scan/> in the
+ * context configuration.
+ */
+@Controller
+public class GreenPagesController {
+
+ /**
+ * This field is injected automatically by Spring. For this injection to be satisfied, the greenpages.web module
+ * must either declare a bean of type {@link Directory} or it must import a <code>Directory</code> from OSGi.
+ */
+ @Autowired
+ private Directory directory;
+
+
+ @RequestMapping("/home.htm")
+ public void home() {
+ }
+
+ @RequestMapping("/search.htm")
+ public List<Listing> search(@RequestParam("query") String query) {
+ return this.directory.search(query);
+ }
+
+ @RequestMapping("/entry.htm")
+ public Listing entry(@RequestParam("id") int id) {
+ return this.directory.findListing(id);
+ }
+}
diff --git a/solution/greenpages.web/src/main/webapp/META-INF/MANIFEST.MF b/solution/greenpages.web/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..465b7ac
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-Name: GreenPages Web
+Import-Library: org.springframework.spring;version="[3.0, 3.1)"
+Bundle-Classpath: .
+Import-Bundle: com.springsource.org.apache.taglibs.standard;version="[
+ 1.1.2,1.3)"
+Web-ContextPath: greenpages
+Import-Package: org.eclipse.virgo.web.dm;version="[2.0.0, 3.0.0)
+ ",freemarker.cache;version="[2.3.15,2.3.15]",greenpages;version="[2.0
+ , 2.1)",javax.servlet.jsp.jstl.core;version="[1.1.2,1.2.0)",javax.sql
+ ,org.apache.commons.dbcp,org.springframework.beans.factory.annotation
+ ;version="[3.0, 3.1)",org.springframework.core.io;version="[3.0, 3.1)
+ ",org.springframework.stereotype;version="[3.0, 3.1)",org.springframe
+ work.web.bind.annotation;version="[3.0, 3.1)",org.springframework.web
+ .context;version="[3.0, 3.1)",org.springframework.web.servlet;version
+ ="[3.0, 3.1)"
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: greenpages.web
+Tool: Bundlor 1.0.0.M6
+Bundle-Version: 2.0
+
diff --git a/solution/greenpages.web/src/main/webapp/WEB-INF/applicationContext.xml b/solution/greenpages.web/src/main/webapp/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000..36b743e
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/WEB-INF/applicationContext.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:osgi="http://www.springframework.org/schema/osgi"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">
+
+ <!-- import a service from OSGi implementing the Directory interface and make available as a bean called directory -->
+ <osgi:reference id="directory" interface="greenpages.Directory" />
+
+</beans>
diff --git a/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/entry.ftl b/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/entry.ftl
new file mode 100644
index 0000000..504e6ec
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/entry.ftl
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>GreenPages</title>
+ <link rel="stylesheet" href="/greenpages/styles/main.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/local.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/print.css" type="text/css" media="print" />
+</head>
+<body class="main tundra">
+ <div id="page">
+ <div id="mini-header">
+ <div id="mini-header-left"></div>
+ <div id="mini-header-right"></div>
+ </div> <!-- /mini-header -->
+
+ <div id="primary-navigation">
+ <div id="primary-left">
+ <ul>
+ <li><a href="/greenpages" title="Admin Console">GreenPages</a></li>
+ </ul>
+ </div>
+ <img id="left-curve" src="/greenpages/images/menu-curve-left.png"/>
+ <div id="primary-right">
+ <ul>
+ <li><a href="/admin" title="Admin Console">Admin Console</a></li>
+ <li><a href="http://www.eclipse.org/virgo" title="Admin Console">Virgo</a></li>
+ </ul>
+ </div>
+ <img id="right-curve" src="/greenpages/images/menu-curve-right.png"/>
+ </div><!-- /primary-navigation -->
+
+ <div id="container">
+ <div id="content-no-nav">
+ <h1>Virgo Web Server - Greenpages sample</h1>
+ <p/>
+ <h2>${listing.firstName} ${listing.lastName}</h2>
+ <a href="mailto:${listing.emailAddress}">${listing.emailAddress}</a>
+ </div> <!-- /content -->
+ </div> <!-- /container -->
+
+ <div id="footer-wrapper">
+ <div id="footer-left">© Copyright 2008, 2010 VMware Inc. Licensed under the Eclipse Public License v1.0.</div>
+ <div id="footer-right"></div>
+ </div> <!-- /footer-wrapper -->
+
+ </div> <!-- /page -->
+
+</body>
+</html>
\ No newline at end of file
diff --git a/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/home.ftl b/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/home.ftl
new file mode 100644
index 0000000..bec4830
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/home.ftl
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>GreenPages</title>
+ <link rel="stylesheet" href="/greenpages/styles/main.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/local.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/print.css" type="text/css" media="print" />
+</head>
+<body class="main tundra">
+ <div id="page">
+ <div id="mini-header">
+ <div id="mini-header-left"></div>
+ <div id="mini-header-right"></div>
+ </div> <!-- /mini-header -->
+
+ <div id="primary-navigation">
+ <div id="primary-left">
+ <ul>
+ <li><a href="/greenpages" title="Admin Console">GreenPages</a></li>
+ </ul>
+ </div>
+ <img id="left-curve" src="/greenpages/images/menu-curve-left.png"/>
+ <div id="primary-right">
+ <ul>
+ <li><a href="/admin" title="Admin Console">Admin Console</a></li>
+ <li><a href="http://www.eclipse.org/virgo" title="Admin Console">Virgo</a></li>
+ </ul>
+ </div>
+ <img id="right-curve" src="/greenpages/images/menu-curve-right.png"/>
+ </div><!-- /primary-navigation -->
+
+ <div id="container">
+ <div id="content-no-nav">
+ <h1>Virgo Web Server - Greenpages sample</h1>
+ <p/>
+ <form name="searchForm" method="GET" action="search.htm">
+ <input name="query" type="text"/> <input type="submit"/>
+ </form>
+ </div> <!-- /content -->
+ </div> <!-- /container -->
+
+ <div id="footer-wrapper">
+ <div id="footer-left">© Copyright 2008, 2010 VMware Inc. Licensed under the Eclipse Public License v1.0.</div>
+ <div id="footer-right"></div>
+ </div> <!-- /footer-wrapper -->
+
+ </div> <!-- /page -->
+
+</body>
+</html>
\ No newline at end of file
diff --git a/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/search.ftl b/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/search.ftl
new file mode 100644
index 0000000..f116e48
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/WEB-INF/ftl/search.ftl
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>GreenPages</title>
+ <link rel="stylesheet" href="/greenpages/styles/main.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/local.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/print.css" type="text/css" media="print" />
+</head>
+<body class="main tundra">
+ <div id="page">
+ <div id="mini-header">
+ <div id="mini-header-left"></div>
+ <div id="mini-header-right"></div>
+ </div> <!-- /mini-header -->
+
+ <div id="primary-navigation">
+ <div id="primary-left">
+ <ul>
+ <li><a href="/greenpages" title="Admin Console">GreenPages</a></li>
+ </ul>
+ </div>
+ <img id="left-curve" src="/greenpages/images/menu-curve-left.png"/>
+ <div id="primary-right">
+ <ul>
+ <li><a href="/admin" title="Admin Console">Admin Console</a></li>
+ <li><a href="http://www.eclipse.org/virgo" title="Admin Console">Virgo</a></li>
+ </ul>
+ </div>
+ <img id="right-curve" src="/greenpages/images/menu-curve-right.png"/>
+ </div><!-- /primary-navigation -->
+
+ <div id="container">
+ <div id="content-no-nav">
+ <h1>Virgo Web Server - Greenpages sample</h1>
+ <p/>
+ <form name="searchForm" method="GET" action="search.htm">
+ <input name="query" type="text"/> <input type="submit"/>
+ </form>
+ <#if listingList?? && (listingList?size > 0)>
+ <table id="results">
+ <thead>
+ <tr>
+ <th>Last Name</th>
+ <th>First Name</th>
+ <th> </th>
+ </tr>
+ </thead>
+ <tbody>
+ <#list listingList as listing>
+ <tr>
+ <td>${listing.lastName}</td>
+ <td>${listing.firstName}</td>
+ <td><a href="entry.htm?id=${listing.listingNumber}">view</a></td>
+ </tr>
+ </#list>
+ </tbody>
+ </table>
+ <#else>
+ <h2>No results found.</h2>
+ </#if>
+ </div> <!-- /content -->
+ </div> <!-- /container -->
+
+ <div id="footer-wrapper">
+ <div id="footer-left">© Copyright 2008, 2010 VMware Inc. Licensed under the Eclipse Public License v1.0.</div>
+ <div id="footer-right"></div>
+ </div> <!-- /footer-wrapper -->
+
+ </div> <!-- /page -->
+
+</body>
+</html>
\ No newline at end of file
diff --git a/solution/greenpages.web/src/main/webapp/WEB-INF/greenpages-servlet.xml b/solution/greenpages.web/src/main/webapp/WEB-INF/greenpages-servlet.xml
new file mode 100644
index 0000000..61d2256
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/WEB-INF/greenpages-servlet.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
+
+ <!-- enable classpath scanning -->
+ <context:component-scan base-package="greenpages.web" />
+
+ <!-- enable anntotation-driven controllers -->
+ <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
+
+
+ <!-- configure FreeMarker support -->
+ <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
+ <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
+ </bean>
+
+ <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
+ <property name="cache" value="true" />
+ <property name="suffix" value=".ftl" />
+ </bean>
+</beans>
diff --git a/solution/greenpages.web/src/main/webapp/WEB-INF/web.xml b/solution/greenpages.web/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..adf7d6c
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
+
+ <display-name>Greenpages solution - web</display-name>
+
+
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ </welcome-file-list>
+
+<!-- CONFIGURE A PARENT APPLICATION CONTEXT -->
+
+ <context-param>
+ <param-name>contextClass</param-name>
+ <param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
+ </context-param>
+
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+
+ <!-- DISPATCHER SERVLET CONFIG -->
+ <servlet>
+ <servlet-name>greenpages</servlet-name>
+ <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>greenpages</servlet-name>
+ <url-pattern>/app/*</url-pattern>
+ </servlet-mapping>
+
+</web-app>
\ No newline at end of file
diff --git a/solution/greenpages.web/src/main/webapp/images/favicon.ico b/solution/greenpages.web/src/main/webapp/images/favicon.ico
new file mode 100755
index 0000000..9244a9c
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/favicon.ico
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/footer-left.png b/solution/greenpages.web/src/main/webapp/images/footer-left.png
new file mode 100644
index 0000000..8bfe3b1
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/footer-left.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/footer-right.png b/solution/greenpages.web/src/main/webapp/images/footer-right.png
new file mode 100644
index 0000000..51527ad
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/footer-right.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/footer-stretch.png b/solution/greenpages.web/src/main/webapp/images/footer-stretch.png
new file mode 100644
index 0000000..c58f721
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/footer-stretch.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/header-left.png b/solution/greenpages.web/src/main/webapp/images/header-left.png
new file mode 100644
index 0000000..4920a0a
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/header-left.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/header-right.png b/solution/greenpages.web/src/main/webapp/images/header-right.png
new file mode 100644
index 0000000..09b0a59
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/header-right.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/loader-white-large.gif b/solution/greenpages.web/src/main/webapp/images/loader-white-large.gif
new file mode 100644
index 0000000..aa4ec5a
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/loader-white-large.gif
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/loader-white-small.gif b/solution/greenpages.web/src/main/webapp/images/loader-white-small.gif
new file mode 100644
index 0000000..75ad2b3
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/loader-white-small.gif
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/menu-curve-left.png b/solution/greenpages.web/src/main/webapp/images/menu-curve-left.png
new file mode 100644
index 0000000..c48a2e0
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/menu-curve-left.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/menu-curve-right.png b/solution/greenpages.web/src/main/webapp/images/menu-curve-right.png
new file mode 100644
index 0000000..1f3b100
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/menu-curve-right.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/menu-stretch.png b/solution/greenpages.web/src/main/webapp/images/menu-stretch.png
new file mode 100644
index 0000000..0ca66f7
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/menu-stretch.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/mini-header-left.png b/solution/greenpages.web/src/main/webapp/images/mini-header-left.png
new file mode 100644
index 0000000..72551e7
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/mini-header-left.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/mini-header-right.png b/solution/greenpages.web/src/main/webapp/images/mini-header-right.png
new file mode 100644
index 0000000..8aaf50c
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/mini-header-right.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/s2ap_soda_can.png b/solution/greenpages.web/src/main/webapp/images/s2ap_soda_can.png
new file mode 100644
index 0000000..8eb53a8
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/s2ap_soda_can.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/spring.png b/solution/greenpages.web/src/main/webapp/images/spring.png
new file mode 100644
index 0000000..05a1940
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/spring.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/images/table-header-background.png b/solution/greenpages.web/src/main/webapp/images/table-header-background.png
new file mode 100644
index 0000000..8f2ba1b
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/images/table-header-background.png
Binary files differ
diff --git a/solution/greenpages.web/src/main/webapp/index.html b/solution/greenpages.web/src/main/webapp/index.html
new file mode 100644
index 0000000..a541368
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <title>GreenPages</title>
+ <meta http-equiv="REFRESH" content="0;url=/greenpages/app/home.htm">
+ </head>
+ <body>
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/solution/greenpages.web/src/main/webapp/styles/local.css b/solution/greenpages.web/src/main/webapp/styles/local.css
new file mode 100644
index 0000000..8302e89
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/styles/local.css
@@ -0,0 +1,40 @@
+/*
+ * Local style information for the Virgo Splash Screen
+ *
+ * Contains both style and colour information and
+ * overrides content from the dojo/tundra style.
+ *
+ * Christopher Frost - March 2010
+ *
+ */
+
+#mini-header, #mini-header-left, #mini-header-right {
+ height: 7px;
+ width: 7px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#mini-header {
+ width: 100%;
+ background-color: #002e62;
+}
+
+#mini-header-left {
+ background-image: url(../images/mini-header-left.png);
+ background-repeat: no-repeat;
+ background-position: left top;
+ float: left;
+}
+
+#mini-header-right {
+ background-image: url(../images/mini-header-right.png);
+ background-repeat: no-repeat scroll;
+ background-position: right top;
+ float: right;
+}
+
+#content-no-nav {
+ background: transparent url(../images/s2ap_soda_can.png) no-repeat bottom right;
+ height: 400px;
+}
\ No newline at end of file
diff --git a/solution/greenpages.web/src/main/webapp/styles/main.css b/solution/greenpages.web/src/main/webapp/styles/main.css
new file mode 100644
index 0000000..8eac83a
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/styles/main.css
@@ -0,0 +1,290 @@
+/*
+ * MAIN CSS
+ *
+ * All styles for the screen, other than color-specific styles,
+ * should be included here.
+ *
+ * COMMON STYLES
+ */
+body {
+ font: 12px Helvetica, Arial, "Bitstream Vera Sans", sans-serif;
+ background-color: #dfdfdf;
+}
+
+#page {
+ margin: auto;
+ width: 800px;
+ color: #333;
+}
+
+/*
+ * HEADER STYLES
+ */
+#header {
+ background: #fff url(../images/header-right.png) no-repeat scroll right top;
+ width: 100%;
+ height: 100px;
+}
+
+#name-and-company {
+ background: transparent url(../images/header-left.png) no-repeat top left;
+ width: 100%;
+ height: 100px;
+ top: 0px;
+ left: 0px;
+}
+
+#site-name {
+ background: transparent url(../images/header-title-left.png) no-repeat scroll center center;
+ height: 100px;
+ width: 345px;
+}
+
+#site-name a, #site-name a:hover {
+ height: 60px;
+ width: 190px;
+}
+
+#company-name a, #site-name a:hover {
+ height: 60px;
+ width: 190px;
+}
+
+
+/*
+ * TEXT FORMATTING STYLES
+ */
+h1 {
+ font-size: 1.4em;
+ padding: 12px 0 5px 0;
+ line-height: 125%;
+ color: #002E62;
+ border-bottom: 1px solid #BAD9EC;
+}
+
+h2 {
+ font-size: 1.2em;
+ padding: 10px 0 2px 0;
+ color: #002E62;
+}
+
+h3 {
+ font-size: 1em;
+ padding: 8px 0 5px 0;
+ color: #002E62;
+}
+
+h4 {
+ font-size: 1em;
+ padding-top: 8px;
+ color: #333;
+}
+
+h5 {
+ font-size: 1em;
+ padding-top: 6px;
+ color: #333;
+}
+
+/*
+ * LINK STYLES
+ */
+
+a:link, a:visited {
+ color: #333;
+ text-decoration: underline;
+}
+
+a:hover, a:focus {
+ color: #0093CF;
+ text-decoration: underline;
+}
+
+a:active, a.active {
+ color: #0093CF;
+}
+
+/*
+ * MENU STYLES
+ */
+#primary-navigation {
+ background: #fff url(../images/menu-stretch.png) repeat-x scroll 0 0;
+ height:29px;
+ margin:0;
+ padding:0;
+ position: relative;
+}
+
+#primary-left {
+ background: #002E62;
+ float: left;
+ height: 26px;
+ line-height: normal;
+ padding: 3px 0 0;
+ position: relative;
+}
+
+#primary-right {
+ background: #002E62;
+ float: right;
+ height: 26px;
+ line-height: normal;
+ padding: 3px 0 0;
+ position: relative;
+}
+
+#primary-left ul, #primary-right ul {
+ padding: 0 4px 0 4px;
+ margin: 2px 0 0 0;
+ list-style: none;
+}
+
+#primary-left li, #primary-right li {
+ display: inline;
+}
+
+#primary-left a, #primary-right a {
+ color: #ffffff;
+ display: block;
+ float: left;
+ font-weight:normal;
+ margin: 0 1px 0 1px;
+ padding: 7px 8px 4px 10px;
+ text-decoration: none;
+}
+
+#primary-left a:hover, #primary-right a:hover, .selected-menu {
+ background: #ffffff;
+ color:#002E62;
+ text-decoration: none;
+}
+
+#left-curve {
+ float: left;
+}
+
+#right-curve {
+ float: right;
+}
+
+/*
+ * CONTAINER STYLES
+ */
+#content-no-nav {
+ display: block;
+ margin: 0px 22px 20px 22px;
+ padding: 0;
+}
+
+#container {
+ margin: 0;
+ padding-bottom: 20px;
+ overflow:hidden;
+ background:#fff;
+}
+
+/*
+ * TABLE STYLES
+ */
+table {
+ border-spacing: 0;
+ margin: 0;
+ border-collapse: collapse;
+ color:#666;
+}
+
+th {
+ height: 19px;
+ text-align: left;
+ font-weight: bold;
+ margin: 0;
+ padding: 3px 6px 0 6px;
+ line-height: 19px;
+ color:#333;
+}
+
+.bordered-table {
+ border:1px solid #BAD9EC;
+}
+
+.bordered-table th {
+ background-image: url(../images/table-header-background.png);
+ background-repeat: repeat-x;
+ white-space: nowrap;
+ border-bottom: 1px solid #BAD9EC;
+}
+
+td {
+ margin: 0;
+ padding: 4px 6px 4px 6px;
+ vertical-align: top;
+}
+
+td.table-icon {
+ padding-top: 2px;
+ padding-bottom: 1px;
+}
+
+.sublevel1-odd {
+ background:#fff;
+}
+
+.sublevel1-even {
+ background:#E8F6FF;
+}
+
+.two-tables {
+ width:100%;
+}
+
+.two-tables .left {
+ float:left;
+}
+
+.two-tables .right {
+ float:right;
+}
+
+/*
+ * FOOTER STYLES
+ */
+#footer-wrapper {
+ clear: both;
+ margin: 0;
+ background-image: url(../images/footer-stretch.png);
+ background-repeat: repeat-x;
+ height: 29px;
+ width: 100%;
+}
+
+#footer-left, #footer-right {
+ margin: 0;
+ font-size: 85%;
+ padding: 1em;
+ height: 29px;
+ color: #bbb;
+}
+
+#footer-left {
+ text-align: left;
+ background-image: url(../images/footer-left.png);
+ background-repeat: no-repeat;
+ position: relative;
+ left: 0;
+ float: left;
+}
+
+#footer-right {
+ text-align: right;
+ background-image: url(../images/footer-right.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+ position: relative;
+ right: 0;
+ float: right;
+}
+
+#footer-left a, #footer-right a {
+ color: #999;
+ text-decoration:none;
+}
diff --git a/solution/greenpages.web/src/main/webapp/styles/print.css b/solution/greenpages.web/src/main/webapp/styles/print.css
new file mode 100644
index 0000000..f325cfc
--- /dev/null
+++ b/solution/greenpages.web/src/main/webapp/styles/print.css
@@ -0,0 +1,46 @@
+/* White background, black text, arial font, decent font size */
+body {
+ background-color: #fff;
+ color: #000;
+ font-family: Arial, Helvetica, "Bitstream Vera Sans", sans-serif;
+ font-size: 10pt;
+ width: 100%;
+}
+
+/* Change the layout to remove columns */
+html body {
+ background: transparent;
+ width: auto;
+}
+
+#main,#container {
+ width: 100%;
+}
+
+#page {
+ margin: 0;
+ width: 90%;
+}
+
+#content {
+ margin: 0;
+ overflow: visible;
+}
+
+/* Hide header and nav elements */
+#header,#primary-navigation,#secondary-navigation,#footer-wrapper {
+ visibility: hidden;
+ display: none;
+}
+
+/* Style links */
+a:link,a:visited {
+ color: #520;
+ background: transparent;
+ text-decoration: underline !important;
+}
+
+/* Remove table header graphic */
+.bordered-table th {
+ background-image: none;
+}
\ No newline at end of file
diff --git a/solution/greenpages.web/src/test/java/greenpages/web/GreenPagesSpringContextTests.java b/solution/greenpages.web/src/test/java/greenpages/web/GreenPagesSpringContextTests.java
new file mode 100644
index 0000000..dd3086e
--- /dev/null
+++ b/solution/greenpages.web/src/test/java/greenpages/web/GreenPagesSpringContextTests.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.web;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import greenpages.Listing;
+import greenpages.web.GreenPagesController;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(locations = { "classpath*:/META-INF/spring/module-context.xml", "file:src/main/webapp/WEB-INF/greenpages-servlet.xml", "classpath:/META-INF/spring/test-context.xml" })
+@TestExecutionListeners(value = DependencyInjectionTestExecutionListener.class)
+public class GreenPagesSpringContextTests {
+
+ @Autowired
+ private GreenPagesController controller;
+
+ @Test
+ public void search() {
+ List<Listing> results = this.controller.search("johnson");
+ assertNotNull(results);
+ assertEquals(1, results.size());
+
+ Listing listing = results.get(0);
+ assertNotNull(listing);
+ assertEquals("Johnson", listing.getLastName());
+ }
+
+ @Test
+ public void entry() {
+ Listing listing = this.controller.entry(1);
+ assertNotNull(listing);
+ assertEquals("Johnson", listing.getLastName());
+ }
+}
diff --git a/solution/greenpages.web/src/test/java/greenpages/web/TestDataPopulator.java b/solution/greenpages.web/src/test/java/greenpages/web/TestDataPopulator.java
new file mode 100644
index 0000000..945c19a
--- /dev/null
+++ b/solution/greenpages.web/src/test/java/greenpages/web/TestDataPopulator.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.web;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.sql.DataSource;
+
+import org.springframework.core.io.Resource;
+
+/**
+ * A class that populates a datasource with test data
+ */
+public class TestDataPopulator {
+
+ private final DataSource dataSource;
+
+ private final Resource testDataLocation;
+
+ public TestDataPopulator(DataSource dataSource, Resource testDataLocation) {
+ this.dataSource = dataSource;
+ this.testDataLocation = testDataLocation;
+ }
+
+ public void populate() {
+ Connection connection = null;
+ try {
+ connection = dataSource.getConnection();
+ insertTestData(connection);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred acquiring connection", e);
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ }
+ }
+ }
+ }
+
+ private void insertTestData(Connection connection) {
+ try {
+ String sql = parseSqlIn(testDataLocation);
+ executeSql(sql, connection);
+ } catch (IOException e) {
+ throw new RuntimeException("I/O exception occurred accessing the test data file", e);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred loading test data", e);
+ }
+ }
+
+ private String parseSqlIn(Resource resource) throws IOException {
+ InputStream is = null;
+ try {
+ is = resource.getInputStream();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+
+ StringWriter sw = new StringWriter();
+ BufferedWriter writer = new BufferedWriter(sw);
+
+ for (int c = reader.read(); c != -1; c = reader.read()) {
+ writer.write(c);
+ }
+ writer.flush();
+ return sw.toString();
+
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+
+ private void executeSql(String sql, Connection connection) throws SQLException {
+ Statement statement = connection.createStatement();
+ statement.execute(sql);
+ }
+}
diff --git a/solution/greenpages.web/src/test/resources/META-INF/spring/test-context.xml b/solution/greenpages.web/src/test/resources/META-INF/spring/test-context.xml
new file mode 100644
index 0000000..c1d14b4
--- /dev/null
+++ b/solution/greenpages.web/src/test/resources/META-INF/spring/test-context.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
+ p:driverClassName="org.h2.Driver" p:url="jdbc:h2:.~/greenpages-db/greenpages"
+ p:username="greenpages" p:password="pass"
+ init-method="createDataSource" destroy-method="close"/>
+
+ <bean class="greenpages.web.TestDataPopulator" init-method="populate">
+ <constructor-arg ref="dataSource"/>
+ <constructor-arg value="file:../../db/db.sql"/>
+ </bean>
+
+</beans>
diff --git a/solution/greenpages.web/template.mf b/solution/greenpages.web/template.mf
new file mode 100644
index 0000000..b63162c
--- /dev/null
+++ b/solution/greenpages.web/template.mf
@@ -0,0 +1,24 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages Web
+Bundle-SymbolicName: greenpages.web
+Bundle-Version: 2.0
+Web-ContextPath: greenpages
+Import-Template:
+ org.springframework.*;version="[3.0, 3.1)",
+ greenpages.*;version="[2.0, 2.1)"
+Import-Package:
+ javax.servlet.jsp.jstl.core;version="[1.1.2,1.2.0)",
+ org.eclipse.virgo.web.dm;version="[2.0.0, 3.0.0)",
+ org.springframework.web.context;version="[3.0, 3.1)",
+ freemarker.cache;version="[2.3.15,2.3.15]"
+Import-Bundle:
+ com.springsource.org.apache.taglibs.standard;version="[1.1.2,1.3)"
+Import-Library:
+ org.springframework.spring;version="[3.0, 3.1)"
+Excluded-Exports:
+ greenpages.tests,
+ greenpages.web
+Excluded-Imports:
+ org.springframework.test.*,
+ org.junit.*
diff --git a/solution/greenpages/.classpath b/solution/greenpages/.classpath
new file mode 100644
index 0000000..a225f00
--- /dev/null
+++ b/solution/greenpages/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/solution/greenpages/.project b/solution/greenpages/.project
new file mode 100644
index 0000000..c04b5ad
--- /dev/null
+++ b/solution/greenpages/.project
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages-solution</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>com.springsource.server.ide.facet.core.parnature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ </natures>
+</projectDescription>
diff --git a/solution/greenpages/.settings/com.springsource.server.ide.runtime.core.par.xml b/solution/greenpages/.settings/com.springsource.server.ide.runtime.core.par.xml
new file mode 100644
index 0000000..655afb3
--- /dev/null
+++ b/solution/greenpages/.settings/com.springsource.server.ide.runtime.core.par.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<com.springsource.server.ide.par:Par xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.springsource.server.ide.par="http:///com/springsource/server/ide/par.ecore">
+ <bundle symbolicName="greenpages.app-solution"/>
+ <bundle symbolicName="greenpages.db-solution"/>
+ <bundle symbolicName="greenpages.jpa-solution"/>
+ <bundle symbolicName="greenpages.web-solution"/>
+</com.springsource.server.ide.par:Par>
diff --git a/solution/greenpages/.settings/org.eclipse.wst.common.project.facet.core.xml b/solution/greenpages/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..f856a12
--- /dev/null
+++ b/solution/greenpages/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="com.springsource.server.par" version="1.0"/>
+</faceted-project>
diff --git a/solution/greenpages/.settings/org.maven.ide.eclipse.prefs b/solution/greenpages/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..97f7bba
--- /dev/null
+++ b/solution/greenpages/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Apr 21 16:53:20 BST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/solution/greenpages/.springBeans b/solution/greenpages/.springBeans
new file mode 100644
index 0000000..5d8d5a5
--- /dev/null
+++ b/solution/greenpages/.springBeans
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.0.v200809261800]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/solution/greenpages/META-INF/MANIFEST.MF b/solution/greenpages/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..4198c7e
--- /dev/null
+++ b/solution/greenpages/META-INF/MANIFEST.MF
@@ -0,0 +1,5 @@
+Manifest-Version: 1.0
+Application-SymbolicName: greenpages
+Application-Version: 2.0.0
+Application-Name: Greenpages PAR
+
diff --git a/solution/greenpages/pom.xml b/solution/greenpages/pom.xml
new file mode 100644
index 0000000..134a0f5
--- /dev/null
+++ b/solution/greenpages/pom.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent-solution</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages-solution</artifactId>
+ <name>GreenPages PAR</name>
+ <description>GreenPages PAR</description>
+ <packaging>par</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.app-solution</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.jpa-solution</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.db-solution</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.web-solution</artifactId>
+ <version>${project.version}</version>
+ <type>war</type>
+ </dependency>
+ <!-- Required for the web bundle as dependancies are not propagated up from war build types -->
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>com.springsource.freemarker</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-par-plugin</artifactId>
+ <version>1.0.0.RELEASE</version>
+ <configuration>
+ <applicationSymbolicName>greenpages</applicationSymbolicName>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <executions>
+ <execution>
+ <id>copy-dependencies</id>
+ <phase>package</phase>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>${project.build.directory}/par-provided</outputDirectory>
+ <overWriteIfNewer>true</overWriteIfNewer>
+ <excludeGroupIds>com.springsource.dmserver,org.apache.log4j</excludeGroupIds>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/solution/parent/.classpath b/solution/parent/.classpath
new file mode 100644
index 0000000..473e0cf
--- /dev/null
+++ b/solution/parent/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/solution/parent/.project b/solution/parent/.project
new file mode 100644
index 0000000..537c91f
--- /dev/null
+++ b/solution/parent/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.parent-solution</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/solution/parent/.settings/org.maven.ide.eclipse.prefs b/solution/parent/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..980e36e
--- /dev/null
+++ b/solution/parent/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Jun 23 10:37:10 BST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/solution/parent/pom.xml b/solution/parent/pom.xml
new file mode 100644
index 0000000..a018b20
--- /dev/null
+++ b/solution/parent/pom.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent-solution</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <name>greenpages.parent</name>
+ <packaging>pom</packaging>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ <version>3.0.0.M3</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
+ <version>1.2.2.osgi</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>com.springsource.org.h2</artifactId>
+ <version>1.0.71</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>com.springsource.javax.persistence</artifactId>
+ <version>1.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence</artifactId>
+ <version>1.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence.jpa</artifactId>
+ <version>1.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>org.aspectj-library</artifactId>
+ <type>libd</type>
+ <version>1.6.2.RELEASE</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>com.springsource.freemarker</artifactId>
+ <version>2.3.15</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ <version>4.5.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.test</artifactId>
+ <version>3.0.0.M3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.instrument</artifactId>
+ <version>3.0.0.M3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.aspects</artifactId>
+ <version>3.0.0.M3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>com.springsource.javax.servlet</artifactId>
+ <version>2.5.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <repositories>
+ <repository>
+ <id>com.springsource.repository.bundles.snapshot</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Snapshot</name>
+ <url>http://repository.springsource.com/maven/bundles/snapshot</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.bundles.release</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
+ <url>http://repository.springsource.com/maven/bundles/release</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.bundle.external</id>
+ <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
+ <url>http://repository.springsource.com/maven/bundles/external</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.bundle.milestone</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Milestones</name>
+ <url>http://repository.springsource.com/maven/bundles/milestone</url>
+ </repository>
+
+ <repository>
+ <id>com.springsource.repository.libraries.release</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/release</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.libraries.external</id>
+ <name>SpringSource Enterprise Bundle Repository - External Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/external</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.libraries.milestone</id>
+ <name>SpringSource Enterprise Bundle Repository - Milestone Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/milestone</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.libraries.snapshot</id>
+ <name>SpringSource Enterprise Bundle Repository - Snapshot Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/snapshot</url>
+ </repository>
+ </repositories>
+
+ <properties>
+ <maven.test.failure.ignore>true</maven.test.failure.ignore>
+ </properties>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>com.springsource.repository.bundles.release</id>
+ <name>SpringSource Enterprise Bundle Repository - Releases</name>
+ <url>http://repository.springsource.com/maven/bundles/release</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>com.springsource.repository.bundles.milestone</id>
+ <name>SpringSource Enterprise Bundle Repository - Milestone</name>
+ <url>http://repository.springsource.com/maven/bundles/milestone</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.springsource.bundlor</groupId>
+ <artifactId>com.springsource.bundlor.maven</artifactId>
+ <version>1.0.0.M2</version>
+ <executions>
+ <execution>
+ <id>bundlor</id>
+ <goals>
+ <goal>transform</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>
+ src/main/resources/META-INF/MANIFEST.MF
+ </manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>**/*Tests.java</include>
+ </includes>
+ <excludes>
+ <exclude>**/Abstract*.java</exclude>
+ </excludes>
+ <junitArtifactName>org.junit:com.springsource.org.junit</junitArtifactName>
+ <argLine>-javaagent:${user.home}/.m2/repository/org/springframework/org.springframework.instrument/3.0.0.M3/org.springframework.instrument-3.0.0.M3.jar</argLine>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/solution/pom.xml b/solution/pom.xml
new file mode 100644
index 0000000..fe36de6
--- /dev/null
+++ b/solution/pom.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages-top-level-solution</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <name>GreenPages App Build</name>
+ <packaging>pom</packaging>
+ <modules>
+ <module>parent</module>
+ <module>greenpages.db</module>
+ <module>greenpages.app</module>
+ <module>greenpages.jpa</module>
+ <module>greenpages.web</module>
+ <module>greenpages</module>
+ </modules>
+</project>
diff --git a/start/greenpages.app/.classpath b/start/greenpages.app/.classpath
new file mode 100644
index 0000000..fb2f7c1
--- /dev/null
+++ b/start/greenpages.app/.classpath
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/start/greenpages.app/.project b/start/greenpages.app/.project
new file mode 100644
index 0000000..c5e2b47
--- /dev/null
+++ b/start/greenpages.app/.project
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.app</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>com.springsource.server.ide.facet.core.bundlenature</nature>
+ </natures>
+</projectDescription>
diff --git a/start/greenpages.app/.settings/org.eclipse.wst.common.project.facet.core.xml b/start/greenpages.app/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..7f43a0b
--- /dev/null
+++ b/start/greenpages.app/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="com.springsource.server.bundle" version="1.0"/>
+ <installed facet="jst.java" version="6.0"/>
+ <installed facet="jst.utility" version="1.0"/>
+</faceted-project>
diff --git a/start/greenpages.app/.settings/org.maven.ide.eclipse.prefs b/start/greenpages.app/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..36f8d7b
--- /dev/null
+++ b/start/greenpages.app/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Apr 21 16:53:30 BST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/start/greenpages.app/.springBeans b/start/greenpages.app/.springBeans
new file mode 100644
index 0000000..4cdca85
--- /dev/null
+++ b/start/greenpages.app/.springBeans
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.2.v200901262210]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ <config>src/main/resources/META-INF/spring/module-context.xml</config>
+ <config>src/main/resources/META-INF/spring/osgi-context.xml</config>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/start/greenpages.app/pom.xml b/start/greenpages.app/pom.xml
new file mode 100644
index 0000000..0d5b078
--- /dev/null
+++ b/start/greenpages.app/pom.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.app</artifactId>
+ <name>greenpages.app</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/start/greenpages.app/src/main/java/greenpages/Directory.java b/start/greenpages.app/src/main/java/greenpages/Directory.java
new file mode 100644
index 0000000..08ddb9e
--- /dev/null
+++ b/start/greenpages.app/src/main/java/greenpages/Directory.java
@@ -0,0 +1,43 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages;
+
+import java.util.List;
+
+/**
+ * Main business interface for the GreenPages application.
+ *
+ * <p>
+ * Using this interface you can {@link #search(String) search} the directory for a {@link Listing} and you can access a
+ * <code>Listing</code> {@link #findListing(int) by ID}.
+ *
+ * @see Listing
+ */
+public interface Directory {
+
+ /**
+ * Searches the directory for all {@link Listing Listings} that match the supplied term. Matching is done against
+ * the {@link Listing#getLastName() last name} of all known <code>Listings</code>.
+ *
+ * @param term the search criteria.
+ * @return the search results or an empty {@link List} if no matches are found.
+ */
+ List<Listing> search(String term);
+
+ /**
+ * Finds the {@link Listing} with the supplied ID.
+ *
+ * @param id the ID of the <code>Listing</code>
+ * @return the <code>Listing</code> or <code>null</code> if no match is found.
+ */
+ Listing findListing(int id);
+}
diff --git a/start/greenpages.app/src/main/java/greenpages/Listing.java b/start/greenpages.app/src/main/java/greenpages/Listing.java
new file mode 100644
index 0000000..65e1c0e
--- /dev/null
+++ b/start/greenpages.app/src/main/java/greenpages/Listing.java
@@ -0,0 +1,28 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages;
+
+/**
+ * Represents a listing in the GreenPages {@link Directory}.
+ *
+ * @see Directory
+ */
+public interface Listing {
+
+ Integer getListingNumber();
+
+ String getFirstName();
+
+ String getLastName();
+
+ String getEmailAddress();
+}
diff --git a/start/greenpages.app/src/main/java/greenpages/internal/DirectoryImpl.java b/start/greenpages.app/src/main/java/greenpages/internal/DirectoryImpl.java
new file mode 100644
index 0000000..b39904c
--- /dev/null
+++ b/start/greenpages.app/src/main/java/greenpages/internal/DirectoryImpl.java
@@ -0,0 +1,59 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.internal;
+
+import java.util.Collections;
+import java.util.List;
+
+import greenpages.Directory;
+import greenpages.Listing;
+
+/**
+ * Stub implementation of {@link Directory} that allows for simple testing without a database.
+ *
+ * Uses Spring 2.* component scanning to find this class and create a bean. The name for this bean
+ * is extracted from the {@link Component} annotation.
+ */
+
+public class DirectoryImpl implements Directory {
+
+ private static final Listing ANDY_WILKINSON = new ImmutableListing(1, "Andy", "Wilkinson", "andy.wilkinson@springsource.com");
+
+ /**
+ * {@inheritDoc}
+ *
+ * Stub implementation will match only for term '<code>johnson</code>'.
+ */
+ public List<Listing> search(String term) {
+ if (ANDY_WILKINSON.getLastName().equalsIgnoreCase(term)) {
+ Listing l = ANDY_WILKINSON;
+
+ return Collections.singletonList(l);
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Stub implementation will return a {@link Listing} for ID 1.
+ */
+ public Listing findListing(int id) {
+ if (id == ANDY_WILKINSON.getListingNumber()) {
+ return ANDY_WILKINSON;
+ } else {
+ return null;
+ }
+ }
+
+}
diff --git a/start/greenpages.app/src/main/java/greenpages/internal/ImmutableListing.java b/start/greenpages.app/src/main/java/greenpages/internal/ImmutableListing.java
new file mode 100644
index 0000000..b15494c
--- /dev/null
+++ b/start/greenpages.app/src/main/java/greenpages/internal/ImmutableListing.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.internal;
+
+import greenpages.Listing;
+
+final class ImmutableListing implements Listing {
+
+ private final Integer listingNumber;
+
+ private final String firstName;
+
+ private final String lastName;
+
+ private final String emailAddress;
+
+ public ImmutableListing(int listingNumber, String firstName,String lastName, String emailAddress) {
+
+ this.listingNumber = listingNumber;
+ this.firstName = firstName;
+ this.lastName = lastName;
+ this.emailAddress = emailAddress;
+ }
+
+ public Integer getListingNumber() {
+ return listingNumber;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+}
diff --git a/start/greenpages.app/src/main/resources/META-INF/MANIFEST.MF b/start/greenpages.app/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..43db230
--- /dev/null
+++ b/start/greenpages.app/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Export-Package: greenpages;version="2.0",greenpages.internal;version="
+ 2.0";uses:="greenpages"
+Bundle-Vendor: SpringSource Inc.
+Bundle-Version: 2.0
+Tool: Bundlor 1.0.0.BUILD-20090616142719
+Bundle-Name: GreenPages Service
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: greenpages
+Import-Package: org.springframework.stereotype;version="[3.0, 3.1)"
+
diff --git a/start/greenpages.app/src/main/resources/META-INF/spring/module-context.xml b/start/greenpages.app/src/main/resources/META-INF/spring/module-context.xml
new file mode 100644
index 0000000..0c595e9
--- /dev/null
+++ b/start/greenpages.app/src/main/resources/META-INF/spring/module-context.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
+ xmlns:context="http://www.springframework.org/schema/context">
+
+ <!-- enables classpath component scanning for this module -->
+
+
+</beans>
diff --git a/start/greenpages.app/src/main/resources/META-INF/spring/osgi-context.xml b/start/greenpages.app/src/main/resources/META-INF/spring/osgi-context.xml
new file mode 100644
index 0000000..7cc7faa
--- /dev/null
+++ b/start/greenpages.app/src/main/resources/META-INF/spring/osgi-context.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"
+ xmlns:osgi="http://www.springframework.org/schema/osgi">
+
+
+
+</beans>
diff --git a/start/greenpages.app/template.mf b/start/greenpages.app/template.mf
new file mode 100644
index 0000000..abd59e6
--- /dev/null
+++ b/start/greenpages.app/template.mf
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages Service
+Bundle-SymbolicName: greenpages
+Bundle-Vendor: SpringSource Inc.
+Bundle-Version: 2.0
+Import-Template:
+ org.springframework.*;version="[3.0, 3.1)"
diff --git a/start/greenpages.jpa/.classpath b/start/greenpages.jpa/.classpath
new file mode 100644
index 0000000..7c3d14f
--- /dev/null
+++ b/start/greenpages.jpa/.classpath
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/start/greenpages.jpa/.project b/start/greenpages.jpa/.project
new file mode 100644
index 0000000..e342065
--- /dev/null
+++ b/start/greenpages.jpa/.project
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.jpa</name>
+ <comment></comment>
+ <projects>
+ <project>greenpages.app</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>com.springsource.server.ide.facet.core.bundlenature</nature>
+ </natures>
+</projectDescription>
diff --git a/start/greenpages.jpa/.settings/JpaDirectorySpringContextTests.launch b/start/greenpages.jpa/.settings/JpaDirectorySpringContextTests.launch
new file mode 100644
index 0000000..267c841
--- /dev/null
+++ b/start/greenpages.jpa/.settings/JpaDirectorySpringContextTests.launch
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<stringAttribute key="bad_container_name" value="/greenpages.jpa/.setting"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/greenpages.jpa/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="greenpages.jpa.JpaDirectorySpringContextTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="greenpages.jpa"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/springframework/org.springframework.instrument/3.0.0.M3/org.springframework.instrument-3.0.0.M3.jar"/>
+</launchConfiguration>
diff --git a/start/greenpages.jpa/.settings/com.springsource.server.ide.jdt.core.xml b/start/greenpages.jpa/.settings/com.springsource.server.ide.jdt.core.xml
new file mode 100644
index 0000000..cdf435e
--- /dev/null
+++ b/start/greenpages.jpa/.settings/com.springsource.server.ide.jdt.core.xml
@@ -0,0 +1,533 @@
+<classpath>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/com.springsource.javax.persistence-1.0.0.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="javax/persistence/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/com.springsource.org.aopalliance-1.0.0.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/aopalliance/aop/*"/>
+ <accessrule kind="accessible" pattern="org/aopalliance/intercept/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/com.springsource.org.aspectj.runtime-1.6.2.RELEASE.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/aspectj/internal/lang/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/internal/lang/reflect/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/lang/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/lang/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/lang/internal/lang/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/lang/reflect/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/runtime/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/runtime/internal/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/runtime/internal/cflowstack/*"/>
+ <accessrule kind="accessible" pattern="org/aspectj/runtime/reflect/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/usr/com.springsource.org.eclipse.persistence-1.0.0.jar" sourcepath="/Users/robharrop/dev/dmserver/greenpages/ivy-cache/repository/org.eclipse.persistence/com.springsource.org.eclipse.persistence/1.0.0/com.springsource.org.eclipse.persistence-sources-1.0.0.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/annotations/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/config/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/descriptors/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/descriptors/changetracking/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/descriptors/copying/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/descriptors/invalidation/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/eis/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/eis/adapters/jms/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/eis/adapters/xmlfile/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/eis/interactions/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/eis/mappings/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/exceptions/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/exceptions/i18n/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/expressions/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/expressions/spatial/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/history/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/indirection/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/codegen/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/databaseaccess/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/descriptors/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/descriptors/changetracking/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/eis/adapters/jms/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/eis/adapters/xmlfile/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/eis/cobol/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/eis/cobol/helper/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/expressions/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/helper/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/helper/linkedlist/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/history/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/identitymaps/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/indirection/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/deployment/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/parsing/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/parsing/jpql/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/parsing/jpql/antlr/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/localization/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/localization/i18n/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/oxm/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/oxm/conversion/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/oxm/documentpreservation/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/oxm/record/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/oxm/record/deferred/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/oxm/schema/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/oxm/schema/model/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/queries/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/security/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sequencing/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/coordination/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/coordination/broadcast/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/coordination/corba/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/coordination/corba/sun/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/coordination/jms/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/coordination/rmi/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/coordination/rmi/iiop/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/event/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/log/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/login/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/platform/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/pool/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/project/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/property/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/rcm/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/rcm/command/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/sequencing/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/session/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/transport/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/transport/discovery/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/factories/model/transport/naming/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/sessions/remote/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/weaving/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/logging/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/mappings/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/mappings/converters/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/mappings/foundation/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/mappings/querykeys/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/mappings/structures/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/mappings/transformers/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/attachment/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/documentpreservation/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/mappings/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/mappings/converters/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/mappings/nullpolicy/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/platform/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/record/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/schema/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/sequenced/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/oxm/unmapped/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/database/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/database/converters/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/database/jdbc/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/database/oracle/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/server/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/server/jboss/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/server/oc4j/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/server/sunas/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/server/was/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/server/wls/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/xml/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/platform/xml/jaxp/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/queries/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sequencing/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/services/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/services/mbean/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/broker/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/changesets/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/coordination/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/coordination/broadcast/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/coordination/corba/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/coordination/corba/sun/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/coordination/jms/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/coordination/rmi/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/factories/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/interceptors/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/remote/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/remote/corba/sun/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/remote/rmi/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/remote/rmi/iiop/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/sessions/server/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/tools/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/tools/file/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/tools/profiler/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/tools/schemaframework/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/transaction/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/transaction/jboss/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/transaction/oc4j/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/transaction/sunas/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/transaction/was/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/transaction/wls/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/usr/com.springsource.org.eclipse.persistence.jpa-1.0.0.jar" sourcepath="/Users/robharrop/dev/dmserver/greenpages/ivy-cache/repository/org.eclipse.persistence/com.springsource.org.eclipse.persistence/1.0.0/com.springsource.org.eclipse.persistence-sources-1.0.0.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/deployment/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/deployment/osgi/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/deployment/xml/parser/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/jdbc/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/accessors/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/accessors/classes/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/accessors/mappings/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/accessors/objects/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/cache/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/changetracking/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/columns/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/converters/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/copypolicy/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/inheritance/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/listeners/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/locking/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/queries/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/sequencing/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/tables/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/transformers/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/metadata/xml/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/jpa/transaction/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/internal/weaving/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/jpa/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/jpa/osgi/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/queries/*"/>
+ <accessrule kind="accessible" pattern="org/eclipse/persistence/tools/weaving/jpa/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry combineaccessrules="false" kind="src" path="/greenpages.app">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="greenpages/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.aop-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/aop/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/aspectj/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/aspectj/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/aspectj/autoproxy/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/config/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/framework/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/framework/adapter/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/framework/autoproxy/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/framework/autoproxy/target/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/interceptor/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/scope/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/support/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/target/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/aop/target/dynamic/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.aspects-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/aspectj/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/transaction/aspectj/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.beans-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/beans/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/access/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/access/el/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/config/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/generic/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/parsing/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/serviceloader/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/wiring/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/factory/xml/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/propertyeditors/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/beans/support/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.context-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/context/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/context/access/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/context/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/context/config/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/context/event/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/context/i18n/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/context/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/context/weaving/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ejb/access/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ejb/config/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ejb/interceptor/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ejb/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/instrument/classloading/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/instrument/classloading/glassfish/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/instrument/classloading/oc4j/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/instrument/classloading/weblogic/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/access/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/export/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/export/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/export/assembler/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/export/metadata/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/export/naming/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/export/notification/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jmx/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jndi/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jndi/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/rmi/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/soap/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scheduling/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scheduling/backportconcurrent/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scheduling/concurrent/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scheduling/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scheduling/timer/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scripting/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scripting/bsh/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scripting/config/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scripting/groovy/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scripting/jruby/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scripting/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/stereotype/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ui/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ui/context/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ui/context/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/validation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/validation/support/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.context.support-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/cache/ehcache/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/mail/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/mail/javamail/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scheduling/commonj/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/scheduling/quartz/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ui/freemarker/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ui/jasperreports/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/ui/velocity/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.core-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/asm/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/asm/commons/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/asm/signature/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/enums/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/io/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/io/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/style/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/task/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/task/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/type/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/type/classreading/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/core/type/filter/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/metadata/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/metadata/commons/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/util/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/util/comparator/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/util/xml/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.jdbc-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/core/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/core/metadata/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/core/namedparam/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/core/simple/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/core/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/datasource/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/datasource/lookup/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/object/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/support/incrementer/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/support/lob/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/support/nativejdbc/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/support/rowset/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jdbc/support/xml/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.jms-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/jms/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/config/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/connection/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/core/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/core/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/listener/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/listener/adapter/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/listener/endpoint/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/listener/serversession/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/remoting/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/support/converter/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jms/support/destination/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.orm-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/orm/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/hibernate3/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/hibernate3/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/hibernate3/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/ibatis/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/ibatis/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/jdo/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/jdo/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/jpa/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/jpa/persistenceunit/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/jpa/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/jpa/vendor/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/toplink/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/orm/toplink/support/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.transaction-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/dao/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/dao/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/dao/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/cci/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/cci/connection/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/cci/core/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/cci/core/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/cci/object/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/context/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/endpoint/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/work/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/work/glassfish/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/jca/work/jboss/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/transaction/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/transaction/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/transaction/config/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/transaction/interceptor/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/transaction/jta/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/transaction/support/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.web-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/caucho/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/httpinvoker/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/jaxrpc/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/jaxrpc/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/remoting/jaxws/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/context/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/context/request/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/context/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/filter/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/jsf/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/jsf/el/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/util/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+<classpathentry kind="lib" path="/opt/springsource-dm-server-1.0.2.RELEASE/repository/bundles/ext/org.springframework.web.servlet-2.5.6.A.jar">
+ <attributes>
+ <attribute name="com.springsource.server.ide.jdt.core.CLASSPATH_ENTRY" value="true"/>
+ </attributes>
+ <accessrules>
+ <accessrule kind="accessible" pattern="org/springframework/web/bind/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/bind/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/bind/annotation/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/bind/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/multipart/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/multipart/commons/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/multipart/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/handler/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/handler/metadata/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/i18n/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/mvc/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/mvc/annotation/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/mvc/multiaction/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/mvc/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/mvc/throwaway/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/support/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/tags/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/tags/form/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/theme/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/view/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/view/document/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/view/freemarker/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/view/jasperreports/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/view/tiles2/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/view/velocity/*"/>
+ <accessrule kind="accessible" pattern="org/springframework/web/servlet/view/xslt/*"/>
+ <accessrule ignoreifbetter="true" kind="nonaccessible" pattern="**/*"/>
+ </accessrules>
+</classpathentry>
+</classpath>
diff --git a/start/greenpages.jpa/.settings/org.eclipse.jdt.core.prefs b/start/greenpages.jpa/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..2c3501a
--- /dev/null
+++ b/start/greenpages.jpa/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Wed Jul 01 15:38:07 BST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/start/greenpages.jpa/.settings/org.eclipse.wst.common.project.facet.core.xml b/start/greenpages.jpa/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..801f856
--- /dev/null
+++ b/start/greenpages.jpa/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="com.springsource.server.bundle" version="1.0"/>
+</faceted-project>
diff --git a/start/greenpages.jpa/.settings/org.maven.ide.eclipse.prefs b/start/greenpages.jpa/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..8f47b36
--- /dev/null
+++ b/start/greenpages.jpa/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Apr 21 16:53:36 BST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/start/greenpages.jpa/.springBeans b/start/greenpages.jpa/.springBeans
new file mode 100644
index 0000000..27e7084
--- /dev/null
+++ b/start/greenpages.jpa/.springBeans
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.5.200906231226-RC1]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ <config>src/main/resources/META-INF/spring/osgi-context.xml</config>
+ <config>src/main/resources/META-INF/spring/module-context.xml</config>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/start/greenpages.jpa/pom.xml b/start/greenpages.jpa/pom.xml
new file mode 100644
index 0000000..f6559f6
--- /dev/null
+++ b/start/greenpages.jpa/pom.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.jpa</artifactId>
+ <name>greenpages.jpa</name>
+ <packaging>jar</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.app</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.test</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.instrument</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.aspects</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>com.springsource.org.h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>org.aspectj-library</artifactId>
+ <type>libd</type>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/start/greenpages.jpa/src/main/java/greenpages/jpa/JpaDirectory.java b/start/greenpages.jpa/src/main/java/greenpages/jpa/JpaDirectory.java
new file mode 100644
index 0000000..b6cfe72
--- /dev/null
+++ b/start/greenpages.jpa/src/main/java/greenpages/jpa/JpaDirectory.java
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import greenpages.Directory;
+import greenpages.Listing;
+
+import java.util.List;
+
+final class JpaDirectory implements Directory {
+
+ private static final String SEARCH_QUERY = "select l from Listing l where upper(l.lastName) like :term";
+
+ public Listing findListing(int id) {
+ return null;
+ }
+
+ public List<Listing> search(String term) {
+ return null;
+ }
+}
diff --git a/start/greenpages.jpa/src/main/java/greenpages/jpa/JpaListing.java b/start/greenpages.jpa/src/main/java/greenpages/jpa/JpaListing.java
new file mode 100644
index 0000000..1965495
--- /dev/null
+++ b/start/greenpages.jpa/src/main/java/greenpages/jpa/JpaListing.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import greenpages.Listing;
+
+/**
+ * Basic implementation of {@link Listing} that is configured as a persistent type in JPA.
+ */
+public class JpaListing implements Listing {
+
+ private Integer listingNumber;
+
+ private String firstName;
+
+ private String lastName;
+
+ private String emailAddress;
+
+ public Integer getListingNumber() {
+ return listingNumber;
+ }
+
+ public void setListingNumber(Integer listingNumber) {
+ this.listingNumber = listingNumber;
+ }
+
+ public String getFirstName() {
+ return firstName;
+ }
+
+ public void setFirstName(String firstName) {
+ this.firstName = firstName;
+ }
+
+ public String getLastName() {
+ return lastName;
+ }
+
+ public void setLastName(String lastName) {
+ this.lastName = lastName;
+ }
+
+ public String getEmailAddress() {
+ return emailAddress;
+ }
+
+ public void setEmailAddress(String emailAddress) {
+ this.emailAddress = emailAddress;
+ }
+
+}
diff --git a/start/greenpages.jpa/src/main/resources/META-INF/MANIFEST.MF b/start/greenpages.jpa/src/main/resources/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..59720d7
--- /dev/null
+++ b/start/greenpages.jpa/src/main/resources/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages JPA
+Bundle-SymbolicName: greenpages.jpa
+Bundle-Vendor: SpringSource Inc.
+Bundle-Version: 1.0
\ No newline at end of file
diff --git a/start/greenpages.jpa/src/main/resources/META-INF/spring/module-context.xml b/start/greenpages.jpa/src/main/resources/META-INF/spring/module-context.xml
new file mode 100644
index 0000000..d776245
--- /dev/null
+++ b/start/greenpages.jpa/src/main/resources/META-INF/spring/module-context.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Application context definition for GreenPages JPA.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:tx="http://www.springframework.org/schema/tx"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
+ http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
+
+</beans>
diff --git a/start/greenpages.jpa/src/main/resources/META-INF/spring/osgi-context.xml b/start/greenpages.jpa/src/main/resources/META-INF/spring/osgi-context.xml
new file mode 100644
index 0000000..82041ec
--- /dev/null
+++ b/start/greenpages.jpa/src/main/resources/META-INF/spring/osgi-context.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"
+ xmlns:osgi="http://www.springframework.org/schema/osgi">
+
+</beans>
diff --git a/start/greenpages.jpa/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java b/start/greenpages.jpa/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java
new file mode 100644
index 0000000..5f3e1ac
--- /dev/null
+++ b/start/greenpages.jpa/src/test/java/greenpages/jpa/JpaDirectorySpringContextTests.java
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import greenpages.Directory;
+import greenpages.Listing;
+
+import java.util.List;
+
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class JpaDirectorySpringContextTests {
+
+ @Autowired
+ private Directory directory;
+
+ @Test
+ public void search() {
+ List<Listing> results = this.directory.search("johnson");
+ assertNotNull(results);
+ assertEquals(1, results.size());
+
+ Listing listing = results.get(0);
+ assertNotNull(listing);
+ assertEquals("Johnson", listing.getLastName());
+ }
+}
diff --git a/start/greenpages.jpa/src/test/java/greenpages/jpa/TestDataPopulator.java b/start/greenpages.jpa/src/test/java/greenpages/jpa/TestDataPopulator.java
new file mode 100644
index 0000000..24f779b
--- /dev/null
+++ b/start/greenpages.jpa/src/test/java/greenpages/jpa/TestDataPopulator.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.jpa;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.sql.DataSource;
+
+import org.springframework.core.io.Resource;
+
+/**
+ * A class that populates a datasource with test data
+ */
+public class TestDataPopulator {
+
+ private final DataSource dataSource;
+
+ private final Resource testDataLocation;
+
+ public TestDataPopulator(DataSource dataSource, Resource testDataLocation) {
+ this.dataSource = dataSource;
+ this.testDataLocation = testDataLocation;
+ }
+
+ public void populate() {
+ Connection connection = null;
+ try {
+ connection = dataSource.getConnection();
+ insertTestData(connection);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred acquiring connection", e);
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ }
+ }
+ }
+ }
+
+ private void insertTestData(Connection connection) {
+ try {
+ String sql = parseSqlIn(testDataLocation);
+ executeSql(sql, connection);
+ } catch (IOException e) {
+ throw new RuntimeException("I/O exception occurred accessing the test data file", e);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred loading test data", e);
+ }
+ }
+
+ private String parseSqlIn(Resource resource) throws IOException {
+ InputStream is = null;
+ try {
+ is = resource.getInputStream();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+
+ StringWriter sw = new StringWriter();
+ BufferedWriter writer = new BufferedWriter(sw);
+
+ for (int c = reader.read(); c != -1; c = reader.read()) {
+ writer.write(c);
+ }
+ writer.flush();
+ return sw.toString();
+
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+
+ private void executeSql(String sql, Connection connection) throws SQLException {
+ Statement statement = connection.createStatement();
+ statement.execute(sql);
+ }
+}
diff --git a/start/greenpages.jpa/src/test/resources/META-INF/spring/test-context.xml b/start/greenpages.jpa/src/test/resources/META-INF/spring/test-context.xml
new file mode 100644
index 0000000..578d192
--- /dev/null
+++ b/start/greenpages.jpa/src/test/resources/META-INF/spring/test-context.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+</beans>
diff --git a/start/greenpages.jpa/template.mf b/start/greenpages.jpa/template.mf
new file mode 100644
index 0000000..ddf54bc
--- /dev/null
+++ b/start/greenpages.jpa/template.mf
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages JPA
+Bundle-SymbolicName: greenpages.jpa
+Bundle-Vendor: SpringSource Inc.
+Bundle-Version: 2.0
+Import-Template:
+ org.apache.commons.dbcp.*;version="[1.2.2.osgi, 1.2.2.osgi]"
+Excluded-Imports:
+ org.springframework.test.*,
+ org.junit.*
\ No newline at end of file
diff --git a/start/greenpages.web/.classpath b/start/greenpages.web/.classpath
new file mode 100644
index 0000000..ff5c3ef
--- /dev/null
+++ b/start/greenpages.web/.classpath
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources"/>
+ <classpathentry kind="src" output="target/test-classes" path="src/test/java"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER">
+ <attributes>
+ <attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/start/greenpages.web/.project b/start/greenpages.web/.project
new file mode 100644
index 0000000..11b1821
--- /dev/null
+++ b/start/greenpages.web/.project
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.web</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.wst.common.project.facet.core.builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.wst.validation.validationbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.springframework.ide.eclipse.core.springbuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ <nature>com.springsource.server.ide.facet.core.bundlenature</nature>
+ <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+ <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.springframework.ide.eclipse.core.springnature</nature>
+ <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+ <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+ </natures>
+</projectDescription>
diff --git a/start/greenpages.web/.settings/.jsdtscope b/start/greenpages.web/.settings/.jsdtscope
new file mode 100644
index 0000000..bbb8e68
--- /dev/null
+++ b/start/greenpages.web/.settings/.jsdtscope
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
+ <attributes>
+ <attribute name="hide" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
+ <classpathentry kind="output" path=""/>
+</classpath>
diff --git a/start/greenpages.web/.settings/GreenPagesSpringContextTests.launch b/start/greenpages.web/.settings/GreenPagesSpringContextTests.launch
new file mode 100644
index 0000000..e0dbecb
--- /dev/null
+++ b/start/greenpages.web/.settings/GreenPagesSpringContextTests.launch
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/greenpages.web/src/test/java/greenpages/tests/GreenPagesSpringContextTests.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.classpathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="greenpages.tests.GreenPagesSpringContextTests"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="greenpages.web"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.maven.ide.eclipse.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:${system_property:user.home}/.m2/repository/org/springframework/org.springframework.instrument/3.0.0.M3/org.springframework.instrument-3.0.0.M3.jar"/>
+</launchConfiguration>
diff --git a/start/greenpages.web/.settings/org.eclipse.wst.common.component b/start/greenpages.web/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..60d1ce0
--- /dev/null
+++ b/start/greenpages.web/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project-modules id="moduleCoreId" project-version="1.5.0">
+<wb-module deploy-name="greenpages.web">
+<wb-resource deploy-path="/" source-path="/src/main/webapp"/>
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+<wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
+<property name="context-root" value="greenpages"/>
+<property name="java-output-path"/>
+</wb-module>
+</project-modules>
diff --git a/start/greenpages.web/.settings/org.eclipse.wst.common.project.facet.core.xml b/start/greenpages.web/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..0ce7597
--- /dev/null
+++ b/start/greenpages.web/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<faceted-project>
+ <installed facet="com.springsource.server.bundle" version="1.0"/>
+ <installed facet="jst.java" version="6.0"/>
+ <installed facet="jst.web" version="2.5"/>
+</faceted-project>
diff --git a/start/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.container b/start/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/start/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/start/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.name b/start/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/start/greenpages.web/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/start/greenpages.web/.settings/org.maven.ide.eclipse.prefs b/start/greenpages.web/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..6f0c672
--- /dev/null
+++ b/start/greenpages.web/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Dec 15 16:06:27 GMT 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/start/greenpages.web/.settings/org.springframework.ide.eclipse.beans.core.prefs b/start/greenpages.web/.settings/org.springframework.ide.eclipse.beans.core.prefs
new file mode 100644
index 0000000..af8ab8b
--- /dev/null
+++ b/start/greenpages.web/.settings/org.springframework.ide.eclipse.beans.core.prefs
@@ -0,0 +1,3 @@
+#Mon Mar 09 17:11:56 GMT 2009
+eclipse.preferences.version=1
+org.springframework.ide.eclipse.beans.core.ignoreMissingNamespaceHandler=false
diff --git a/start/greenpages.web/.springBeans b/start/greenpages.web/.springBeans
new file mode 100644
index 0000000..618a258
--- /dev/null
+++ b/start/greenpages.web/.springBeans
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beansProjectDescription>
+ <version>1</version>
+ <pluginVersion><![CDATA[2.2.8.200911091054-RELEASE]]></pluginVersion>
+ <configSuffixes>
+ <configSuffix><![CDATA[xml]]></configSuffix>
+ </configSuffixes>
+ <enableImports><![CDATA[false]]></enableImports>
+ <configs>
+ </configs>
+ <configSets>
+ </configSets>
+</beansProjectDescription>
diff --git a/start/greenpages.web/pom.xml b/start/greenpages.web/pom.xml
new file mode 100644
index 0000000..cfa2ebb
--- /dev/null
+++ b/start/greenpages.web/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <parent>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <relativePath>../parent</relativePath>
+ </parent>
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.web</artifactId>
+ <name>greenpages.web</name>
+ <packaging>war</packaging>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>com.springsource.freemarker</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>com.springsource.javax.servlet</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.aspects</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.instrument</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>com.springsource.org.h2</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>org.aspectj-library</artifactId>
+ <type>libd</type>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+</project>
diff --git a/start/greenpages.web/src/main/java/greenpages/web/.gitignore b/start/greenpages.web/src/main/java/greenpages/web/.gitignore
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/start/greenpages.web/src/main/java/greenpages/web/.gitignore
diff --git a/start/greenpages.web/src/main/webapp/META-INF/MANIFEST.MF b/start/greenpages.web/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..795ff6e
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,16 @@
+Manifest-Version: 1.0
+Bundle-Name: GreenPages Web
+Import-Library: org.springframework.spring;version="[3.0, 3.1)"
+Import-Bundle: com.springsource.org.apache.taglibs.standard;version="[
+ 1.1.2,1.3)"
+Import-Package: org.eclipse.virgo.web.dm;version="[2.0.0, 3.0.0)
+ ",freemarker.cache;version="[2.3.15,2.3.15]",javax.servlet.jsp.jstl.c
+ ore;version="[1.1.2,1.2.0)",javax.sql,org.apache.commons.dbcp,org.spr
+ ingframework.core.io,org.springframework.stereotype,org.springframewo
+ rk.web.bind.annotation,org.springframework.web.context,org.springfram
+ ework.web.servlet
+Bundle-ManifestVersion: 2
+Bundle-SymbolicName: greenpages.web
+Tool: Bundlor 1.0.0.M6
+Bundle-Version: 2.0
+
diff --git a/start/greenpages.web/src/main/webapp/WEB-INF/applicationContext.xml b/start/greenpages.web/src/main/webapp/WEB-INF/applicationContext.xml
new file mode 100644
index 0000000..47967d3
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/WEB-INF/applicationContext.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
+ http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd"
+ xmlns:context="http://www.springframework.org/schema/context"
+ xmlns:osgi="http://www.springframework.org/schema/osgi">
+
+
+</beans>
diff --git a/start/greenpages.web/src/main/webapp/WEB-INF/ftl/entry.ftl b/start/greenpages.web/src/main/webapp/WEB-INF/ftl/entry.ftl
new file mode 100644
index 0000000..504e6ec
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/WEB-INF/ftl/entry.ftl
@@ -0,0 +1,49 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>GreenPages</title>
+ <link rel="stylesheet" href="/greenpages/styles/main.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/local.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/print.css" type="text/css" media="print" />
+</head>
+<body class="main tundra">
+ <div id="page">
+ <div id="mini-header">
+ <div id="mini-header-left"></div>
+ <div id="mini-header-right"></div>
+ </div> <!-- /mini-header -->
+
+ <div id="primary-navigation">
+ <div id="primary-left">
+ <ul>
+ <li><a href="/greenpages" title="Admin Console">GreenPages</a></li>
+ </ul>
+ </div>
+ <img id="left-curve" src="/greenpages/images/menu-curve-left.png"/>
+ <div id="primary-right">
+ <ul>
+ <li><a href="/admin" title="Admin Console">Admin Console</a></li>
+ <li><a href="http://www.eclipse.org/virgo" title="Admin Console">Virgo</a></li>
+ </ul>
+ </div>
+ <img id="right-curve" src="/greenpages/images/menu-curve-right.png"/>
+ </div><!-- /primary-navigation -->
+
+ <div id="container">
+ <div id="content-no-nav">
+ <h1>Virgo Web Server - Greenpages sample</h1>
+ <p/>
+ <h2>${listing.firstName} ${listing.lastName}</h2>
+ <a href="mailto:${listing.emailAddress}">${listing.emailAddress}</a>
+ </div> <!-- /content -->
+ </div> <!-- /container -->
+
+ <div id="footer-wrapper">
+ <div id="footer-left">© Copyright 2008, 2010 VMware Inc. Licensed under the Eclipse Public License v1.0.</div>
+ <div id="footer-right"></div>
+ </div> <!-- /footer-wrapper -->
+
+ </div> <!-- /page -->
+
+</body>
+</html>
\ No newline at end of file
diff --git a/start/greenpages.web/src/main/webapp/WEB-INF/ftl/home.ftl b/start/greenpages.web/src/main/webapp/WEB-INF/ftl/home.ftl
new file mode 100644
index 0000000..bec4830
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/WEB-INF/ftl/home.ftl
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>GreenPages</title>
+ <link rel="stylesheet" href="/greenpages/styles/main.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/local.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/print.css" type="text/css" media="print" />
+</head>
+<body class="main tundra">
+ <div id="page">
+ <div id="mini-header">
+ <div id="mini-header-left"></div>
+ <div id="mini-header-right"></div>
+ </div> <!-- /mini-header -->
+
+ <div id="primary-navigation">
+ <div id="primary-left">
+ <ul>
+ <li><a href="/greenpages" title="Admin Console">GreenPages</a></li>
+ </ul>
+ </div>
+ <img id="left-curve" src="/greenpages/images/menu-curve-left.png"/>
+ <div id="primary-right">
+ <ul>
+ <li><a href="/admin" title="Admin Console">Admin Console</a></li>
+ <li><a href="http://www.eclipse.org/virgo" title="Admin Console">Virgo</a></li>
+ </ul>
+ </div>
+ <img id="right-curve" src="/greenpages/images/menu-curve-right.png"/>
+ </div><!-- /primary-navigation -->
+
+ <div id="container">
+ <div id="content-no-nav">
+ <h1>Virgo Web Server - Greenpages sample</h1>
+ <p/>
+ <form name="searchForm" method="GET" action="search.htm">
+ <input name="query" type="text"/> <input type="submit"/>
+ </form>
+ </div> <!-- /content -->
+ </div> <!-- /container -->
+
+ <div id="footer-wrapper">
+ <div id="footer-left">© Copyright 2008, 2010 VMware Inc. Licensed under the Eclipse Public License v1.0.</div>
+ <div id="footer-right"></div>
+ </div> <!-- /footer-wrapper -->
+
+ </div> <!-- /page -->
+
+</body>
+</html>
\ No newline at end of file
diff --git a/start/greenpages.web/src/main/webapp/WEB-INF/ftl/search.ftl b/start/greenpages.web/src/main/webapp/WEB-INF/ftl/search.ftl
new file mode 100644
index 0000000..f116e48
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/WEB-INF/ftl/search.ftl
@@ -0,0 +1,72 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<title>GreenPages</title>
+ <link rel="stylesheet" href="/greenpages/styles/main.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/local.css" type="text/css" />
+ <link rel="stylesheet" href="/greenpages/styles/print.css" type="text/css" media="print" />
+</head>
+<body class="main tundra">
+ <div id="page">
+ <div id="mini-header">
+ <div id="mini-header-left"></div>
+ <div id="mini-header-right"></div>
+ </div> <!-- /mini-header -->
+
+ <div id="primary-navigation">
+ <div id="primary-left">
+ <ul>
+ <li><a href="/greenpages" title="Admin Console">GreenPages</a></li>
+ </ul>
+ </div>
+ <img id="left-curve" src="/greenpages/images/menu-curve-left.png"/>
+ <div id="primary-right">
+ <ul>
+ <li><a href="/admin" title="Admin Console">Admin Console</a></li>
+ <li><a href="http://www.eclipse.org/virgo" title="Admin Console">Virgo</a></li>
+ </ul>
+ </div>
+ <img id="right-curve" src="/greenpages/images/menu-curve-right.png"/>
+ </div><!-- /primary-navigation -->
+
+ <div id="container">
+ <div id="content-no-nav">
+ <h1>Virgo Web Server - Greenpages sample</h1>
+ <p/>
+ <form name="searchForm" method="GET" action="search.htm">
+ <input name="query" type="text"/> <input type="submit"/>
+ </form>
+ <#if listingList?? && (listingList?size > 0)>
+ <table id="results">
+ <thead>
+ <tr>
+ <th>Last Name</th>
+ <th>First Name</th>
+ <th> </th>
+ </tr>
+ </thead>
+ <tbody>
+ <#list listingList as listing>
+ <tr>
+ <td>${listing.lastName}</td>
+ <td>${listing.firstName}</td>
+ <td><a href="entry.htm?id=${listing.listingNumber}">view</a></td>
+ </tr>
+ </#list>
+ </tbody>
+ </table>
+ <#else>
+ <h2>No results found.</h2>
+ </#if>
+ </div> <!-- /content -->
+ </div> <!-- /container -->
+
+ <div id="footer-wrapper">
+ <div id="footer-left">© Copyright 2008, 2010 VMware Inc. Licensed under the Eclipse Public License v1.0.</div>
+ <div id="footer-right"></div>
+ </div> <!-- /footer-wrapper -->
+
+ </div> <!-- /page -->
+
+</body>
+</html>
\ No newline at end of file
diff --git a/start/greenpages.web/src/main/webapp/WEB-INF/greenpages-servlet.xml b/start/greenpages.web/src/main/webapp/WEB-INF/greenpages-servlet.xml
new file mode 100644
index 0000000..e5a784c
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/WEB-INF/greenpages-servlet.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
+ xmlns:context="http://www.springframework.org/schema/context">
+
+ <!-- enable classpath scanning -->
+
+
+ <!-- enable anntotation-driven controllers -->
+ <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />
+
+
+ <!-- configure FreeMarker support -->
+ <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
+ <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
+ </bean>
+
+ <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
+ <property name="cache" value="true" />
+ <property name="suffix" value=".ftl" />
+ </bean>
+</beans>
diff --git a/start/greenpages.web/src/main/webapp/WEB-INF/web.xml b/start/greenpages.web/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..f5a6641
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
+
+ <display-name>Greenpages - web</display-name>
+
+
+ <welcome-file-list>
+ <welcome-file>index.jsp</welcome-file>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ </welcome-file-list>
+
+<!-- CONFIGURE A PARENT APPLICATION CONTEXT -->
+
+ <context-param>
+ <param-name>contextClass</param-name>
+ <param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
+ </context-param>
+
+ <listener>
+ <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
+ </listener>
+
+
+ <!-- DISPATCHER SERVLET CONFIG -->
+ <servlet>
+ <servlet-name>greenpages</servlet-name>
+ <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>greenpages</servlet-name>
+ <url-pattern>/app/*</url-pattern>
+ </servlet-mapping>
+
+</web-app>
\ No newline at end of file
diff --git a/start/greenpages.web/src/main/webapp/images/favicon.ico b/start/greenpages.web/src/main/webapp/images/favicon.ico
new file mode 100755
index 0000000..9244a9c
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/favicon.ico
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/footer-left.png b/start/greenpages.web/src/main/webapp/images/footer-left.png
new file mode 100644
index 0000000..8bfe3b1
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/footer-left.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/footer-right.png b/start/greenpages.web/src/main/webapp/images/footer-right.png
new file mode 100644
index 0000000..51527ad
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/footer-right.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/footer-stretch.png b/start/greenpages.web/src/main/webapp/images/footer-stretch.png
new file mode 100644
index 0000000..c58f721
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/footer-stretch.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/header-left.png b/start/greenpages.web/src/main/webapp/images/header-left.png
new file mode 100644
index 0000000..4920a0a
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/header-left.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/header-right.png b/start/greenpages.web/src/main/webapp/images/header-right.png
new file mode 100644
index 0000000..09b0a59
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/header-right.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/loader-white-large.gif b/start/greenpages.web/src/main/webapp/images/loader-white-large.gif
new file mode 100644
index 0000000..aa4ec5a
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/loader-white-large.gif
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/loader-white-small.gif b/start/greenpages.web/src/main/webapp/images/loader-white-small.gif
new file mode 100644
index 0000000..75ad2b3
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/loader-white-small.gif
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/menu-curve-left.png b/start/greenpages.web/src/main/webapp/images/menu-curve-left.png
new file mode 100644
index 0000000..c48a2e0
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/menu-curve-left.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/menu-curve-right.png b/start/greenpages.web/src/main/webapp/images/menu-curve-right.png
new file mode 100644
index 0000000..1f3b100
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/menu-curve-right.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/menu-stretch.png b/start/greenpages.web/src/main/webapp/images/menu-stretch.png
new file mode 100644
index 0000000..0ca66f7
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/menu-stretch.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/mini-header-left.png b/start/greenpages.web/src/main/webapp/images/mini-header-left.png
new file mode 100644
index 0000000..72551e7
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/mini-header-left.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/mini-header-right.png b/start/greenpages.web/src/main/webapp/images/mini-header-right.png
new file mode 100644
index 0000000..8aaf50c
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/mini-header-right.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/s2ap_soda_can.png b/start/greenpages.web/src/main/webapp/images/s2ap_soda_can.png
new file mode 100644
index 0000000..8eb53a8
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/s2ap_soda_can.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/spring.png b/start/greenpages.web/src/main/webapp/images/spring.png
new file mode 100644
index 0000000..05a1940
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/spring.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/images/table-header-background.png b/start/greenpages.web/src/main/webapp/images/table-header-background.png
new file mode 100644
index 0000000..8f2ba1b
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/images/table-header-background.png
Binary files differ
diff --git a/start/greenpages.web/src/main/webapp/index.html b/start/greenpages.web/src/main/webapp/index.html
new file mode 100644
index 0000000..a541368
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/index.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+ <head>
+ <title>GreenPages</title>
+ <meta http-equiv="REFRESH" content="0;url=/greenpages/app/home.htm">
+ </head>
+ <body>
+
+ </body>
+</html>
\ No newline at end of file
diff --git a/start/greenpages.web/src/main/webapp/styles/local.css b/start/greenpages.web/src/main/webapp/styles/local.css
new file mode 100644
index 0000000..8302e89
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/styles/local.css
@@ -0,0 +1,40 @@
+/*
+ * Local style information for the Virgo Splash Screen
+ *
+ * Contains both style and colour information and
+ * overrides content from the dojo/tundra style.
+ *
+ * Christopher Frost - March 2010
+ *
+ */
+
+#mini-header, #mini-header-left, #mini-header-right {
+ height: 7px;
+ width: 7px;
+ margin: 0px;
+ padding: 0px;
+}
+
+#mini-header {
+ width: 100%;
+ background-color: #002e62;
+}
+
+#mini-header-left {
+ background-image: url(../images/mini-header-left.png);
+ background-repeat: no-repeat;
+ background-position: left top;
+ float: left;
+}
+
+#mini-header-right {
+ background-image: url(../images/mini-header-right.png);
+ background-repeat: no-repeat scroll;
+ background-position: right top;
+ float: right;
+}
+
+#content-no-nav {
+ background: transparent url(../images/s2ap_soda_can.png) no-repeat bottom right;
+ height: 400px;
+}
\ No newline at end of file
diff --git a/start/greenpages.web/src/main/webapp/styles/main.css b/start/greenpages.web/src/main/webapp/styles/main.css
new file mode 100644
index 0000000..8eac83a
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/styles/main.css
@@ -0,0 +1,290 @@
+/*
+ * MAIN CSS
+ *
+ * All styles for the screen, other than color-specific styles,
+ * should be included here.
+ *
+ * COMMON STYLES
+ */
+body {
+ font: 12px Helvetica, Arial, "Bitstream Vera Sans", sans-serif;
+ background-color: #dfdfdf;
+}
+
+#page {
+ margin: auto;
+ width: 800px;
+ color: #333;
+}
+
+/*
+ * HEADER STYLES
+ */
+#header {
+ background: #fff url(../images/header-right.png) no-repeat scroll right top;
+ width: 100%;
+ height: 100px;
+}
+
+#name-and-company {
+ background: transparent url(../images/header-left.png) no-repeat top left;
+ width: 100%;
+ height: 100px;
+ top: 0px;
+ left: 0px;
+}
+
+#site-name {
+ background: transparent url(../images/header-title-left.png) no-repeat scroll center center;
+ height: 100px;
+ width: 345px;
+}
+
+#site-name a, #site-name a:hover {
+ height: 60px;
+ width: 190px;
+}
+
+#company-name a, #site-name a:hover {
+ height: 60px;
+ width: 190px;
+}
+
+
+/*
+ * TEXT FORMATTING STYLES
+ */
+h1 {
+ font-size: 1.4em;
+ padding: 12px 0 5px 0;
+ line-height: 125%;
+ color: #002E62;
+ border-bottom: 1px solid #BAD9EC;
+}
+
+h2 {
+ font-size: 1.2em;
+ padding: 10px 0 2px 0;
+ color: #002E62;
+}
+
+h3 {
+ font-size: 1em;
+ padding: 8px 0 5px 0;
+ color: #002E62;
+}
+
+h4 {
+ font-size: 1em;
+ padding-top: 8px;
+ color: #333;
+}
+
+h5 {
+ font-size: 1em;
+ padding-top: 6px;
+ color: #333;
+}
+
+/*
+ * LINK STYLES
+ */
+
+a:link, a:visited {
+ color: #333;
+ text-decoration: underline;
+}
+
+a:hover, a:focus {
+ color: #0093CF;
+ text-decoration: underline;
+}
+
+a:active, a.active {
+ color: #0093CF;
+}
+
+/*
+ * MENU STYLES
+ */
+#primary-navigation {
+ background: #fff url(../images/menu-stretch.png) repeat-x scroll 0 0;
+ height:29px;
+ margin:0;
+ padding:0;
+ position: relative;
+}
+
+#primary-left {
+ background: #002E62;
+ float: left;
+ height: 26px;
+ line-height: normal;
+ padding: 3px 0 0;
+ position: relative;
+}
+
+#primary-right {
+ background: #002E62;
+ float: right;
+ height: 26px;
+ line-height: normal;
+ padding: 3px 0 0;
+ position: relative;
+}
+
+#primary-left ul, #primary-right ul {
+ padding: 0 4px 0 4px;
+ margin: 2px 0 0 0;
+ list-style: none;
+}
+
+#primary-left li, #primary-right li {
+ display: inline;
+}
+
+#primary-left a, #primary-right a {
+ color: #ffffff;
+ display: block;
+ float: left;
+ font-weight:normal;
+ margin: 0 1px 0 1px;
+ padding: 7px 8px 4px 10px;
+ text-decoration: none;
+}
+
+#primary-left a:hover, #primary-right a:hover, .selected-menu {
+ background: #ffffff;
+ color:#002E62;
+ text-decoration: none;
+}
+
+#left-curve {
+ float: left;
+}
+
+#right-curve {
+ float: right;
+}
+
+/*
+ * CONTAINER STYLES
+ */
+#content-no-nav {
+ display: block;
+ margin: 0px 22px 20px 22px;
+ padding: 0;
+}
+
+#container {
+ margin: 0;
+ padding-bottom: 20px;
+ overflow:hidden;
+ background:#fff;
+}
+
+/*
+ * TABLE STYLES
+ */
+table {
+ border-spacing: 0;
+ margin: 0;
+ border-collapse: collapse;
+ color:#666;
+}
+
+th {
+ height: 19px;
+ text-align: left;
+ font-weight: bold;
+ margin: 0;
+ padding: 3px 6px 0 6px;
+ line-height: 19px;
+ color:#333;
+}
+
+.bordered-table {
+ border:1px solid #BAD9EC;
+}
+
+.bordered-table th {
+ background-image: url(../images/table-header-background.png);
+ background-repeat: repeat-x;
+ white-space: nowrap;
+ border-bottom: 1px solid #BAD9EC;
+}
+
+td {
+ margin: 0;
+ padding: 4px 6px 4px 6px;
+ vertical-align: top;
+}
+
+td.table-icon {
+ padding-top: 2px;
+ padding-bottom: 1px;
+}
+
+.sublevel1-odd {
+ background:#fff;
+}
+
+.sublevel1-even {
+ background:#E8F6FF;
+}
+
+.two-tables {
+ width:100%;
+}
+
+.two-tables .left {
+ float:left;
+}
+
+.two-tables .right {
+ float:right;
+}
+
+/*
+ * FOOTER STYLES
+ */
+#footer-wrapper {
+ clear: both;
+ margin: 0;
+ background-image: url(../images/footer-stretch.png);
+ background-repeat: repeat-x;
+ height: 29px;
+ width: 100%;
+}
+
+#footer-left, #footer-right {
+ margin: 0;
+ font-size: 85%;
+ padding: 1em;
+ height: 29px;
+ color: #bbb;
+}
+
+#footer-left {
+ text-align: left;
+ background-image: url(../images/footer-left.png);
+ background-repeat: no-repeat;
+ position: relative;
+ left: 0;
+ float: left;
+}
+
+#footer-right {
+ text-align: right;
+ background-image: url(../images/footer-right.png);
+ background-repeat: no-repeat;
+ background-position: top right;
+ position: relative;
+ right: 0;
+ float: right;
+}
+
+#footer-left a, #footer-right a {
+ color: #999;
+ text-decoration:none;
+}
diff --git a/start/greenpages.web/src/main/webapp/styles/print.css b/start/greenpages.web/src/main/webapp/styles/print.css
new file mode 100644
index 0000000..f325cfc
--- /dev/null
+++ b/start/greenpages.web/src/main/webapp/styles/print.css
@@ -0,0 +1,46 @@
+/* White background, black text, arial font, decent font size */
+body {
+ background-color: #fff;
+ color: #000;
+ font-family: Arial, Helvetica, "Bitstream Vera Sans", sans-serif;
+ font-size: 10pt;
+ width: 100%;
+}
+
+/* Change the layout to remove columns */
+html body {
+ background: transparent;
+ width: auto;
+}
+
+#main,#container {
+ width: 100%;
+}
+
+#page {
+ margin: 0;
+ width: 90%;
+}
+
+#content {
+ margin: 0;
+ overflow: visible;
+}
+
+/* Hide header and nav elements */
+#header,#primary-navigation,#secondary-navigation,#footer-wrapper {
+ visibility: hidden;
+ display: none;
+}
+
+/* Style links */
+a:link,a:visited {
+ color: #520;
+ background: transparent;
+ text-decoration: underline !important;
+}
+
+/* Remove table header graphic */
+.bordered-table th {
+ background-image: none;
+}
\ No newline at end of file
diff --git a/start/greenpages.web/src/test/java/greenpages/tests/GreenPagesSpringContextTests.java b/start/greenpages.web/src/test/java/greenpages/tests/GreenPagesSpringContextTests.java
new file mode 100644
index 0000000..47deaf1
--- /dev/null
+++ b/start/greenpages.web/src/test/java/greenpages/tests/GreenPagesSpringContextTests.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.tests;
+
+//import static org.junit.Assert.assertEquals;
+//import static org.junit.Assert.assertNotNull;
+//import greenpages.Listing;
+//import java.util.List;
+//import org.springframework.beans.factory.annotation.Autowired;
+
+import org.junit.Test;
+
+public class GreenPagesSpringContextTests {
+
+// @Autowired
+// private GreenPagesController controller;
+
+ @Test
+ public void search() {
+// List<Listing> results = this.controller.search("johnson");
+// assertNotNull(results);
+// assertEquals(1, results.size());
+//
+// Listing listing = results.get(0);
+// assertNotNull(listing);
+// assertEquals("Johnson", listing.getLastName());
+ }
+
+ @Test
+ public void entry() {
+// Listing listing = this.controller.entry(1);
+// assertNotNull(listing);
+// assertEquals("Johnson", listing.getLastName());
+ }
+}
diff --git a/start/greenpages.web/src/test/java/greenpages/tests/TestDataPopulator.java b/start/greenpages.web/src/test/java/greenpages/tests/TestDataPopulator.java
new file mode 100644
index 0000000..0283b9b
--- /dev/null
+++ b/start/greenpages.web/src/test/java/greenpages/tests/TestDataPopulator.java
@@ -0,0 +1,96 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2010 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * VMware Inc. - initial contribution
+ *******************************************************************************/
+
+package greenpages.tests;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+import javax.sql.DataSource;
+
+import org.springframework.core.io.Resource;
+
+/**
+ * A class that populates a datasource with test data
+ */
+public class TestDataPopulator {
+
+ private final DataSource dataSource;
+
+ private final Resource testDataLocation;
+
+ public TestDataPopulator(DataSource dataSource, Resource testDataLocation) {
+ this.dataSource = dataSource;
+ this.testDataLocation = testDataLocation;
+ }
+
+ public void populate() {
+ Connection connection = null;
+ try {
+ connection = dataSource.getConnection();
+ insertTestData(connection);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred acquiring connection", e);
+ } finally {
+ if (connection != null) {
+ try {
+ connection.close();
+ } catch (SQLException e) {
+ }
+ }
+ }
+ }
+
+ private void insertTestData(Connection connection) {
+ try {
+ String sql = parseSqlIn(testDataLocation);
+ executeSql(sql, connection);
+ } catch (IOException e) {
+ throw new RuntimeException("I/O exception occurred accessing the test data file", e);
+ } catch (SQLException e) {
+ throw new RuntimeException("SQL exception occurred loading test data", e);
+ }
+ }
+
+ private String parseSqlIn(Resource resource) throws IOException {
+ InputStream is = null;
+ try {
+ is = resource.getInputStream();
+ BufferedReader reader = new BufferedReader(new InputStreamReader(is));
+
+ StringWriter sw = new StringWriter();
+ BufferedWriter writer = new BufferedWriter(sw);
+
+ for (int c = reader.read(); c != -1; c = reader.read()) {
+ writer.write(c);
+ }
+ writer.flush();
+ return sw.toString();
+
+ } finally {
+ if (is != null) {
+ is.close();
+ }
+ }
+ }
+
+ private void executeSql(String sql, Connection connection) throws SQLException {
+ Statement statement = connection.createStatement();
+ statement.execute(sql);
+ }
+}
diff --git a/start/greenpages.web/src/test/resources/META-INF/spring/test-context.xml b/start/greenpages.web/src/test/resources/META-INF/spring/test-context.xml
new file mode 100644
index 0000000..39c88f1
--- /dev/null
+++ b/start/greenpages.web/src/test/resources/META-INF/spring/test-context.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:p="http://www.springframework.org/schema/p"
+ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
+ p:driverClassName="org.h2.Driver" p:url="jdbc:h2:.~/greenpages-db/greenpages"
+ p:username="greenpages" p:password="pass"
+ init-method="createDataSource" destroy-method="close"/>
+
+ <bean class="greenpages.tests.TestDataPopulator" init-method="populate">
+ <constructor-arg ref="dataSource"/>
+ <constructor-arg value="file:../../db/db.sql"/>
+ </bean>
+
+</beans>
diff --git a/start/greenpages.web/template.mf b/start/greenpages.web/template.mf
new file mode 100644
index 0000000..00ba4ff
--- /dev/null
+++ b/start/greenpages.web/template.mf
@@ -0,0 +1,19 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: GreenPages Web
+Bundle-SymbolicName: greenpages.web
+Bundle-Version: 2.0
+Import-Package:
+ javax.servlet.jsp.jstl.core;version="[1.1.2,1.2.0)",
+ org.eclipse.virgo.web.dm;version="[2.0.0, 3.0.0)",
+ freemarker.cache;version="[2.3.15,2.3.15]"
+Import-Bundle:
+ com.springsource.org.apache.taglibs.standard;version="[1.1.2,1.3)"
+Import-Library:
+ org.springframework.spring;version="[3.0, 3.1)"
+Excluded-Exports:
+ greenpages.tests,
+ greenpages.web
+Excluded-Imports:
+ org.springframework.test.*,
+ org.junit.*
diff --git a/start/parent/.classpath b/start/parent/.classpath
new file mode 100644
index 0000000..25df935
--- /dev/null
+++ b/start/parent/.classpath
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/start/parent/.project b/start/parent/.project
new file mode 100644
index 0000000..1b729b7
--- /dev/null
+++ b/start/parent/.project
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>greenpages.parent</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ </natures>
+</projectDescription>
diff --git a/start/parent/.settings/org.maven.ide.eclipse.prefs b/start/parent/.settings/org.maven.ide.eclipse.prefs
new file mode 100644
index 0000000..980e36e
--- /dev/null
+++ b/start/parent/.settings/org.maven.ide.eclipse.prefs
@@ -0,0 +1,9 @@
+#Tue Jun 23 10:37:10 BST 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
diff --git a/start/parent/pom.xml b/start/parent/pom.xml
new file mode 100644
index 0000000..72182b0
--- /dev/null
+++ b/start/parent/pom.xml
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages.parent</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <name>greenpages.parent</name>
+ <packaging>pom</packaging>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.spring-library</artifactId>
+ <type>libd</type>
+ <version>3.0.0.M3</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>com.springsource.org.apache.commons.dbcp</artifactId>
+ <version>1.2.2.osgi</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.h2database</groupId>
+ <artifactId>com.springsource.org.h2</artifactId>
+ <version>1.0.71</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.persistence</groupId>
+ <artifactId>com.springsource.javax.persistence</artifactId>
+ <version>1.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence</artifactId>
+ <version>1.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.persistence</groupId>
+ <artifactId>com.springsource.org.eclipse.persistence.jpa</artifactId>
+ <version>1.0.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.aspectj</groupId>
+ <artifactId>org.aspectj-library</artifactId>
+ <type>libd</type>
+ <version>1.6.2.RELEASE</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.freemarker</groupId>
+ <artifactId>com.springsource.freemarker</artifactId>
+ <version>2.3.15</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.junit</groupId>
+ <artifactId>com.springsource.org.junit</artifactId>
+ <version>4.5.0</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.test</artifactId>
+ <version>3.0.0.M3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.instrument</artifactId>
+ <version>3.0.0.M3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>org.springframework.aspects</artifactId>
+ <version>3.0.0.M3</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>javax.servlet</groupId>
+ <artifactId>com.springsource.javax.servlet</artifactId>
+ <version>2.5.0</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
+ <repositories>
+ <repository>
+ <id>com.springsource.repository.bundles.snapshot</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Snapshot</name>
+ <url>http://repository.springsource.com/maven/bundles/snapshot</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.bundles.release</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases</name>
+ <url>http://repository.springsource.com/maven/bundles/release</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.bundle.external</id>
+ <name>SpringSource Enterprise Bundle Repository - External Bundle Releases</name>
+ <url>http://repository.springsource.com/maven/bundles/external</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.bundle.milestone</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Bundle Milestones</name>
+ <url>http://repository.springsource.com/maven/bundles/milestone</url>
+ </repository>
+
+ <repository>
+ <id>com.springsource.repository.libraries.release</id>
+ <name>SpringSource Enterprise Bundle Repository - SpringSource Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/release</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.libraries.external</id>
+ <name>SpringSource Enterprise Bundle Repository - External Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/external</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.libraries.milestone</id>
+ <name>SpringSource Enterprise Bundle Repository - Milestone Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/milestone</url>
+ </repository>
+ <repository>
+ <id>com.springsource.repository.libraries.snapshot</id>
+ <name>SpringSource Enterprise Bundle Repository - Snapshot Library Releases</name>
+ <url>http://repository.springsource.com/maven/libraries/snapshot</url>
+ </repository>
+ </repositories>
+
+ <properties>
+ <maven.test.failure.ignore>true</maven.test.failure.ignore>
+ </properties>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>com.springsource.repository.bundles.release</id>
+ <name>SpringSource Enterprise Bundle Repository - Releases</name>
+ <url>http://repository.springsource.com/maven/bundles/release</url>
+ </pluginRepository>
+ <pluginRepository>
+ <id>com.springsource.repository.bundles.milestone</id>
+ <name>SpringSource Enterprise Bundle Repository - Milestone</name>
+ <url>http://repository.springsource.com/maven/bundles/milestone</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>com.springsource.bundlor</groupId>
+ <artifactId>com.springsource.bundlor.maven</artifactId>
+ <version>1.0.0.M2</version>
+ <executions>
+ <execution>
+ <id>bundlor</id>
+ <goals>
+ <goal>transform</goal>
+ </goals>
+ <phase>package</phase>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>
+ src/main/resources/META-INF/MANIFEST.MF
+ </manifestFile>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>**/*Tests.java</include>
+ </includes>
+ <excludes>
+ <exclude>**/Abstract*.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
diff --git a/start/pom.xml b/start/pom.xml
new file mode 100644
index 0000000..f9e2fdf
--- /dev/null
+++ b/start/pom.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>com.springsource.dmserver</groupId>
+ <artifactId>greenpages-top-level</artifactId>
+ <version>2.0.1.SNAPSHOT</version>
+ <name>GreenPages App Build</name>
+ <packaging>pom</packaging>
+ <modules>
+ <module>parent</module>
+ <module>greenpages.db</module>
+ <module>greenpages.app</module>
+ <module>greenpages.jpa</module>
+ <module>greenpages.web</module>
+ </modules>
+</project>
diff --git a/virgo-build b/virgo-build
new file mode 160000
index 0000000..aa4ba9b
--- /dev/null
+++ b/virgo-build
@@ -0,0 +1 @@
+Subproject commit aa4ba9be8018222f3ec7cb1fdf39615641d504b6