summaryrefslogtreecommitdiffstats
path: root/java-vaadin
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2011-12-03 14:00:31 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2011-12-03 14:00:31 +0100
commit3a9a839165b735694698010a8aae1672a364e948 (patch)
treed2c33f4e1b92613c7d493e82a579f5089bef60a2 /java-vaadin
parent9e255f98b2c90724a1796892bccee5986f373ef1 (diff)
downloadskeletons-3a9a839165b735694698010a8aae1672a364e948.zip
skeletons-3a9a839165b735694698010a8aae1672a364e948.tar.gz
rename vaadin-app into java-vaadin
Diffstat (limited to 'java-vaadin')
-rw-r--r--java-vaadin/HOWTO22
-rw-r--r--java-vaadin/build.properties10
-rw-r--r--java-vaadin/build.xml535
-rw-r--r--java-vaadin/build.xml.orig515
-rw-r--r--java-vaadin/src/Application.properties2
-rw-r--r--java-vaadin/src/ch/asynk/helloworld/Context.java55
-rw-r--r--java-vaadin/src/ch/asynk/helloworld/DataMappingLayout.java170
-rw-r--r--java-vaadin/src/ch/asynk/helloworld/EndLayout.java31
-rw-r--r--java-vaadin/src/ch/asynk/helloworld/HelloWorldApp.java42
-rw-r--r--java-vaadin/src/ch/asynk/helloworld/LayoutLayout.java109
-rw-r--r--java-vaadin/src/ch/asynk/helloworld/MainLayout.java75
-rw-r--r--java-vaadin/src/ch/asynk/helloworld/Resources.java9
-rw-r--r--java-vaadin/web/META-INF/MANIFEST.MF3
-rw-r--r--java-vaadin/web/VAADIN/themes/asynk/icons/clock.pngbin0 -> 2053 bytes
-rw-r--r--java-vaadin/web/VAADIN/themes/asynk/styles.css16
-rw-r--r--java-vaadin/web/WEB-INF/web.xml166
16 files changed, 1760 insertions, 0 deletions
diff --git a/java-vaadin/HOWTO b/java-vaadin/HOWTO
new file mode 100644
index 0000000..1dcc806
--- /dev/null
+++ b/java-vaadin/HOWTO
@@ -0,0 +1,22 @@
+WAR format (http://tomcat.apache.org/tomcat-7.0-doc/appdev/deployment.html#Standard_Directory_Layout
+
+*.html, *.jsp, *.js, *.css, *.png, etc.
+ The HTML and JSP pages, along with other files that must be visible to the client browser for your application.
+ In larger applications you may choose to divide these files into a subdirectory hierarchy,
+ but for smaller apps, it is generally much simpler to maintain only a single directory for these files.
+
+/WEB-INF/web.xml
+ The Web Application Deployment Descriptor for your application.
+ This is an XML file describing the servlets and other components that make up your application,
+ along with any initialization parameters and container-managed security constraints that you want the server to enforce for you.
+ This file is discussed in more detail in the following subsection.
+
+/WEB-INF/classes/
+ This directory contains any Java class files (and associated resources) required for your application,
+ including both servlet and non-servlet classes, that are not combined into JAR files.
+ If your classes are organized into Java packages, you must reflect this in the directory hierarchy under /WEB-INF/classes/.
+
+/WEB-INF/lib/
+ This directory contains JAR files that contain Java class files (and associated resources) required for your application,
+ such as third party class libraries or JDBC drivers.
+
diff --git a/java-vaadin/build.properties b/java-vaadin/build.properties
new file mode 100644
index 0000000..dbf322a
--- /dev/null
+++ b/java-vaadin/build.properties
@@ -0,0 +1,10 @@
+# Context path to install this application on
+app.path=/hello
+
+# Tomcat 7 installation directory
+catalina.home=/usr/share/tomcat7
+
+# Manager webapp username and password
+manager.username=manager
+manager.password=none
+
diff --git a/java-vaadin/build.xml b/java-vaadin/build.xml
new file mode 100644
index 0000000..fe108a1
--- /dev/null
+++ b/java-vaadin/build.xml
@@ -0,0 +1,535 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ General purpose build script for web applications and web services,
+ including enhanced support for deploying directly to a Tomcat
+ based server.
+
+ This build script assumes that the source code of your web application
+ is organized into the following subdirectories underneath the source
+ code directory from which you execute the build script:
+
+ docs Static documentation files to be copied to
+ the "docs" subdirectory of your distribution.
+
+ src Java source code (and associated resource files)
+ to be compiled to the "WEB-INF/classes"
+ subdirectory of your web application.
+
+ web Static HTML, JSP, and other content (such as
+ image files), including the WEB-INF subdirectory
+ and its configuration file contents.
+
+ $Id: build.xml.txt 1060015 2011-01-17 17:31:45Z markt $
+-->
+
+
+<!-- A "project" describes a set of targets that may be requested
+ when Ant is executed. The "default" attribute defines the
+ target which is executed if no specific target is requested,
+ and the "basedir" attribute defines the current working directory
+ from which Ant executes the requested task. This is normally
+ set to the current working directory.
+-->
+
+<project name="My Project" default="compile" basedir=".">
+
+
+
+<!-- ===================== Property Definitions =========================== -->
+
+
+<!--
+
+ Each of the following properties are used in the build script.
+ Values for these properties are set by the first place they are
+ defined, from the following list:
+
+ * Definitions on the "ant" command line (ant -Dfoo=bar compile).
+
+ * Definitions from a "build.properties" file in the top level
+ source directory of this application.
+
+ * Definitions from a "build.properties" file in the developer's
+ home directory.
+
+ * Default definitions in this build.xml file.
+
+ You will note below that property values can be composed based on the
+ contents of previously defined properties. This is a powerful technique
+ that helps you minimize the number of changes required when your development
+ environment is modified. Note that property composition is allowed within
+ "build.properties" files as well as in the "build.xml" script.
+
+-->
+
+ <property file="build.properties"/>
+ <property file="${user.home}/build.properties"/>
+
+
+<!-- ==================== File and Directory Names ======================== -->
+
+
+<!--
+
+ These properties generally define file and directory names (or paths) that
+ affect where the build process stores its outputs.
+
+ app.name Base name of this application, used to
+ construct filenames and directories.
+ Defaults to "myapp".
+
+ app.path Context path to which this application should be
+ deployed (defaults to "/" plus the value of the
+ "app.name" property).
+
+ app.version Version number of this iteration of the application.
+
+ build.home The directory into which the "prepare" and
+ "compile" targets will generate their output.
+ Defaults to "build".
+
+ catalina.home The directory in which you have installed
+ a binary distribution of Tomcat. This will
+ be used by the "deploy" target.
+
+ dist.home The name of the base directory in which
+ distribution files are created.
+ Defaults to "dist".
+
+ manager.password The login password of a user that is assigned the
+ "manager-script" role (so that he or she can execute
+ commands via the "/manager" web application)
+
+ manager.url The URL of the "/manager" web application on the
+ Tomcat installation to which we will deploy web
+ applications and web services.
+
+ manager.username The login username of a user that is assigned the
+ "manager-script" role (so that he or she can execute
+ commands via the "/manager" web application)
+
+-->
+
+ <property name="app.name" value="myapp"/>
+ <property name="app.path" value="/${app.name}"/>
+ <property name="app.version" value="0.1-dev"/>
+ <property name="build.home" value="${basedir}/build"/>
+ <property name="catalina.home" value="/usr/share/tomcat7"/> <!-- UPDATE THIS! -->
+ <property name="dist.home" value="${basedir}/dist"/>
+ <property name="docs.home" value="${basedir}/docs"/>
+ <property name="manager.url" value="http://localhost:8080/manager/text"/>
+ <property name="src.home" value="${basedir}/src"/>
+ <property name="web.home" value="${basedir}/web"/>
+ <property name="tmp.home" value="/tmp/${app.name}"/>
+
+
+<!-- ==================== External Dependencies =========================== -->
+
+
+<!--
+
+ Use property values to define the locations of external JAR files on which
+ your application will depend. In general, these values will be used for
+ two purposes:
+ * Inclusion on the classpath that is passed to the Javac compiler
+ * Being copied into the "/WEB-INF/lib" directory during execution
+ of the "deploy" target.
+
+ Because we will automatically include all of the Java classes that Tomcat
+ exposes to web applications, we will not need to explicitly list any of those
+ dependencies. You only need to worry about external dependencies for JAR
+ files that you are going to include inside your "/WEB-INF/lib" directory.
+
+-->
+
+<!-- Dummy external dependency -->
+ <!--property name="vaadin.jar" value="/opt/vaadin/WebContent/vaadin-6.6.6.jar"/-->
+
+
+<!-- ==================== Compilation Classpath =========================== -->
+
+<!--
+
+ Rather than relying on the CLASSPATH environment variable, Ant includes
+ features that makes it easy to dynamically construct the classpath you
+ need for each compilation. The example below constructs the compile
+ classpath to include the servlet.jar file, as well as the other components
+ that Tomcat makes available to web applications automatically, plus anything
+ that you explicitly added.
+
+-->
+
+ <path id="compile.classpath">
+
+ <!-- Include all JAR files that will be included in /WEB-INF/lib -->
+ <fileset dir="${web.home}/WEB-INF/lib">
+ <include name="*.jar"/>
+ </fileset>
+ <pathelement location="${vaadin.jar}"/>
+
+ <!-- Include all elements that Tomcat exposes to applications -->
+ <fileset dir="${catalina.home}/bin">
+ <include name="*.jar"/>
+ </fileset>
+ <pathelement location="${catalina.home}/lib"/>
+ <fileset dir="${catalina.home}/lib">
+ <include name="*.jar"/>
+ </fileset>
+
+ </path>
+
+
+
+<!-- ================== Custom Ant Task Definitions ======================= -->
+
+
+<!--
+
+ These properties define custom tasks for the Ant build tool that interact
+ with the "/manager" web application installed with Tomcat. Before they
+ can be successfully utilized, you must perform the following steps:
+
+ - Copy the file "lib/catalina-ant.jar" from your Tomcat
+ installation into the "lib" directory of your Ant installation.
+
+ - Create a "build.properties" file in your application's top-level
+ source directory (or your user login home directory) that defines
+ appropriate values for the "manager.password", "manager.url", and
+ "manager.username" properties described above.
+
+ For more information about the Manager web application, and the functionality
+ of these tasks, see <http://localhost:8080/tomcat-docs/manager-howto.html>.
+
+-->
+
+ <taskdef resource="org/apache/catalina/ant/catalina.tasks"
+ classpathref="compile.classpath"/>
+
+
+<!-- ==================== Compilation Control Options ==================== -->
+
+<!--
+
+ These properties control option settings on the Javac compiler when it
+ is invoked using the <javac> task.
+
+ compile.debug Should compilation include the debug option?
+
+ compile.deprecation Should compilation include the deprecation option?
+
+ compile.optimize Should compilation include the optimize option?
+
+-->
+
+ <property name="compile.debug" value="true"/>
+ <property name="compile.deprecation" value="false"/>
+ <property name="compile.optimize" value="true"/>
+
+
+
+<!-- ==================== All Target ====================================== -->
+
+<!--
+
+ The "all" target is a shortcut for running the "clean" target followed
+ by the "compile" target, to force a complete recompile.
+
+-->
+
+ <target name="all" depends="clean,compile"
+ description="Clean build and dist directories, then compile"/>
+
+
+
+<!-- ==================== Clean Target ==================================== -->
+
+<!--
+
+ The "clean" target deletes any previous "build" and "dist" directory,
+ so that you can be ensured the application can be built from scratch.
+
+-->
+
+ <target name="clean"
+ description="Delete old build and dist directories">
+ <delete dir="${build.home}"/>
+ <delete dir="${dist.home}"/>
+ </target>
+
+
+
+<!-- ==================== Compile Target ================================== -->
+
+<!--
+
+ The "compile" target transforms source files (from your "src" directory)
+ into object files in the appropriate location in the build directory.
+ This example assumes that you will be including your classes in an
+ unpacked directory hierarchy under "/WEB-INF/classes".
+
+-->
+
+ <target name="compile" depends="prepare"
+ description="Compile Java sources">
+
+ <!-- Compile Java classes as necessary -->
+ <mkdir dir="${build.home}/WEB-INF/classes"/>
+ <javac srcdir="${src.home}"
+ destdir="${build.home}/WEB-INF/classes"
+ debug="${compile.debug}"
+ deprecation="${compile.deprecation}"
+ optimize="${compile.optimize}"
+includeantruntime="false">
+ <classpath refid="compile.classpath"/>
+ <compilerarg value="-Xlint"/>
+ </javac>
+
+ <!-- Copy application resources -->
+ <copy todir="${build.home}/WEB-INF/classes">
+ <fileset dir="${src.home}" excludes="**/*.java"/>
+ </copy>
+
+ </target>
+
+
+
+<!-- ==================== Dist Target ===================================== -->
+
+
+<!--
+
+ The "dist" target creates a binary distribution of your application
+ in a directory structure ready to be archived in a tar.gz or zip file.
+ Note that this target depends on two others:
+
+ * "compile" so that the entire web application (including external
+ dependencies) will have been assembled
+
+ * "javadoc" so that the application Javadocs will have been created
+
+-->
+
+ <target name="dist" depends="compile,javadoc"
+ description="Create binary distribution">
+
+ <!-- Copy documentation subdirectories -->
+ <mkdir dir="${dist.home}/docs"/>
+ <copy todir="${dist.home}/docs">
+ <fileset dir="${docs.home}"/>
+ </copy>
+
+ <!-- Create application JAR file -->
+ <jar jarfile="${dist.home}/${app.name}-${app.version}.war"
+ basedir="${build.home}"/>
+
+ <!-- Copy additional files to ${dist.home} as necessary -->
+
+ </target>
+
+<!-- ==================== Install Target ================================== -->
+
+<!--
+
+ The "install" target tells the specified Tomcat installation to dynamically
+ install this web application and make it available for execution. It does
+ *not* cause the existence of this web application to be remembered across
+ Tomcat restarts; if you restart the server, you will need to re-install all
+ this web application.
+
+ If you have already installed this application, and simply want Tomcat to
+ recognize that you have updated Java classes (or the web.xml file), use the
+ "reload" target instead.
+
+ NOTE: This target will only succeed if it is run from the same server that
+ Tomcat is running on.
+
+ NOTE: This is the logical opposite of the "remove" target.
+
+-->
+
+ <target name="install" depends="compile"
+ description="Install application to servlet container">
+
+ <delete dir="${tmp.home}"/>
+ <mkdir dir="${tmp.home}"/>
+ <copy todir="${tmp.home}">
+ <fileset dir="${build.home}" />
+ </copy>
+
+ <deploy url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"
+ path="${app.path}"
+ localWar="file://${tmp.home}"/>
+
+ </target>
+
+
+<!-- ==================== Javadoc Target ================================== -->
+
+<!--
+
+ The "javadoc" target creates Javadoc API documentation for the Java
+ classes included in your application. Normally, this is only required
+ when preparing a distribution release, but is available as a separate
+ target in case the developer wants to create Javadocs independently.
+
+-->
+
+ <target name="javadoc" depends="compile"
+ description="Create Javadoc API documentation">
+
+ <mkdir dir="${dist.home}/docs/api"/>
+ <javadoc sourcepath="${src.home}"
+ destdir="${dist.home}/docs/api"
+ packagenames="*">
+ <classpath refid="compile.classpath"/>
+ </javadoc>
+
+ </target>
+
+
+
+<!-- ====================== List Target =================================== -->
+
+<!--
+
+ The "list" target asks the specified Tomcat installation to list the
+ currently running web applications, either loaded at startup time or
+ installed dynamically. It is useful to determine whether or not the
+ application you are currently developing has been installed.
+
+-->
+
+ <target name="list"
+ description="List installed applications on servlet container">
+
+ <list url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"/>
+
+ </target>
+
+
+<!-- ==================== Prepare Target ================================== -->
+
+<!--
+
+ The "prepare" target is used to create the "build" destination directory,
+ and copy the static contents of your web application to it. If you need
+ to copy static files from external dependencies, you can customize the
+ contents of this task.
+
+ Normally, this task is executed indirectly when needed.
+
+-->
+
+ <target name="prepare">
+
+ <!-- Create build directories as needed -->
+ <mkdir dir="${build.home}"/>
+ <mkdir dir="${build.home}/WEB-INF"/>
+ <mkdir dir="${build.home}/WEB-INF/classes"/>
+
+
+ <!-- Copy static content of this web application -->
+ <copy todir="${build.home}">
+ <fileset dir="${web.home}"/>
+ </copy>
+
+ <!-- Copy external dependencies as required -->
+ <!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
+ <mkdir dir="${build.home}/WEB-INF/lib"/>
+<!--
+ <copy todir="${build.home}/WEB-INF/lib" file="${foo.jar}"/>
+-->
+
+ <!-- Copy static files from external dependencies as needed -->
+ <!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
+
+ </target>
+
+
+<!-- ==================== Reload Target =================================== -->
+
+<!--
+
+ The "reload" signals the specified application Tomcat to shut itself down
+ and reload. This can be useful when the web application context is not
+ reloadable and you have updated classes or property files in the
+ /WEB-INF/classes directory or when you have added or updated jar files in the
+ /WEB-INF/lib directory.
+
+ NOTE: The /WEB-INF/web.xml web application configuration file is not reread
+ on a reload. If you have made changes to your web.xml file you must stop
+ then start the web application.
+
+-->
+
+ <target name="reload" depends="compile"
+ description="Reload application on servlet container">
+
+ <reload url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"
+ path="${app.path}"/>
+
+ </target>
+
+
+<!-- ==================== Remove Target =================================== -->
+
+<!--
+
+ The "remove" target tells the specified Tomcat installation to dynamically
+ remove this web application from service.
+
+ NOTE: This is the logical opposite of the "install" target.
+
+-->
+
+ <target name="remove"
+ description="Remove application on servlet container">
+
+ <undeploy url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"
+ path="${app.path}"/>
+
+ </target>
+
+
+<!-- ==================== Update Target =================================== -->
+
+<!--
+
+ The "update" target tells the specified Tomcat installation to dynamically
+ update this web application from service.
+
+-->
+
+ <target name="update" depends="compile"
+ description="Update application on servlet container">
+
+ <antcall target="remove"/>
+ <antcall target="install"/>
+
+ </target>
+
+</project>
diff --git a/java-vaadin/build.xml.orig b/java-vaadin/build.xml.orig
new file mode 100644
index 0000000..a8e1bce
--- /dev/null
+++ b/java-vaadin/build.xml.orig
@@ -0,0 +1,515 @@
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!--
+ General purpose build script for web applications and web services,
+ including enhanced support for deploying directly to a Tomcat 6
+ based server.
+
+ This build script assumes that the source code of your web application
+ is organized into the following subdirectories underneath the source
+ code directory from which you execute the build script:
+
+ docs Static documentation files to be copied to
+ the "docs" subdirectory of your distribution.
+
+ src Java source code (and associated resource files)
+ to be compiled to the "WEB-INF/classes"
+ subdirectory of your web application.
+
+ web Static HTML, JSP, and other content (such as
+ image files), including the WEB-INF subdirectory
+ and its configuration file contents.
+
+ $Id: build.xml.txt 1060015 2011-01-17 17:31:45Z markt $
+-->
+
+
+<!-- A "project" describes a set of targets that may be requested
+ when Ant is executed. The "default" attribute defines the
+ target which is executed if no specific target is requested,
+ and the "basedir" attribute defines the current working directory
+ from which Ant executes the requested task. This is normally
+ set to the current working directory.
+-->
+
+<project name="My Project" default="compile" basedir=".">
+
+
+
+<!-- ===================== Property Definitions =========================== -->
+
+
+<!--
+
+ Each of the following properties are used in the build script.
+ Values for these properties are set by the first place they are
+ defined, from the following list:
+
+ * Definitions on the "ant" command line (ant -Dfoo=bar compile).
+
+ * Definitions from a "build.properties" file in the top level
+ source directory of this application.
+
+ * Definitions from a "build.properties" file in the developer's
+ home directory.
+
+ * Default definitions in this build.xml file.
+
+ You will note below that property values can be composed based on the
+ contents of previously defined properties. This is a powerful technique
+ that helps you minimize the number of changes required when your development
+ environment is modified. Note that property composition is allowed within
+ "build.properties" files as well as in the "build.xml" script.
+
+-->
+
+ <property file="build.properties"/>
+ <property file="${user.home}/build.properties"/>
+
+
+<!-- ==================== File and Directory Names ======================== -->
+
+
+<!--
+
+ These properties generally define file and directory names (or paths) that
+ affect where the build process stores its outputs.
+
+ app.name Base name of this application, used to
+ construct filenames and directories.
+ Defaults to "myapp".
+
+ app.path Context path to which this application should be
+ deployed (defaults to "/" plus the value of the
+ "app.name" property).
+
+ app.version Version number of this iteration of the application.
+
+ build.home The directory into which the "prepare" and
+ "compile" targets will generate their output.
+ Defaults to "build".
+
+ catalina.home The directory in which you have installed
+ a binary distribution of Tomcat 6. This will
+ be used by the "deploy" target.
+
+ dist.home The name of the base directory in which
+ distribution files are created.
+ Defaults to "dist".
+
+ manager.password The login password of a user that is assigned the
+ "manager-script" role (so that he or she can execute
+ commands via the "/manager" web application)
+
+ manager.url The URL of the "/manager" web application on the
+ Tomcat installation to which we will deploy web
+ applications and web services.
+
+ manager.username The login username of a user that is assigned the
+ "manager-script" role (so that he or she can execute
+ commands via the "/manager" web application)
+
+-->
+
+ <property name="app.name" value="myapp"/>
+ <property name="app.path" value="/${app.name}"/>
+ <property name="app.version" value="0.1-dev"/>
+ <property name="build.home" value="${basedir}/build"/>
+ <property name="catalina.home" value="../../../.."/> <!-- UPDATE THIS! -->
+ <property name="dist.home" value="${basedir}/dist"/>
+ <property name="docs.home" value="${basedir}/docs"/>
+ <property name="manager.url" value="http://localhost:8080/manager/text"/>
+ <property name="src.home" value="${basedir}/src"/>
+ <property name="web.home" value="${basedir}/web"/>
+
+
+<!-- ==================== External Dependencies =========================== -->
+
+
+<!--
+
+ Use property values to define the locations of external JAR files on which
+ your application will depend. In general, these values will be used for
+ two purposes:
+ * Inclusion on the classpath that is passed to the Javac compiler
+ * Being copied into the "/WEB-INF/lib" directory during execution
+ of the "deploy" target.
+
+ Because we will automatically include all of the Java classes that Tomcat 6
+ exposes to web applications, we will not need to explicitly list any of those
+ dependencies. You only need to worry about external dependencies for JAR
+ files that you are going to include inside your "/WEB-INF/lib" directory.
+
+-->
+
+<!-- Dummy external dependency -->
+<!--
+ <property name="foo.jar"
+ value="/path/to/foo.jar"/>
+-->
+
+
+<!-- ==================== Compilation Classpath =========================== -->
+
+<!--
+
+ Rather than relying on the CLASSPATH environment variable, Ant includes
+ features that makes it easy to dynamically construct the classpath you
+ need for each compilation. The example below constructs the compile
+ classpath to include the servlet.jar file, as well as the other components
+ that Tomcat makes available to web applications automatically, plus anything
+ that you explicitly added.
+
+-->
+
+ <path id="compile.classpath">
+
+ <!-- Include all JAR files that will be included in /WEB-INF/lib -->
+ <!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
+<!--
+ <pathelement location="${foo.jar}"/>
+-->
+
+ <!-- Include all elements that Tomcat exposes to applications -->
+ <fileset dir="${catalina.home}/bin">
+ <include name="*.jar"/>
+ </fileset>
+ <pathelement location="${catalina.home}/lib"/>
+ <fileset dir="${catalina.home}/lib">
+ <include name="*.jar"/>
+ </fileset>
+
+ </path>
+
+
+
+<!-- ================== Custom Ant Task Definitions ======================= -->
+
+
+<!--
+
+ These properties define custom tasks for the Ant build tool that interact
+ with the "/manager" web application installed with Tomcat 6. Before they
+ can be successfully utilized, you must perform the following steps:
+
+ - Copy the file "lib/catalina-ant.jar" from your Tomcat 6
+ installation into the "lib" directory of your Ant installation.
+
+ - Create a "build.properties" file in your application's top-level
+ source directory (or your user login home directory) that defines
+ appropriate values for the "manager.password", "manager.url", and
+ "manager.username" properties described above.
+
+ For more information about the Manager web application, and the functionality
+ of these tasks, see <http://localhost:8080/tomcat-docs/manager-howto.html>.
+
+-->
+
+ <taskdef resource="org/apache/catalina/ant/catalina.tasks"
+ classpathref="compile.classpath"/>
+
+
+<!-- ==================== Compilation Control Options ==================== -->
+
+<!--
+
+ These properties control option settings on the Javac compiler when it
+ is invoked using the <javac> task.
+
+ compile.debug Should compilation include the debug option?
+
+ compile.deprecation Should compilation include the deprecation option?
+
+ compile.optimize Should compilation include the optimize option?
+
+-->
+
+ <property name="compile.debug" value="true"/>
+ <property name="compile.deprecation" value="false"/>
+ <property name="compile.optimize" value="true"/>
+
+
+
+<!-- ==================== All Target ====================================== -->
+
+<!--
+
+ The "all" target is a shortcut for running the "clean" target followed
+ by the "compile" target, to force a complete recompile.
+
+-->
+
+ <target name="all" depends="clean,compile"
+ description="Clean build and dist directories, then compile"/>
+
+
+
+<!-- ==================== Clean Target ==================================== -->
+
+<!--
+
+ The "clean" target deletes any previous "build" and "dist" directory,
+ so that you can be ensured the application can be built from scratch.
+
+-->
+
+ <target name="clean"
+ description="Delete old build and dist directories">
+ <delete dir="${build.home}"/>
+ <delete dir="${dist.home}"/>
+ </target>
+
+
+
+<!-- ==================== Compile Target ================================== -->
+
+<!--
+
+ The "compile" target transforms source files (from your "src" directory)
+ into object files in the appropriate location in the build directory.
+ This example assumes that you will be including your classes in an
+ unpacked directory hierarchy under "/WEB-INF/classes".
+
+-->
+
+ <target name="compile" depends="prepare"
+ description="Compile Java sources">
+
+ <!-- Compile Java classes as necessary -->
+ <mkdir dir="${build.home}/WEB-INF/classes"/>
+ <javac srcdir="${src.home}"
+ destdir="${build.home}/WEB-INF/classes"
+ debug="${compile.debug}"
+ deprecation="${compile.deprecation}"
+ optimize="${compile.optimize}"
+includeantruntime="false">
+ <classpath refid="compile.classpath"/>
+ </javac>
+
+ <!-- Copy application resources -->
+ <copy todir="${build.home}/WEB-INF/classes">
+ <fileset dir="${src.home}" excludes="**/*.java"/>
+ </copy>
+
+ </target>
+
+
+
+<!-- ==================== Dist Target ===================================== -->
+
+
+<!--
+
+ The "dist" target creates a binary distribution of your application
+ in a directory structure ready to be archived in a tar.gz or zip file.
+ Note that this target depends on two others:
+
+ * "compile" so that the entire web application (including external
+ dependencies) will have been assembled
+
+ * "javadoc" so that the application Javadocs will have been created
+
+-->
+
+ <target name="dist" depends="compile,javadoc"
+ description="Create binary distribution">
+
+ <!-- Copy documentation subdirectories -->
+ <mkdir dir="${dist.home}/docs"/>
+ <copy todir="${dist.home}/docs">
+ <fileset dir="${docs.home}"/>
+ </copy>
+
+ <!-- Create application JAR file -->
+ <jar jarfile="${dist.home}/${app.name}-${app.version}.war"
+ basedir="${build.home}"/>
+
+ <!-- Copy additional files to ${dist.home} as necessary -->
+
+ </target>
+
+
+
+<!-- ==================== Install Target ================================== -->
+
+<!--
+
+ The "install" target tells the specified Tomcat 6 installation to dynamically
+ install this web application and make it available for execution. It does
+ *not* cause the existence of this web application to be remembered across
+ Tomcat restarts; if you restart the server, you will need to re-install all
+ this web application.
+
+ If you have already installed this application, and simply want Tomcat to
+ recognize that you have updated Java classes (or the web.xml file), use the
+ "reload" target instead.
+
+ NOTE: This target will only succeed if it is run from the same server that
+ Tomcat is running on.
+
+ NOTE: This is the logical opposite of the "remove" target.
+
+-->
+
+ <target name="install" depends="compile"
+ description="Install application to servlet container">
+
+ <deploy url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"
+ path="${app.path}"
+ localWar="file://${build.home}"/>
+
+ </target>
+
+
+<!-- ==================== Javadoc Target ================================== -->
+
+<!--
+
+ The "javadoc" target creates Javadoc API documentation for the Java
+ classes included in your application. Normally, this is only required
+ when preparing a distribution release, but is available as a separate
+ target in case the developer wants to create Javadocs independently.
+
+-->
+
+ <target name="javadoc" depends="compile"
+ description="Create Javadoc API documentation">
+
+ <mkdir dir="${dist.home}/docs/api"/>
+ <javadoc sourcepath="${src.home}"
+ destdir="${dist.home}/docs/api"
+ packagenames="*">
+ <classpath refid="compile.classpath"/>
+ </javadoc>
+
+ </target>
+
+
+
+<!-- ====================== List Target =================================== -->
+
+<!--
+
+ The "list" target asks the specified Tomcat 6 installation to list the
+ currently running web applications, either loaded at startup time or
+ installed dynamically. It is useful to determine whether or not the
+ application you are currently developing has been installed.
+
+-->
+
+ <target name="list"
+ description="List installed applications on servlet container">
+
+ <list url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"/>
+
+ </target>
+
+
+<!-- ==================== Prepare Target ================================== -->
+
+<!--
+
+ The "prepare" target is used to create the "build" destination directory,
+ and copy the static contents of your web application to it. If you need
+ to copy static files from external dependencies, you can customize the
+ contents of this task.
+
+ Normally, this task is executed indirectly when needed.
+
+-->
+
+ <target name="prepare">
+
+ <!-- Create build directories as needed -->
+ <mkdir dir="${build.home}"/>
+ <mkdir dir="${build.home}/WEB-INF"/>
+ <mkdir dir="${build.home}/WEB-INF/classes"/>
+
+
+ <!-- Copy static content of this web application -->
+ <copy todir="${build.home}">
+ <fileset dir="${web.home}"/>
+ </copy>
+
+ <!-- Copy external dependencies as required -->
+ <!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
+ <mkdir dir="${build.home}/WEB-INF/lib"/>
+<!--
+ <copy todir="${build.home}/WEB-INF/lib" file="${foo.jar}"/>
+-->
+
+ <!-- Copy static files from external dependencies as needed -->
+ <!-- *** CUSTOMIZE HERE AS REQUIRED BY YOUR APPLICATION *** -->
+
+ </target>
+
+
+<!-- ==================== Reload Target =================================== -->
+
+<!--
+
+ The "reload" signals the specified application Tomcat 6 to shut itself down
+ and reload. This can be useful when the web application context is not
+ reloadable and you have updated classes or property files in the
+ /WEB-INF/classes directory or when you have added or updated jar files in the
+ /WEB-INF/lib directory.
+
+ NOTE: The /WEB-INF/web.xml web application configuration file is not reread
+ on a reload. If you have made changes to your web.xml file you must stop
+ then start the web application.
+
+-->
+
+ <target name="reload" depends="compile"
+ description="Reload application on servlet container">
+
+ <reload url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"
+ path="${app.path}"/>
+
+ </target>
+
+
+<!-- ==================== Remove Target =================================== -->
+
+<!--
+
+ The "remove" target tells the specified Tomcat 6 installation to dynamically
+ remove this web application from service.
+
+ NOTE: This is the logical opposite of the "install" target.
+
+-->
+
+ <target name="remove"
+ description="Remove application on servlet container">
+
+ <undeploy url="${manager.url}"
+ username="${manager.username}"
+ password="${manager.password}"
+ path="${app.path}"/>
+
+ </target>
+
+
+</project>
diff --git a/java-vaadin/src/Application.properties b/java-vaadin/src/Application.properties
new file mode 100644
index 0000000..e5b8c95
--- /dev/null
+++ b/java-vaadin/src/Application.properties
@@ -0,0 +1,2 @@
+hello.next=Ô
+hello.world=WoRlD
diff --git a/java-vaadin/src/ch/asynk/helloworld/Context.java b/java-vaadin/src/ch/asynk/helloworld/Context.java
new file mode 100644
index 0000000..c59016d
--- /dev/null
+++ b/java-vaadin/src/ch/asynk/helloworld/Context.java
@@ -0,0 +1,55 @@
+package ch.asynk.helloworld;
+
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class Context {
+ //
+ private static final long serialVersionUID = 1L;
+ //
+ private Logger log = Logger.getLogger("ch.asynk");
+ public Logger getLogger() {
+ return log;
+ }
+ //
+ private Properties props = null;
+ public Properties getProps() {
+ return props;
+ }
+ //
+ private HelloWorldApp app = null;
+ public HelloWorldApp getApp() {
+ return app;
+ }
+ //
+ public Context(HelloWorldApp application) {
+ app = application;
+ initProps();
+ }
+ //
+ private void initProps() {
+ props = new Properties();
+ //
+ String properties_file = "Application.properties";
+ log.info("doing stuff : ");
+ java.io.InputStream is = null;
+ try {
+ is = HelloWorldApp.class.getClassLoader().getResourceAsStream(properties_file);
+ }
+ catch(java.lang.Exception x) {
+ log.log(Level.SEVERE,"Error loading "+properties_file+"' properties",x);
+ return;
+ }
+ if (is!=null) {
+ try {
+ props.load(is);
+ }
+ catch (java.io.IOException e) {
+ log.log(Level.SEVERE,"Error reading properties '"+properties_file+"' ",e);
+ }
+ } else {
+ log.warning("'"+properties_file+"' file not found");
+ }
+ }
+}
diff --git a/java-vaadin/src/ch/asynk/helloworld/DataMappingLayout.java b/java-vaadin/src/ch/asynk/helloworld/DataMappingLayout.java
new file mode 100644
index 0000000..42801d8
--- /dev/null
+++ b/java-vaadin/src/ch/asynk/helloworld/DataMappingLayout.java
@@ -0,0 +1,170 @@
+package ch.asynk.helloworld;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.ObjectProperty;
+import com.vaadin.data.Validator;
+import com.vaadin.data.validator.DoubleValidator;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.FormLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.TextField;
+
+public class DataMappingLayout extends VerticalLayout {
+ //
+ private static final long serialVersionUID = 1L;
+ //
+ private Context ctx = null;
+
+ public DataMappingLayout(Context context) {
+ ctx = context;
+ //
+ final AbstractComponent pa = buildPanel();
+ pa.setWidth(600,UNITS_PIXELS);
+ pa.setHeight(400,UNITS_PIXELS);
+ addComponent(pa);
+ setComponentAlignment(pa, Alignment.MIDDLE_CENTER);
+ //
+ }
+ //
+ private AbstractComponent buildPanel() {
+ Panel panel = new Panel("Data Mapping Layout");
+ FormLayout layout = new FormLayout();
+ panel.setContent(layout);
+ //
+ final TextField tf1 = new TextField("Property.ValueChangeListener");
+ tf1.setImmediate(true);
+ layout.addComponent(tf1);
+ final Label lb1 = new Label();
+ lb1.setCaption("The Value");
+ layout.addComponent(lb1);
+ tf1.addListener( new Property.ValueChangeListener() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void valueChange(ValueChangeEvent event) {
+ String value = (String) tf1.getValue();
+ lb1.setValue(value);
+ }
+ });
+ //
+ Double trouble = 66.6;
+ final ObjectProperty<Double> property = new ObjectProperty<Double>(trouble);
+ final TextField tf2 = new TextField("ObjectProperty + Validator", property);
+ tf2.setImmediate(true);
+ tf2.addValidator( new DoubleValidator("It should be a double") );
+ //tf2.setValidationVisible(false); // nothing will happen
+ layout.addComponent(tf2);
+ final Label lb2 = new Label(property);
+ lb2.setCaption("The Value");
+ layout.addComponent(lb2);
+ //
+ final TextField tf3 = new TextField("No spaces");
+ layout.addComponent(tf3);
+ tf3.setComponentError(null); // (actually the default)
+ final Button b1 = new Button("Ok!");
+ layout.addComponent(b1);
+ b1.addListener(new Button.ClickListener() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void buttonClick(ClickEvent event) {
+ if (! ((String) tf3.getValue()).matches("^\\w*$")) {
+ tf3.setComponentError(new UserError("Must be letters and numbers"));
+ } else {
+ tf3.setComponentError(null);
+ }
+ }
+ });
+ //
+ // final Validator intValidator = new Validator() { ... }
+ class MyIntValidator implements Validator {
+ private static final long serialVersionUID = 1L;
+ public boolean isValid(Object value) {
+ if (value == null || !(value instanceof String)) {
+ return false;
+ }
+ return ((String) value).matches("[1-9][0-9]{4}");
+ }
+ public void validate(Object value) throws InvalidValueException {
+ if (!isValid(value)) {
+ if (value != null && value.toString().startsWith("0")) {
+ throw new InvalidValueException("Must not start with a zero.");
+ } else {
+ throw new InvalidValueException("Must be a number 10000-99999.");
+ }
+ }
+ }
+ };
+ final TextField tf5 = new TextField("MyIntValidator");
+ tf5.addValidator(new MyIntValidator());
+ tf5.setImmediate(true);
+ layout.addComponent(tf5);
+ //
+ class IntegerObjectProperty implements Property {
+ private static final long serialVersionUID = 1L;
+ Integer data = 0;
+ boolean readOnly = false;
+ public Class<?> getType() {
+ return Integer.class;
+ }
+ public Object getValue() {
+ return data;
+ }
+ public boolean isReadOnly() {
+ return readOnly;
+ }
+ public void setReadOnly(boolean newStatus) {
+ readOnly = newStatus;
+ }
+ public void setValue(Object newValue) throws ReadOnlyException, ConversionException {
+ if (readOnly)
+ throw new ReadOnlyException();
+ if (newValue instanceof Integer)
+ data = (Integer) newValue;
+ else if (newValue instanceof String)
+ try {
+ data = Integer.parseInt((String) newValue, 16);
+ } catch (NumberFormatException e) {
+ throw new ConversionException("Must be an integer (from property)");
+ }
+ else
+ throw new ConversionException("Unknown entry type (from property)");
+ }
+ @Override
+ public String toString() {
+ return Integer.toHexString(data)+" (hex)";
+ }
+ };
+ final IntegerObjectProperty intProperty = new IntegerObjectProperty();
+ intProperty.setValue(666);
+ final TextField tf4 = new TextField("MyObjectProperty",intProperty);
+ tf4.setImmediate(true);
+ tf4.setErrorHandler(new ComponentErrorHandler() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public boolean handleComponentError(ComponentErrorEvent event) {
+ tf4.setComponentError(new UserError("Must be an integer (from handler)"));
+ return true;
+ }
+ });
+ layout.addComponent(tf4);
+ //
+ Button nextButton = new Button("next layout");
+ nextButton.setDescription("Go to next layout");
+ layout.addComponent(nextButton );
+ nextButton.addListener( new Button.ClickListener() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void buttonClick(ClickEvent event) {
+ getApplication().getMainWindow().setContent( new LayoutLayout(ctx) );
+ }
+ });
+ //
+ return panel;
+ }
+}
diff --git a/java-vaadin/src/ch/asynk/helloworld/EndLayout.java b/java-vaadin/src/ch/asynk/helloworld/EndLayout.java
new file mode 100644
index 0000000..2b5c15f
--- /dev/null
+++ b/java-vaadin/src/ch/asynk/helloworld/EndLayout.java
@@ -0,0 +1,31 @@
+package ch.asynk.helloworld;
+
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+
+public class EndLayout extends VerticalLayout {
+ //
+ private static final long serialVersionUID = 1L;
+ //
+ private Context ctx = null;
+
+ public EndLayout(Context context) {
+ ctx = context;
+ //
+ final Label lb1 = new Label();
+ lb1.setCaption("That's all folks");
+ addComponent(lb1);
+ //
+ Button closeButton = new Button("close the application");
+ closeButton.setDescription("This will close the application");
+ addComponent(closeButton );
+ closeButton.addListener( new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ getApplication().getMainWindow().getApplication().close();
+ }
+ });
+ }
+};
diff --git a/java-vaadin/src/ch/asynk/helloworld/HelloWorldApp.java b/java-vaadin/src/ch/asynk/helloworld/HelloWorldApp.java
new file mode 100644
index 0000000..d5e3091
--- /dev/null
+++ b/java-vaadin/src/ch/asynk/helloworld/HelloWorldApp.java
@@ -0,0 +1,42 @@
+package ch.asynk.helloworld;
+
+import com.vaadin.Application;
+import com.vaadin.terminal.Terminal;
+import com.vaadin.terminal.Sizeable;
+import com.vaadin.ui.Window;
+
+public class HelloWorldApp extends Application {
+ //
+ private static final long serialVersionUID = 1L;
+ //
+ private Context ctx = null;
+ public Context getCtx() {
+ return ctx;
+ }
+ //
+ @Override
+ public void init() {
+ ctx = new Context(this);
+ setTheme("asynk");
+ final Window mainWindow = new Window("Hello World Application");
+ mainWindow.setWidth(900,Sizeable.UNITS_PIXELS);
+ setMainWindow(mainWindow);
+ mainWindow.setContent( new MainLayout(ctx) );
+ setLogoutURL("http://asynk.ch");
+ ctx.getLogger().warning("hell : "+ctx.getProps().getProperty("hello.next")+" "+ctx.getProps().getProperty("hello.world"));
+ }
+
+ public void notifyError(String title, String msg){
+ getMainWindow().showNotification(title,msg,Window.Notification.TYPE_ERROR_MESSAGE);
+ }
+
+ @Override
+ public void terminalError(Terminal.ErrorEvent event) {
+ // Call the default implementation.
+ super.terminalError(event);
+ // Some custom behaviour.
+ if (getMainWindow() != null) {
+ getMainWindow().showNotification("An unchecked exception occured!", event.getThrowable().toString(), Window.Notification.TYPE_ERROR_MESSAGE);
+ }
+ }
+}
diff --git a/java-vaadin/src/ch/asynk/helloworld/LayoutLayout.java b/java-vaadin/src/ch/asynk/helloworld/LayoutLayout.java
new file mode 100644
index 0000000..6ebb1e3
--- /dev/null
+++ b/java-vaadin/src/ch/asynk/helloworld/LayoutLayout.java
@@ -0,0 +1,109 @@
+package ch.asynk.helloworld;
+
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.ListSelect;
+
+public class LayoutLayout extends VerticalLayout {
+ //
+ private static final long serialVersionUID = 1L;
+ //
+ private Context ctx = null;
+
+ public LayoutLayout(Context context) {
+ ctx = context;
+ //
+ final AbstractComponent topComponent = buildTopComponent();
+ topComponent.setWidth(500,UNITS_PIXELS);
+ topComponent.setHeight(400,UNITS_PIXELS);
+ addComponent(topComponent);
+ setComponentAlignment(topComponent, Alignment.MIDDLE_CENTER);
+ //
+ final AbstractComponent grid = buildGrid();
+ grid.setSizeFull();
+ addComponent(grid);
+ //
+ Button nextButton = new Button("next layout");
+ nextButton.setDescription("Go to next layout");
+ addComponent(nextButton );
+ nextButton.addListener( new Button.ClickListener() {
+ @Override
+ public void buttonClick(ClickEvent event) {
+ getApplication().getMainWindow().setContent( new EndLayout(ctx) );
+ }
+ });
+ }
+
+ private AbstractComponent buildTopComponent() {
+
+ Panel panel = new Panel("Panel 1");
+ VerticalLayout layout = (VerticalLayout) panel.getContent();
+ layout.setMargin(true);
+ layout.setSpacing(true);
+ layout.setHeight(100,UNITS_PERCENTAGE);
+ //
+ float width = 90;
+ float height = 100;
+ //
+ ListSelect receptionList = new ListSelect("List 1");
+ receptionList.setWidth(width, UNITS_PERCENTAGE);
+ receptionList.setHeight(height, UNITS_PERCENTAGE);
+ layout.addComponent(receptionList);
+ //
+ ListSelect splitList = new ListSelect("List 2");
+ splitList.setWidth(width, UNITS_PERCENTAGE);
+ splitList.setHeight(height, UNITS_PERCENTAGE);
+ layout.addComponent(splitList);
+ //
+ ListSelect ctrlList = new ListSelect("Liste 3");
+ ctrlList.setWidth(width, UNITS_PERCENTAGE);
+ ctrlList.setHeight(height, UNITS_PERCENTAGE);
+ layout.addComponent(ctrlList);
+ //
+ Button goButton = new Button("Select");
+ goButton.setHeight(height, UNITS_PERCENTAGE);
+ layout.addComponent(goButton);
+ //
+ layout.setExpandRatio(receptionList,3.0f);
+ layout.setExpandRatio(splitList,3.0f);
+ layout.setExpandRatio(ctrlList,3.0f);
+ layout.setExpandRatio(goButton,1.0f);
+ layout.setComponentAlignment(goButton, Alignment.MIDDLE_CENTER);
+ //
+ return panel;
+ }
+
+ private AbstractComponent buildGrid() {
+ Panel panel = new Panel("Grid Panel");
+ VerticalLayout layout = (VerticalLayout) panel.getContent();
+ layout.setMargin(true);
+ layout.setSpacing(true);
+ layout.setHeight(100,UNITS_PERCENTAGE);
+ //
+ GridLayout grid = new GridLayout(3, 3);
+ grid.setSizeFull();
+ grid.addStyleName("mygrid");
+ // excess space usage
+ //grid.setColumnExpandRatio(1, 1);
+ //grid.setColumnExpandRatio(2, 5);
+ //grid.setRowExpandRatio(1, 1);
+ Button b0 = new Button("[0;0] [0;2]");
+ b0.setSizeFull();
+ grid.addComponent(b0,0,0,0,2);
+ final Panel p2 = new Panel("Panel 2");
+ p2.setSizeFull();
+ grid.addComponent(p2,1,0,2,1);
+ Button b1 = new Button("[1;2] [2;2]");
+ b1.setSizeFull();
+ grid.addComponent(b1,1,2,2,2);
+ panel.setContent(grid);
+ //
+ return panel;
+ }
+}
diff --git a/java-vaadin/src/ch/asynk/helloworld/MainLayout.java b/java-vaadin/src/ch/asynk/helloworld/MainLayout.java
new file mode 100644
index 0000000..d4481c1
--- /dev/null
+++ b/java-vaadin/src/ch/asynk/helloworld/MainLayout.java
@@ -0,0 +1,75 @@
+package ch.asynk.helloworld;
+
+import java.util.Date;
+
+import com.vaadin.terminal.UserError;
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.VerticalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.Label;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Window.Notification;
+
+public class MainLayout extends VerticalLayout {
+ //
+ private static final long serialVersionUID = 1L;
+ //
+ private Context ctx = null;
+
+ public MainLayout(Context context) {
+ ctx = context;
+ //
+ final AbstractComponent pa = buildPanel();
+ pa.setWidth(250,UNITS_PIXELS);
+ pa.setHeight(300,UNITS_PIXELS);
+ addComponent(pa);
+ setComponentAlignment(pa, Alignment.MIDDLE_CENTER);
+ //
+ }
+
+ private AbstractComponent buildPanel() {
+ Panel panel = new Panel("Main Layout");
+ VerticalLayout layout = (VerticalLayout) panel.getContent();
+ layout.setMargin(true);
+ layout.setSpacing(true);
+ layout.setHeight(100,UNITS_PERCENTAGE);
+ //
+ Label label = new Label("Hello world");
+ layout.addComponent(label);
+ //
+ Button clockBtn = new Button("What is the time?");
+ layout.addComponent( clockBtn );
+ clockBtn.setIcon(Resources.clockIcon);
+ clockBtn.addListener( new Button.ClickListener() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void buttonClick(ClickEvent event) {
+ ctx.getApp().notifyError("The time is " + new Date(), "<i>italic</i> <b>bold</b> description");
+ event.getButton().setComponentError( new UserError("Stop pressing this button !!") );
+ }
+ });
+ ///
+ layout.addComponent( new Button("throw an exception", new Button.ClickListener() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void buttonClick(ClickEvent event) {
+ throw new RuntimeException("Wahou !! : exception");
+ }
+ }));
+ //
+ Button nextButton = new Button("next layout");
+ nextButton.setDescription("Go to next layout");
+ layout.addComponent(nextButton );
+ nextButton.addListener( new Button.ClickListener() {
+ private static final long serialVersionUID = 1L;
+ @Override
+ public void buttonClick(ClickEvent event) {
+ ctx.getApp().getMainWindow().setContent( new DataMappingLayout(ctx) );
+ }
+ });
+ //
+ return panel;
+ }
+}
diff --git a/java-vaadin/src/ch/asynk/helloworld/Resources.java b/java-vaadin/src/ch/asynk/helloworld/Resources.java
new file mode 100644
index 0000000..dcf0449
--- /dev/null
+++ b/java-vaadin/src/ch/asynk/helloworld/Resources.java
@@ -0,0 +1,9 @@
+package ch.asynk.helloworld;
+
+import com.vaadin.terminal.ThemeResource;
+
+public class Resources {
+
+ private static final long serialVersionUID = 1L;
+ public static final ThemeResource clockIcon = new ThemeResource("icons/clock.png");
+}
diff --git a/java-vaadin/web/META-INF/MANIFEST.MF b/java-vaadin/web/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5e94951
--- /dev/null
+++ b/java-vaadin/web/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/java-vaadin/web/VAADIN/themes/asynk/icons/clock.png b/java-vaadin/web/VAADIN/themes/asynk/icons/clock.png
new file mode 100644
index 0000000..af9fbba
--- /dev/null
+++ b/java-vaadin/web/VAADIN/themes/asynk/icons/clock.png
Binary files differ
diff --git a/java-vaadin/web/VAADIN/themes/asynk/styles.css b/java-vaadin/web/VAADIN/themes/asynk/styles.css
new file mode 100644
index 0000000..f309f42
--- /dev/null
+++ b/java-vaadin/web/VAADIN/themes/asynk/styles.css
@@ -0,0 +1,16 @@
+
+@import url("../runo/styles.css");
+
+.v-gridlayout-mygrid .v-gridlayout-spacing-on {
+ /* adjust spacing size */
+ padding: 1px;
+}
+
+/* visualize the grid cells */
+.v-gridlayout-mygrid div {
+ background-color: #f0f;
+}
+
+.v-gridlayout-mygrid div div div {
+ background-color: #e0e;
+}
diff --git a/java-vaadin/web/WEB-INF/web.xml b/java-vaadin/web/WEB-INF/web.xml
new file mode 100644
index 0000000..fca5609
--- /dev/null
+++ b/java-vaadin/web/WEB-INF/web.xml
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!DOCTYPE web-app
+ PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+ "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app>
+
+
+ <!-- General description of your web application -->
+
+ <display-name>My Web Application</display-name>
+ <description>
+ This is version X.X of a vaadin web application.
+ </description>
+
+
+ <!-- Context initialization parameters that define shared
+ String constants used within your application, which
+ can be customized by the system administrator who is
+ installing your application. The values actually
+ assigned to these parameters can be retrieved in a
+ servlet or JSP page by calling:
+
+ String value =
+ getServletContext().getInitParameter("name");
+
+ where "name" matches the <param-name> element of
+ one of these initialization parameters.
+
+ You can define any number of context initialization
+ parameters, including zero.
+ -->
+
+ <context-param>
+ <param-name>admin</param-name>
+ <param-value>jeremy@asynk.ch</param-value>
+ <description>
+ The EMAIL address of the administrator to whom questions
+ and comments about this application should be addressed.
+ </description>
+ </context-param>
+
+ <context-param>
+ <description>
+ Vaadin production mode</description>
+ <param-name>productionMode</param-name>
+ <param-value>false</param-value>
+ </context-param>
+
+
+ <!-- Servlet definitions for the servlets that make up
+ your web application, including initialization
+ parameters. With Tomcat, you can also send requests
+ to servlets not listed here with a request like this:
+
+ http://localhost:8080/{context-path}/servlet/{classname}
+
+ but this usage is not guaranteed to be portable. It also
+ makes relative references to images and other resources
+ required by your servlet more complicated, so defining
+ all of your servlets (and defining a mapping to them with
+ a servlet-mapping element) is recommended.
+
+ Servlet initialization parameters can be retrieved in a
+ servlet or JSP page by calling:
+
+ String value =
+ getServletConfig().getInitParameter("name");
+
+ where "name" matches the <param-name> element of
+ one of these initialization parameters.
+
+ You can define any number of servlets, including zero.
+ -->
+
+ <servlet>
+ <servlet-name>My Application</servlet-name>
+ <description>
+ This servlet plays the "controller" role in the MVC architecture
+ used in this application. It is generally mapped to the ".do"
+ filename extension with a servlet-mapping element, and all form
+ submits in the app will be submitted to a request URI like
+ "saveCustomer.do", which will therefore be mapped to this servlet.
+
+ The initialization parameter names for this servlet are the
+ "servlet path" that will be received by this servlet (after the
+ filename extension is removed). The corresponding value is the
+ name of the action class that will be used to process this request.
+ </description>
+ <servlet-class>com.vaadin.terminal.gwt.server.ApplicationServlet</servlet-class>
+ <init-param>
+ <description>
+ Vaadin application class to start</description>
+ <param-name>application</param-name>
+ <param-value>ch.asynk.helloworld.HelloWorldApp</param-value>
+ </init-param>
+ <!-- Load this servlet at server startup time -->
+ <load-on-startup>5</load-on-startup>
+ </servlet>
+
+ <!--servlet>
+ <servlet-name>graph</servlet-name>
+ <description>
+ This servlet produces GIF images that are dynamically generated
+ graphs, based on the input parameters included on the request.
+ It is generally mapped to a specific request URI like "/graph".
+ </description>
+ </servlet-->
+
+
+ <!-- Define mappings that are used by the servlet container to
+ translate a particular request URI (context-relative) to a
+ particular servlet. The examples below correspond to the
+ servlet descriptions above. Thus, a request URI like:
+
+ http://localhost:8080/{contextpath}/graph
+
+ will be mapped to the "graph" servlet, while a request like:
+
+ http://localhost:8080/{contextpath}/saveCustomer.do
+
+ will be mapped to the "controller" servlet.
+
+ You may define any number of servlet mappings, including zero.
+ It is also legal to define more than one mapping for the same
+ servlet, if you wish to.
+ -->
+ <servlet-mapping>
+ <servlet-name>My Application</servlet-name>
+ <url-pattern>/*</url-pattern>
+ </servlet-mapping>
+
+ <!--servlet-mapping>
+ <servlet-name>graph</servlet-name>
+ <url-pattern>/graph</url-pattern>
+ </servlet-mapping-->
+
+
+ <!-- Define the default session timeout for your application,
+ in minutes. From a servlet or JSP page, you can modify
+ the timeout for a particular session dynamically by using
+ HttpSession.getMaxInactiveInterval(). -->
+
+ <session-config>
+ <session-timeout>30</session-timeout> <!-- 30 minutes -->
+ </session-config>
+
+
+</web-app>