checkout-path=build/checkout
product-file=vaadin
product-name=Vaadin
-toolkit-package=com/vaadin
+vaadin-package=com/vaadin
gwt-dir=lib/core/gwt
# repository into which Maven snapshots should be published
uri="antlib:org.apache.maven.artifact.ant"
classpathref="maven-ant-tasks.classpath" />
+
<!-- Clean results - - - - - - - - - - - - - - - - - - - - - - - - - -->
- <target name="clean-result" depends="">
- <property file="build/build.properties" />
+ <target name="clean-result" depends="build.properties">
<!-- Clean build result directory. -->
<delete dir="${result-path}" includes="**/*" followsymlinks="false" defaultexcludes="false" includeemptydirs="true" failonerror="false"/>
</target>
+ <target name="build.properties">
+ <property file="build/build.properties" />
+
+ <property file="build/VERSION.properties" />
+ <property file="build/GWT-VERSION.properties" />
+
+ <!-- result source and classes folders -->
+ <property name="result-src-core" value="${result-path}/src/core"/>
+ <property name="result-src-junit" value="${result-path}/src/junit"/>
+ <property name="result-src-testbench" value="${result-path}/src/testbench"/>
+ <property name="result-classes-core" value="${result-path}/classes/core"/>
+ <property name="result-classes-junit" value="${result-path}/classes/junit"/>
+ <property name="result-classes-testbench" value="${result-path}/classes/testbench"/>
+ <!-- Folder where Emma instrumented classes are placed (if Emma is used)-->
+ <property name="result-classes-core-for-emma-war" value="${result-path}/classes/emma-war"/>
+ <property name="result-classes-core-for-emma-junit" value="${result-path}/classes/emma-junit"/>
+
+ </target>
<target name="clean-all" depends="clean-result">
</target>
<!-- Initialization - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- ================================================================== -->
- <target name="init" depends="check-java-version">
+ <target name="init" depends="check-java-version, build.properties">
<!-- Current timestamp in different formats. -->
<tstamp>
<format property="build.date" pattern="yyyy-MM-dd"/>
<format property="build.date.compact" pattern="yyyyMMdd"/>
</tstamp>
- <property file="build/VERSION.properties" />
- <property file="build/GWT-VERSION.properties" />
-
<antcontrib:propertyregex property="version.major" input="${version}" regexp="([^\.]*)\.([^\.]*)\.([^\.]*)" select="\1"/>
<antcontrib:propertyregex property="version.minor" input="${version}" regexp="([^\.]*)\.([^\.]*)\.([^\.]*)" select="\2"/>
<antcontrib:propertyregex property="version.revision" input="${version}" regexp="([^\.]*)\.([^\.]*)\.([^\.]*)" select="\3"/>
<echo>Full Version: ${version.full}</echo>
<!-- Other properties -->
- <property file="build/build.properties" />
<property file="build/html-style.properties" />
- <echo>Vaadin package is: ${toolkit-package}</echo>
+ <echo>Vaadin package is: ${vaadin-package}</echo>
<!-- Create result dir unless already exists -->
<mkdir dir="${result-path}" />
<!-- Create dirs that might be used by the test coverage generation -->
- <mkdir dir="${result-path}/war_emma_classes" />
- <mkdir dir="${result-path}/junit_emma_classes" />
+ <mkdir dir="${result-classes-core-for-emma-war}" />
+ <mkdir dir="${result-classes-core-for-emma-junit}" />
<mkdir dir="${result-path}/coverage" />
<echo>We are using gwt version ${gwt-version}.</echo>
<echo>Adding test class files and resources and launcher configuration.</echo>
<copy todir="${output-dir}/WebContent/WEB-INF/classes">
- <fileset dir="${result-path}/classes">
- <include name="${toolkit-package}/tests/**/*" />
- <include name="${toolkit-package}/launcher/**" />
+ <fileset dir="${result-classes-testbench}">
+ <include name="${vaadin-package}/tests/**/*" />
+ <include name="${vaadin-package}/launcher/**" />
+ </fileset>
+ <fileset dir="${result-classes-junit}">
+ <!-- VaadinClasses is used by both JUnit and TestBench tests -->
+ <include name="**/VaadinClasses*.class" />
</fileset>
<!-- test resources -->
<fileset dir="tests/testbench">
- <include name="${toolkit-package}/tests/**/*" />
+ <include name="${vaadin-package}/tests/**/*" />
<!-- Pre-processed versions of these copied above -->
<exclude name="**/*.java" />
<exclude name="**/*.html" />
<!-- Include files required by the DemoLauncher/DevelopmentServerLauncher -->
<fileset dir="tests/testbench">
- <include name="${toolkit-package}/launcher/jetty-webdefault.xml" />
- <include name="${toolkit-package}/launcher/keystore" />
+ <include name="${vaadin-package}/launcher/jetty-webdefault.xml" />
+ <include name="${vaadin-package}/launcher/keystore" />
</fileset>
</copy>
<!-- However, since compiling the server-side is required by the client-side -->
<!-- compilation, the server-side will actually be built before it. -->
<target name="build"
- depends="compile-server-side, compile-client-side, vaadin.jar, vaadin-sources.jar"
+ depends="compile-server-side, compile-tests, compile-client-side, vaadin.jar, vaadin-sources.jar"
description="Build package required files, without packing them.">
</target>
- <target name="compile-server-side" depends="compile-java, webcontent"/>
+ <target name="compile-server-side" depends="compile-core, webcontent"/>
<!-- Copy and preprocess sources for packaging
NOTE: Replaces <version></version> tags with build version tag for some "textual" files
* tests/client-side (Client-side JUnit test cases)
These are copied to
- * {$result-path}/src/core
- * {$result-path}/src/tests
- * {$result-path}/src/junit
-
+ * ${result-path}/src/core
+ * ${result-path}/src/tests
+ * ${result-path}/src/junit
+
+ And compiled to
+ * ${result-path}/classes/core
+ * ${result-path}/classes/tests
+ * ${result-path}/classes/junit
+
Java/HTML/CSS/XML files are filtered so the license is added and the version is set.
Other files are just copied.
-->
<loadfile property="VaadinApache2LicenseForJavaFiles" srcFile="build/VaadinApache2LicenseForJavaFiles.txt" />
- <mkdir dir="${result-path}/src" />
- <mkdir dir="${result-path}/src/core" />
- <mkdir dir="${result-path}/src/tests" />
- <mkdir dir="${result-path}/src/junit" />
+ <mkdir dir="${result-path}/src" />
+ <mkdir dir="${result-src-core}" />
+ <mkdir dir="${result-src-testbench}" />
+ <mkdir dir="${result-src-junit}" />
<patternset id="preprocessable-files">
<include name="**/*.java" />
<echo>Copying src directory and processing copied files.</echo>
<echo>Replacing <version> tag with build version for java/html/css/xml files.</echo>
- <copy todir="${result-path}/src/core" overwrite="yes">
+ <copy todir="${result-src-core}" overwrite="yes">
<filterset refid="version-and-license"/>
<filterset refid="pre-css-style"/>
<fileset dir="src">
</fileset>
</copy>
- <copy todir="${result-path}/src/tests">
+ <copy todir="${result-src-testbench}">
<filterset refid="version-and-license"/>
<fileset dir="tests/testbench">
<patternset refid="preprocessable-files" />
</fileset>
</copy>
- <copy todir="${result-path}/src/junit">
+ <copy todir="${result-src-junit}">
<filterset refid="version-and-license"/>
<fileset dir="tests/server-side">
<patternset refid="preprocessable-files" />
<!-- Add other files such as images, these are not filtered or processed by fixcrlf task -->
<echo>Copying non java/html/css/xml files such as images.</echo>
- <copy todir="${result-path}/src/core">
+ <copy todir="${result-src-core}">
<fileset dir="src">
<patternset refid="non-preprocessable-files" />
</fileset>
</copy>
- <copy todir="${result-path}/src/tests">
+ <copy todir="${result-src-testbench}">
<fileset dir="tests/testbench">
<patternset refid="non-preprocessable-files" />
</fileset>
</copy>
- <copy todir="${result-path}/src/junit">
+ <copy todir="${result-src-junit}">
<fileset dir="tests/server-side">
<patternset refid="non-preprocessable-files" />
</fileset>
</copy>
<!-- Add WebContent -->
- <echo>Adding VAADIN/themes, demo and hsqldb.jar files.</echo>
+ <echo>Adding VAADIN/themes and META-INF</echo>
<copy todir="${output-dir}/WebContent">
<fileset dir="WebContent">
<exclude name="**/.svn" />
<!-- TODO check what is necessary -->
- <include name="demo/**/*" />
<include name="WEB-INF/lib/hsqldb.jar" />
<include name="VAADIN/themes/**/*" />
<include name="META-INF/**/*" />
</copy>
</target>
- <target name="compile-java" depends="init, check-servlet-version, webcontent">
+ <target name="compile-core" depends="init, preprocess-src">
<echo>Compiling src (server-side)</echo>
-
- <!-- Compile all sources at the same time as they depend on each other -->
- <mkdir dir="${result-path}/classes" />
- <javac source="1.5" target="1.5" classpathref="compile.classpath.server-side" destdir="${result-path}/classes" debug="true" encoding="UTF-8">
- <src path="${result-path}/src/core"/>
- <src path="${result-path}/src/tests"/>
- <src path="${result-path}/src/junit"/>
+ <!-- Compile core sources first as the other sources depend on these -->
+ <mkdir dir="${result-classes-core}" />
+ <javac source="1.5" target="1.5" classpathref="compile.classpath.server-side" destdir="${result-classes-core}" debug="true" encoding="UTF-8" includeantruntime="false">
+ <src path="${result-src-core}"/>
+ </javac>
+ </target>
+
+ <target name="compile-tests" depends="compile-core">
+ <echo>Compiling src (Server and client side JUnit tests)</echo>
+ <!-- Compile server and client side JUnit tests -->
+ <mkdir dir="${result-classes-junit}" />
+ <javac source="1.5" target="1.5" classpathref="compile.classpath.server-side" destdir="${result-classes-junit}" debug="true" encoding="UTF-8" includeantruntime="false">
+ <classpath path="${result-classes-core}"></classpath>
+ <src path="${result-src-junit}"/>
+ </javac>
+
+ <echo>Compiling src (TestBench tests)</echo>
+ <!-- Compile TestBench tests -->
+ <mkdir dir="${result-classes-testbench}" />
+ <javac source="1.5" target="1.5" classpathref="compile.classpath.server-side" destdir="${result-classes-testbench}" debug="true" encoding="UTF-8" includeantruntime="false">
+ <classpath path="${result-classes-junit}"></classpath>
+ <classpath path="${result-classes-core}"></classpath>
+ <src path="${result-src-testbench}"/>
</javac>
+
</target>
<target name="compile-helpers" depends="init">
- <javac source="1.5" target="1.5" srcdir="build/buildhelpers" classpath="build/smartsprites/lib/smartsprites-0.2.3-itmill.jar"/>
+ <javac source="1.5" target="1.5" srcdir="build/buildhelpers" classpath="build/smartsprites/lib/smartsprites-0.2.3-itmill.jar" includeantruntime="false"/>
</target>
<target name="defaulttheme" depends="init, compile-helpers">
</target>
<!-- The widgetset generator is currently compiled along with rest of server-side Java. -->
- <target name="compile-widgetset-generator" depends="init, preprocess-src, compile-java"/>
+ <target name="compile-widgetset-generator" depends="compile-core"/>
<path id="widgetset-compile-classpath">
<pathelement location="${lib-gwt-dev}" />
<pathelement location="${lib-gwt-validation}" />
<pathelement location="${lib-gwt-validation-src}" />
- <pathelement location="${result-path}/classes" />
- <pathelement location="${result-path}/src/core" />
+ <pathelement location="${result-classes-core}" />
+ <pathelement location="${result-src-core}" />
</path>
<target name="compile-widgetset" description="Compiles the widgetset given as the first parameter">
</target>
<!-- Definitions for building local components, i.e., not for an installation package. -->
- <target name="init-nonpackage">
- <property file="build/VERSION.properties" />
- <property file="build/GWT-VERSION.properties" />
-
- <property file="build/build.properties" />
-
+ <target name="init-nonpackage" depends="build.properties">
<!-- Definitions for building the client-side. -->
<property name="widgetsets-output-dir" value="WebContent/VAADIN/widgetsets" />
<echo file="${output-dir}/META-INF/GWT-VERSION">${gwt-version}</echo>
<emma enabled="${emma.enabled}" >
- <instr instrpath="${result-path}/classes"
- destdir="${result-path}/war_emma_classes"
+ <instr instrpath="${result-classes-core}"
+ destdir="${result-classes-core-for-emma-war}"
mode="copy"
metadatafile="${result-path}/war.es"
merge="false"
>
<filter includes="com.vaadin.*" />
<filter excludes="com.vaadin.terminal.gwt.*" />
- <filter excludes="com.vaadin.tests.*" />
- <filter excludes="*Test*" />
- <filter excludes="com.vaadin.launcher.*" />
- <filter excludes="com.vaadin.data.util.sqlcontainer.*" />
</instr>
</emma>
<attribute name="Bundle-Version" value="${version.full}" />
</manifest>
<!-- Include any instrumented class files before the normal classes -->
- <fileset dir="${result-path}/war_emma_classes">
- <patternset>
- <exclude name="${toolkit-package}/tests/**"/>
- <exclude name="${toolkit-package}/launcher/**" />
- </patternset>
- </fileset>
- <fileset dir="${result-path}/classes">
- <patternset>
- <exclude name="${toolkit-package}/tests/**"/>
- <exclude name="${toolkit-package}/launcher/**" />
- </patternset>
- </fileset>
+ <fileset dir="${result-classes-core-for-emma-war}" />
+ <fileset dir="${result-classes-core}"/>
<!-- add sources -->
- <fileset dir="${result-path}/src/core">
- <patternset>
- <exclude name="${toolkit-package}/launcher/**" />
- </patternset>
- </fileset>
+ <fileset dir="${result-src-core}"/>
<fileset dir="${output-dir}/WebContent">
<patternset>
<include name="VAADIN/widgetsets/com.vaadin.terminal.gwt.DefaultWidgetSet/**/*" />
<target name="vaadin-sources.jar" depends="init">
<jar file="${result-path}/${lib-sources-jar-name}" compress="true">
- <fileset dir="${result-path}/src/core">
+ <fileset dir="${result-src-core}">
<patternset>
<include name="**/*.java" />
</patternset>
<property name="javadoc.destdir" value="${output-dir}/WebContent/docs/api"/>
<javadoc destdir="${javadoc.destdir}" author="true" version="true" use="true" windowtitle="${product-name}" classpathref="compile.classpath.client-side">
- <packageset dir="${result-path}/src/core">
- <include name="${toolkit-package}/**" />
- </packageset>
+ <packageset dir="${result-src-core}"/>
<doctitle>${javadoc.doctitle}</doctitle>
<!-- <header><![CDATA[<script type="text/javascript" src=".html-style/style.js"></script>]]></header> -->
<bottom>${javadoc.bottom}</bottom>
<!-- Initialize a nightly build. -->
- <target name="nightly-init">
+ <target name="nightly-init" depends="build.properties">
<!-- Mandatory parameters. -->
<fail unless="build.number" message="The build.number property must be defined."/>
<!-- Optional parameters. -->
<property name="build.tag" value="dev"/>
- <property file="build/VERSION.properties" />
-
<echo>Base version: ${version}</echo>
<echo>Build number: ${build.number}</echo>
<echo>Build tag: ${build.tag}</echo>
<!-- Automated tests. -->
<!-- ================================================================== -->
- <target name="tests" depends="compile-java, internal-package-war">
+ <target name="tests" depends="compile-tests, internal-package-war">
<!-- Run all different types of tests in parallel to decrease testing time -->
<parallel threadcount="3">
<sequential>
<include name="*.em" />
</fileset>
</merge>
- <report sourcepath="${result-path}/src/core" >
+ <report sourcepath="${result-src-core}" >
<fileset dir="${result-path}" >
<include name="combined.es" />
</fileset>
</target>
<!-- Assumes java classes have been compiled but depends does not work out well as this is run from a <parallel> task-->
- <target name="server-side-tests" unless="tests.serverside.skip">
+ <target name="server-side-tests" unless="tests.serverside.skip" depends="compile-tests">
<emma enabled="${emma.enabled}" >
- <instr instrpath="${result-path}/classes"
+ <instr instrpath="${result-classes-core}"
+ destdir="${result-classes-core-for-emma-junit}"
mode="copy"
- destdir="${result-path}/junit_emma_classes"
metadatafile="${result-path}/unittests.em"
- merge="false"
- >
+ merge="false"
+ >
<filter includes="com.vaadin.*" />
- <filter excludes="com.vaadin.tests.*" />
- <filter excludes="com.vaadin.terminal.gwt.client.*" />
- <filter excludes="com.vaadin.terminal.gwt.widgetsetutils.*" />
- <filter excludes="*Test*" />
- <filter excludes="com.vaadin.launcher.*" />
+ <filter excludes="com.vaadin.terminal.gwt.*" />
</instr>
</emma>
<junit printsummary="yes">
<classpath>
- <pathelement path="${result-path}/junit_emma_classes" />
- <pathelement path="${result-path}/classes" />
+ <pathelement path="${result-classes-core-for-emma-junit}" />
+ <pathelement path="${result-classes-core}" />
+ <pathelement path="${result-classes-junit}" />
<path refid="emma.lib" />
<path refid="compile.classpath"/>
</classpath>
<jvmarg value="-Demma.coverage.out.file=../${result-path}/unittests.ec" />
<batchtest fork="yes">
- <fileset dir="tests/server-side" includes="**/*.java" excludes="**/Abstract*.java" />
+ <fileset dir="tests/server-side" includes="**/*.java" excludes="**/Abstract*.java,**/VaadinClasses.java" />
<fileset dir="tests/client-side" includes="**/*.java" excludes="**/Abstract*.java" />
</batchtest>
</junit>
<emma enabled="${emma.enabled}" >
- <report sourcepath="${result-path}/src/core" >
+ <report sourcepath="${result-src-core}" >
<fileset dir="${result-path}" >
<include name="unittests.*" />
</fileset>
</ant>
<emma enabled="${emma.enabled}" >
- <report sourcepath="${result-path}/src/core" >
+ <report sourcepath="${result-src-core}" >
<fileset dir="${result-path}" >
<include name="war.*" />
</fileset>
+++ /dev/null
-/* \r
-@VaadinApache2LicenseForJavaFiles@\r
- */\r
-\r
-package com.vaadin.launcher.util;\r
-\r
-import java.io.BufferedInputStream;\r
-import java.io.BufferedReader;\r
-import java.io.File;\r
-import java.io.IOException;\r
-import java.io.InputStreamReader;\r
-\r
-/**\r
- * This class opens default browser for DemoLauncher class. Default browser is\r
- * detected by the operating system.\r
- * \r
- */\r
-public class BrowserLauncher {\r
-\r
- /**\r
- * Open browser on specified URL.\r
- * \r
- * @param url\r
- */\r
- public static void openBrowser(String url) {\r
-\r
- final Runtime runtime = Runtime.getRuntime();\r
- boolean started = false;\r
-\r
- final String os = System.getProperty("os.name", "windows")\r
- .toLowerCase();\r
-\r
- // Linux\r
- if (os.indexOf("linux") >= 0) {\r
- // See if the default browser is Konqueror by resolving the symlink.\r
- boolean isDefaultKonqueror = false;\r
- try {\r
- // Find out the location of the x-www-browser link from path.\r
- Process process = runtime.exec("which x-www-browser");\r
- BufferedInputStream ins = new BufferedInputStream(\r
- process.getInputStream());\r
- BufferedReader bufreader = new BufferedReader(\r
- new InputStreamReader(ins));\r
- String defaultLinkPath = bufreader.readLine();\r
- ins.close();\r
-\r
- // The path is null if the link did not exist.\r
- if (defaultLinkPath != null) {\r
- // See if the default browser is Konqueror.\r
- File file = new File(defaultLinkPath);\r
- String canonical = file.getCanonicalPath();\r
- if (canonical.indexOf("konqueror") != -1) {\r
- isDefaultKonqueror = true;\r
- }\r
- }\r
- } catch (IOException e1) {\r
- // The symlink was probably not found, so this is ok.\r
- }\r
-\r
- // Try x-www-browser, which is symlink to the default browser,\r
- // except if we found that it is Konqueror.\r
- if (!started && !isDefaultKonqueror) {\r
- try {\r
- runtime.exec("x-www-browser " + url);\r
- started = true;\r
- } catch (final IOException e) {\r
- }\r
- }\r
-\r
- // Try firefox\r
- if (!started) {\r
- try {\r
- runtime.exec("firefox " + url);\r
- started = true;\r
- } catch (final IOException e) {\r
- }\r
- }\r
-\r
- // Try mozilla\r
- if (!started) {\r
- try {\r
- runtime.exec("mozilla " + url);\r
- started = true;\r
- } catch (final IOException e) {\r
- }\r
- }\r
-\r
- // Try konqueror\r
- if (!started) {\r
- try {\r
- runtime.exec("konqueror " + url);\r
- started = true;\r
- } catch (final IOException e) {\r
- }\r
- }\r
- }\r
-\r
- // OS X\r
- if (os.indexOf("mac os x") >= 0) {\r
-\r
- // Try open\r
- if (!started) {\r
- try {\r
- runtime.exec("open " + url);\r
- started = true;\r
- } catch (final IOException e) {\r
- }\r
- }\r
- }\r
-\r
- // Try cmd /start command on windows\r
- if (os.indexOf("win") >= 0) {\r
- if (!started) {\r
- try {\r
- runtime.exec("cmd /c start " + url);\r
- started = true;\r
- } catch (final IOException e) {\r
- }\r
- }\r
- }\r
-\r
- if (!started) {\r
- System.out.println("Failed to open browser. Please go to " + url);\r
- }\r
- }\r
-\r
-}\r
--- /dev/null
+package com.vaadin.tests;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.net.JarURLConnection;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.jar.JarEntry;
+
+import org.junit.Test;
+
+import com.vaadin.Application;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.CustomComponent;
+import com.vaadin.ui.DragAndDropWrapper;
+import com.vaadin.ui.HorizontalSplitPanel;
+import com.vaadin.ui.LoginForm;
+import com.vaadin.ui.PopupView;
+import com.vaadin.ui.SplitPanel;
+import com.vaadin.ui.VerticalSplitPanel;
+import com.vaadin.ui.Window;
+
+@SuppressWarnings("deprecation")
+public class VaadinClasses {
+
+ public static void main(String[] args) {
+ System.out.println("ComponentContainers");
+ System.out.println("===================");
+ for (Class<? extends ComponentContainer> c : getComponentContainers()) {
+ System.out.println(c.getName());
+ }
+ System.out.println();
+ System.out.println("Components");
+ System.out.println("==========");
+ for (Class<? extends Component> c : getComponents()) {
+ System.out.println(c.getName());
+ }
+ System.out.println();
+ System.out.println("Server side classes");
+ System.out.println("===================");
+ for (Class<?> c : getAllServerSideClasses()) {
+ System.out.println(c.getName());
+ }
+ }
+
+ public static List<Class<? extends Component>> getComponents() {
+ try {
+ return findClasses(Component.class, "com.vaadin.ui");
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public static List<Class<? extends Object>> getAllServerSideClasses() {
+ try {
+ return findClassesNoTests(Object.class, "com.vaadin", new String[] {
+ "com.vaadin.tests", "com.vaadin.terminal.gwt.client" });
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public static List<Class<? extends ComponentContainer>> getComponentContainers() {
+ try {
+ return findClasses(ComponentContainer.class, "com.vaadin.ui");
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingAddRemoveComponent() {
+ List<Class<? extends ComponentContainer>> classes = getComponentContainers();
+ classes.remove(PopupView.class);
+ classes.remove(CustomComponent.class);
+ classes.remove(DragAndDropWrapper.class);
+ classes.remove(CustomComponent.class);
+ classes.remove(LoginForm.class);
+
+ return classes;
+ }
+
+ public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingUnlimitedNumberOfComponents() {
+ List<Class<? extends ComponentContainer>> classes = getComponentContainersSupportingAddRemoveComponent();
+ classes.remove(SplitPanel.class);
+ classes.remove(VerticalSplitPanel.class);
+ classes.remove(HorizontalSplitPanel.class);
+ classes.remove(Window.class);
+
+ return classes;
+ }
+
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public static List<Class<?>> getBasicComponentTests() {
+ try {
+ // Given as name to avoid dependencies on testbench source folder
+ return (List) findClasses(
+ Class.forName("com.vaadin.tests.components.AbstractComponentTest"),
+ "com.vaadin.tests.components");
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ }
+
+ private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
+ String basePackage) throws IOException {
+ return findClasses(baseClass, basePackage, new String[] {});
+ }
+
+ private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
+ String basePackage, String[] ignoredPackages) throws IOException {
+ List<Class<? extends T>> classes = new ArrayList<Class<? extends T>>();
+ String basePackageDirName = "/" + basePackage.replace('.', '/');
+ URL location = Application.class.getResource(basePackageDirName);
+ if (location.getProtocol().equals("file")) {
+ try {
+ File f = new File(location.toURI());
+ if (!f.exists()) {
+ throw new IOException("Directory " + f.toString()
+ + " does not exist");
+ }
+ findPackages(f, basePackage, baseClass, classes,
+ ignoredPackages);
+ } catch (URISyntaxException e) {
+ throw new IOException(e.getMessage());
+ }
+ } else if (location.getProtocol().equals("jar")) {
+ JarURLConnection juc = (JarURLConnection) location.openConnection();
+ findPackages(juc, basePackage, baseClass, classes);
+ }
+
+ Collections.sort(classes, new Comparator<Class<? extends T>>() {
+
+ public int compare(Class<? extends T> o1, Class<? extends T> o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+
+ });
+ return classes;
+ }
+
+ private static <T> List<Class<? extends T>> findClassesNoTests(
+ Class<T> baseClass, String basePackage, String[] ignoredPackages)
+ throws IOException {
+ List<Class<? extends T>> classes = findClasses(baseClass, basePackage,
+ ignoredPackages);
+ List<Class<? extends T>> classesNoTests = new ArrayList<Class<? extends T>>();
+ for (Class<? extends T> clazz : classes) {
+ if (!clazz.getName().contains("Test")) {
+ boolean testPresent = false;
+ for (Method method : clazz.getMethods()) {
+ if (method.isAnnotationPresent(Test.class)) {
+ testPresent = true;
+ break;
+ }
+ }
+ if (!testPresent) {
+ classesNoTests.add(clazz);
+ }
+ }
+ }
+ return classesNoTests;
+ }
+
+ private static <T> void findPackages(JarURLConnection juc,
+ String javaPackage, Class<T> baseClass,
+ Collection<Class<? extends T>> result) throws IOException {
+ String prefix = "com/vaadin/ui";
+ Enumeration<JarEntry> ent = juc.getJarFile().entries();
+ while (ent.hasMoreElements()) {
+ JarEntry e = ent.nextElement();
+ if (e.getName().endsWith(".class")
+ && e.getName().startsWith(prefix)) {
+ String fullyQualifiedClassName = e.getName().replace('/', '.')
+ .replace(".class", "");
+ addClassIfMatches(result, fullyQualifiedClassName, baseClass);
+ }
+ }
+ }
+
+ private static <T> void findPackages(File parent, String javaPackage,
+ Class<T> baseClass, Collection<Class<? extends T>> result,
+ String[] ignoredPackages) {
+ for (String ignoredPackage : ignoredPackages) {
+ if (javaPackage.equals(ignoredPackage)) {
+ return;
+ }
+ }
+
+ for (File file : parent.listFiles()) {
+ if (file.isDirectory()) {
+ findPackages(file, javaPackage + "." + file.getName(),
+ baseClass, result, ignoredPackages);
+ } else if (file.getName().endsWith(".class")) {
+ String fullyQualifiedClassName = javaPackage + "."
+ + file.getName().replace(".class", "");
+ addClassIfMatches(result, fullyQualifiedClassName, baseClass);
+ }
+ }
+
+ }
+
+ @SuppressWarnings("unchecked")
+ private static <T> void addClassIfMatches(
+ Collection<Class<? extends T>> result,
+ String fullyQualifiedClassName, Class<T> baseClass) {
+ try {
+ // Try to load the class
+
+ Class<?> c = Class.forName(fullyQualifiedClassName);
+ if (baseClass.isAssignableFrom(c)
+ && !Modifier.isAbstract(c.getModifiers())) {
+ result.add((Class<? extends T>) c);
+ }
+ } catch (Exception e) {
+ // Could ignore that class cannot be loaded
+ e.printStackTrace();
+ } catch (LinkageError e) {
+ // Ignore. Client side classes will at least throw LinkageErrors
+ }
+
+ }
+}
--- /dev/null
+/* \r
+@VaadinApache2LicenseForJavaFiles@\r
+ */\r
+\r
+package com.vaadin.launcher.util;\r
+\r
+import java.io.BufferedInputStream;\r
+import java.io.BufferedReader;\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.io.InputStreamReader;\r
+\r
+/**\r
+ * This class opens default browser for DemoLauncher class. Default browser is\r
+ * detected by the operating system.\r
+ * \r
+ */\r
+public class BrowserLauncher {\r
+\r
+ /**\r
+ * Open browser on specified URL.\r
+ * \r
+ * @param url\r
+ */\r
+ public static void openBrowser(String url) {\r
+\r
+ final Runtime runtime = Runtime.getRuntime();\r
+ boolean started = false;\r
+\r
+ final String os = System.getProperty("os.name", "windows")\r
+ .toLowerCase();\r
+\r
+ // Linux\r
+ if (os.indexOf("linux") >= 0) {\r
+ // See if the default browser is Konqueror by resolving the symlink.\r
+ boolean isDefaultKonqueror = false;\r
+ try {\r
+ // Find out the location of the x-www-browser link from path.\r
+ Process process = runtime.exec("which x-www-browser");\r
+ BufferedInputStream ins = new BufferedInputStream(\r
+ process.getInputStream());\r
+ BufferedReader bufreader = new BufferedReader(\r
+ new InputStreamReader(ins));\r
+ String defaultLinkPath = bufreader.readLine();\r
+ ins.close();\r
+\r
+ // The path is null if the link did not exist.\r
+ if (defaultLinkPath != null) {\r
+ // See if the default browser is Konqueror.\r
+ File file = new File(defaultLinkPath);\r
+ String canonical = file.getCanonicalPath();\r
+ if (canonical.indexOf("konqueror") != -1) {\r
+ isDefaultKonqueror = true;\r
+ }\r
+ }\r
+ } catch (IOException e1) {\r
+ // The symlink was probably not found, so this is ok.\r
+ }\r
+\r
+ // Try x-www-browser, which is symlink to the default browser,\r
+ // except if we found that it is Konqueror.\r
+ if (!started && !isDefaultKonqueror) {\r
+ try {\r
+ runtime.exec("x-www-browser " + url);\r
+ started = true;\r
+ } catch (final IOException e) {\r
+ }\r
+ }\r
+\r
+ // Try firefox\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("firefox " + url);\r
+ started = true;\r
+ } catch (final IOException e) {\r
+ }\r
+ }\r
+\r
+ // Try mozilla\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("mozilla " + url);\r
+ started = true;\r
+ } catch (final IOException e) {\r
+ }\r
+ }\r
+\r
+ // Try konqueror\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("konqueror " + url);\r
+ started = true;\r
+ } catch (final IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ // OS X\r
+ if (os.indexOf("mac os x") >= 0) {\r
+\r
+ // Try open\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("open " + url);\r
+ started = true;\r
+ } catch (final IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ // Try cmd /start command on windows\r
+ if (os.indexOf("win") >= 0) {\r
+ if (!started) {\r
+ try {\r
+ runtime.exec("cmd /c start " + url);\r
+ started = true;\r
+ } catch (final IOException e) {\r
+ }\r
+ }\r
+ }\r
+\r
+ if (!started) {\r
+ System.out.println("Failed to open browser. Please go to " + url);\r
+ }\r
+ }\r
+\r
+}\r
public class Components extends Application {\r
\r
private static final Object CAPTION = "c";\r
- private Map<Class<? extends AbstractComponentTest<?>>, String> tests = new HashMap<Class<? extends AbstractComponentTest<?>>, String>();\r
+ private Map<Class<? extends AbstractComponentTest>, String> tests = new HashMap<Class<? extends AbstractComponentTest>, String>();\r
private Tree naviTree;\r
private HorizontalSplitPanel sp;\r
private Window mainWindow;\r
private List<Class<? extends Component>> componentsWithoutTests = new ArrayList<Class<? extends Component>>();\r
\r
{\r
- for (Class<? extends AbstractComponentTest<?>> c : VaadinClasses\r
- .getBasicComponentTests()) {\r
+ for (Class<?> c : VaadinClasses.getBasicComponentTests()) {\r
String testClass = c.getSimpleName();\r
- tests.put(c, testClass);\r
+ tests.put((Class<? extends AbstractComponentTest>) c, testClass);\r
}\r
\r
List<Class<? extends Component>> componentsWithoutTest = VaadinClasses\r
hc.setItemSorter(sorter);\r
naviTree.addContainerProperty(CAPTION, String.class, "");\r
naviTree.setItemCaptionPropertyId(CAPTION);\r
- for (Class<? extends AbstractComponentTest<?>> cls : tests.keySet()) {\r
+ for (Class<? extends AbstractComponentTest> cls : tests.keySet()) {\r
addTreeItem(cls);\r
}\r
hc.sort(new Object[] { CAPTION }, new boolean[] { true });\r
}\r
\r
@SuppressWarnings("unchecked")\r
- private void addTreeItem(Class<? extends AbstractComponentTest<?>> cls) {\r
+ private void addTreeItem(Class<? extends AbstractComponentTest> cls) {\r
String name = tests.get(cls);\r
if (name == null) {\r
name = cls.getSimpleName();\r
}\r
\r
- Class<? extends AbstractComponentTest<?>> superClass = (Class<? extends AbstractComponentTest<?>>) cls\r
+ Class<? extends AbstractComponentTest> superClass = (Class<? extends AbstractComponentTest>) cls\r
.getSuperclass();\r
\r
// This cast is needed only to make compilation through Ant work ..\r
}\r
\r
protected Component createTestComponent(\r
- Class<? extends AbstractComponentTest<?>> cls) {\r
+ Class<? extends AbstractComponentTest> cls) {\r
try {\r
- AbstractComponentTest<?> t = cls.newInstance();\r
+ AbstractComponentTest t = cls.newInstance();\r
t.init();\r
ComponentContainer c = t.getMainWindow().getContent();\r
t.getMainWindow().setContent(null);\r
+++ /dev/null
-package com.vaadin.tests;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.net.JarURLConnection;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.jar.JarEntry;
-
-import org.junit.Test;
-
-import com.vaadin.Application;
-import com.vaadin.tests.components.AbstractComponentTest;
-import com.vaadin.ui.Component;
-import com.vaadin.ui.ComponentContainer;
-import com.vaadin.ui.CustomComponent;
-import com.vaadin.ui.DragAndDropWrapper;
-import com.vaadin.ui.HorizontalSplitPanel;
-import com.vaadin.ui.LoginForm;
-import com.vaadin.ui.PopupView;
-import com.vaadin.ui.SplitPanel;
-import com.vaadin.ui.VerticalSplitPanel;
-import com.vaadin.ui.Window;
-
-@SuppressWarnings("deprecation")
-public class VaadinClasses {
-
- public static void main(String[] args) {
- System.out.println("ComponentContainers");
- System.out.println("===================");
- for (Class<? extends ComponentContainer> c : getComponentContainers()) {
- System.out.println(c.getName());
- }
- System.out.println();
- System.out.println("Components");
- System.out.println("==========");
- for (Class<? extends Component> c : getComponents()) {
- System.out.println(c.getName());
- }
- System.out.println();
- System.out.println("Server side classes");
- System.out.println("===================");
- for (Class<?> c : getAllServerSideClasses()) {
- System.out.println(c.getName());
- }
- }
-
- public static List<Class<? extends Component>> getComponents() {
- try {
- return findClasses(Component.class, "com.vaadin.ui");
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- public static List<Class<? extends Object>> getAllServerSideClasses() {
- try {
- return findClassesNoTests(Object.class, "com.vaadin", new String[] {
- "com.vaadin.tests", "com.vaadin.terminal.gwt.client" });
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- public static List<Class<? extends ComponentContainer>> getComponentContainers() {
- try {
- return findClasses(ComponentContainer.class, "com.vaadin.ui");
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
- }
-
- public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingAddRemoveComponent() {
- List<Class<? extends ComponentContainer>> classes = getComponentContainers();
- classes.remove(PopupView.class);
- classes.remove(CustomComponent.class);
- classes.remove(DragAndDropWrapper.class);
- classes.remove(CustomComponent.class);
- classes.remove(LoginForm.class);
-
- return classes;
- }
-
- public static List<Class<? extends ComponentContainer>> getComponentContainersSupportingUnlimitedNumberOfComponents() {
- List<Class<? extends ComponentContainer>> classes = getComponentContainersSupportingAddRemoveComponent();
- classes.remove(SplitPanel.class);
- classes.remove(VerticalSplitPanel.class);
- classes.remove(HorizontalSplitPanel.class);
- classes.remove(Window.class);
-
- return classes;
- }
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- public static List<Class<? extends AbstractComponentTest<?>>> getBasicComponentTests() {
- try {
- return (List) findClasses(AbstractComponentTest.class,
- "com.vaadin.tests.components");
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
-
- }
-
- private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
- String basePackage) throws IOException {
- return findClasses(baseClass, basePackage, new String[] {});
- }
-
- private static <T> List<Class<? extends T>> findClasses(Class<T> baseClass,
- String basePackage, String[] ignoredPackages) throws IOException {
- List<Class<? extends T>> classes = new ArrayList<Class<? extends T>>();
- String basePackageDirName = "/" + basePackage.replace('.', '/');
- URL location = Application.class.getResource(basePackageDirName);
- if (location.getProtocol().equals("file")) {
- try {
- File f = new File(location.toURI());
- if (!f.exists()) {
- throw new IOException("Directory " + f.toString()
- + " does not exist");
- }
- findPackages(f, basePackage, baseClass, classes,
- ignoredPackages);
- } catch (URISyntaxException e) {
- throw new IOException(e.getMessage());
- }
- } else if (location.getProtocol().equals("jar")) {
- JarURLConnection juc = (JarURLConnection) location.openConnection();
- findPackages(juc, basePackage, baseClass, classes);
- }
-
- Collections.sort(classes, new Comparator<Class<? extends T>>() {
-
- public int compare(Class<? extends T> o1, Class<? extends T> o2) {
- return o1.getName().compareTo(o2.getName());
- }
-
- });
- return classes;
- }
-
- private static <T> List<Class<? extends T>> findClassesNoTests(
- Class<T> baseClass, String basePackage, String[] ignoredPackages)
- throws IOException {
- List<Class<? extends T>> classes = findClasses(baseClass, basePackage,
- ignoredPackages);
- List<Class<? extends T>> classesNoTests = new ArrayList<Class<? extends T>>();
- for (Class<? extends T> clazz : classes) {
- if (!clazz.getName().contains("Test")) {
- boolean testPresent = false;
- for (Method method : clazz.getMethods()) {
- if (method.isAnnotationPresent(Test.class)) {
- testPresent = true;
- break;
- }
- }
- if (!testPresent) {
- classesNoTests.add(clazz);
- }
- }
- }
- return classesNoTests;
- }
-
- private static <T> void findPackages(JarURLConnection juc,
- String javaPackage, Class<T> baseClass,
- Collection<Class<? extends T>> result) throws IOException {
- String prefix = "com/vaadin/ui";
- Enumeration<JarEntry> ent = juc.getJarFile().entries();
- while (ent.hasMoreElements()) {
- JarEntry e = ent.nextElement();
- if (e.getName().endsWith(".class")
- && e.getName().startsWith(prefix)) {
- String fullyQualifiedClassName = e.getName().replace('/', '.')
- .replace(".class", "");
- addClassIfMatches(result, fullyQualifiedClassName, baseClass);
- }
- }
- }
-
- private static <T> void findPackages(File parent, String javaPackage,
- Class<T> baseClass, Collection<Class<? extends T>> result,
- String[] ignoredPackages) {
- for (String ignoredPackage : ignoredPackages) {
- if (javaPackage.equals(ignoredPackage)) {
- return;
- }
- }
-
- for (File file : parent.listFiles()) {
- if (file.isDirectory()) {
- findPackages(file, javaPackage + "." + file.getName(),
- baseClass, result, ignoredPackages);
- } else if (file.getName().endsWith(".class")) {
- String fullyQualifiedClassName = javaPackage + "."
- + file.getName().replace(".class", "");
- addClassIfMatches(result, fullyQualifiedClassName, baseClass);
- }
- }
-
- }
-
- @SuppressWarnings("unchecked")
- private static <T> void addClassIfMatches(
- Collection<Class<? extends T>> result,
- String fullyQualifiedClassName, Class<T> baseClass) {
- try {
- // Try to load the class
-
- Class<?> c = Class.forName(fullyQualifiedClassName);
- if (baseClass.isAssignableFrom(c)
- && !Modifier.isAbstract(c.getModifiers())) {
- result.add((Class<? extends T>) c);
- }
- } catch (Exception e) {
- // Could ignore that class cannot be loaded
- e.printStackTrace();
- } catch (LinkageError e) {
- // Ignore. Client side classes will at least throw LinkageErrors
- }
-
- }
-}